From 4f034a487d20fb33458d3626cbc8e37294548dda Mon Sep 17 00:00:00 2001 From: Neil Shen Date: Wed, 5 Dec 2018 13:22:43 +0800 Subject: [PATCH] Switch to go mod (#22) --- Gopkg.lock | 406 - Gopkg.toml | 47 - Makefile | 8 +- Porcupine-LICENSE | 23 +- db/tidb/bank.go | 7 +- db/tidb/multi_bank.go | 3 +- docker/control/Dockerfile | 4 +- go.mod | 16 + go.sum | 176 + pkg/check/porcupine/porcupine.go | 7 +- vendor/github.com/BurntSushi/toml/COPYING | 21 - .../toml/cmd/toml-test-decoder/COPYING | 14 - .../toml/cmd/toml-test-encoder/COPYING | 14 - .../BurntSushi/toml/cmd/tomlv/COPYING | 14 - vendor/github.com/BurntSushi/toml/decode.go | 509 - .../github.com/BurntSushi/toml/decode_meta.go | 121 - vendor/github.com/BurntSushi/toml/doc.go | 27 - vendor/github.com/BurntSushi/toml/encode.go | 568 - .../BurntSushi/toml/encoding_types.go | 19 - .../BurntSushi/toml/encoding_types_1.1.go | 18 - vendor/github.com/BurntSushi/toml/lex.go | 953 - vendor/github.com/BurntSushi/toml/parse.go | 592 - .../github.com/BurntSushi/toml/type_check.go | 91 - .../github.com/BurntSushi/toml/type_fields.go | 242 - .../anishathalye/porcupine/LICENSE.md | 22 - .../anishathalye/porcupine/bitset.go | 74 - .../anishathalye/porcupine/model.go | 51 - .../anishathalye/porcupine/porcupine.go | 313 - vendor/github.com/beorn7/perks/LICENSE | 20 - .../beorn7/perks/quantile/stream.go | 316 - .../github.com/codahale/hdrhistogram/LICENSE | 21 - .../github.com/codahale/hdrhistogram/hdr.go | 564 - .../codahale/hdrhistogram/window.go | 45 - .../coreos/etcd/Documentation/README.md | 1 - vendor/github.com/coreos/etcd/LICENSE | 202 - vendor/github.com/coreos/etcd/NOTICE | 5 - .../coreos/etcd/auth/authpb/auth.pb.go | 824 - .../github.com/coreos/etcd/clientv3/auth.go | 233 - .../github.com/coreos/etcd/clientv3/client.go | 562 - .../coreos/etcd/clientv3/cluster.go | 113 - .../coreos/etcd/clientv3/compact_op.go | 51 - .../coreos/etcd/clientv3/compare.go | 120 - .../coreos/etcd/clientv3/concurrency/doc.go | 17 - .../etcd/clientv3/concurrency/election.go | 246 - .../coreos/etcd/clientv3/concurrency/key.go | 66 - .../coreos/etcd/clientv3/concurrency/mutex.go | 119 - .../etcd/clientv3/concurrency/session.go | 142 - .../coreos/etcd/clientv3/concurrency/stm.go | 388 - .../github.com/coreos/etcd/clientv3/config.go | 75 - vendor/github.com/coreos/etcd/clientv3/doc.go | 64 - .../coreos/etcd/clientv3/health_balancer.go | 627 - vendor/github.com/coreos/etcd/clientv3/kv.go | 176 - .../github.com/coreos/etcd/clientv3/lease.go | 545 - .../github.com/coreos/etcd/clientv3/logger.go | 96 - .../coreos/etcd/clientv3/maintenance.go | 187 - vendor/github.com/coreos/etcd/clientv3/op.go | 511 - .../coreos/etcd/clientv3/options.go | 49 - .../coreos/etcd/clientv3/ready_wait.go | 30 - .../github.com/coreos/etcd/clientv3/retry.go | 471 - .../github.com/coreos/etcd/clientv3/sort.go | 37 - vendor/github.com/coreos/etcd/clientv3/txn.go | 151 - .../github.com/coreos/etcd/clientv3/watch.go | 814 - vendor/github.com/coreos/etcd/cmd/etcd | 1 - vendor/github.com/coreos/etcd/cmd/etcdctl | 1 - vendor/github.com/coreos/etcd/cmd/tools | 1 - .../etcd/etcdserver/api/v3rpc/rpctypes/doc.go | 16 - .../etcdserver/api/v3rpc/rpctypes/error.go | 201 - .../etcd/etcdserver/api/v3rpc/rpctypes/md.go | 20 - .../etcdserver/etcdserverpb/etcdserver.pb.go | 1045 - .../etcdserverpb/raft_internal.pb.go | 2094 - .../etcd/etcdserver/etcdserverpb/rpc.pb.go | 17293 ---- .../coreos/etcd/mvcc/mvccpb/kv.pb.go | 735 - .../github.com/coreos/etcd/pkg/types/doc.go | 17 - vendor/github.com/coreos/etcd/pkg/types/id.go | 41 - .../github.com/coreos/etcd/pkg/types/set.go | 178 - .../github.com/coreos/etcd/pkg/types/slice.go | 22 - .../github.com/coreos/etcd/pkg/types/urls.go | 82 - .../coreos/etcd/pkg/types/urlsmap.go | 107 - vendor/github.com/cznic/mathutil/AUTHORS | 13 - vendor/github.com/cznic/mathutil/CONTRIBUTORS | 14 - vendor/github.com/cznic/mathutil/LICENSE | 27 - vendor/github.com/cznic/mathutil/bits.go | 207 - vendor/github.com/cznic/mathutil/envelope.go | 46 - vendor/github.com/cznic/mathutil/int.go | 155 - vendor/github.com/cznic/mathutil/mathutil.go | 1416 - .../cznic/mathutil/mersenne/AUTHORS | 11 - .../cznic/mathutil/mersenne/CONTRIBUTORS | 9 - .../cznic/mathutil/mersenne/LICENSE | 27 - vendor/github.com/cznic/mathutil/permute.go | 39 - vendor/github.com/cznic/mathutil/poly.go | 248 - vendor/github.com/cznic/mathutil/primes.go | 335 - vendor/github.com/cznic/mathutil/rat.go | 27 - vendor/github.com/cznic/mathutil/rnd.go | 383 - vendor/github.com/cznic/mathutil/tables.go | 6995 -- vendor/github.com/cznic/mathutil/test_deps.go | 11 - vendor/github.com/go-sql-driver/mysql/AUTHORS | 56 - vendor/github.com/go-sql-driver/mysql/LICENSE | 373 - .../go-sql-driver/mysql/appengine.go | 19 - .../github.com/go-sql-driver/mysql/buffer.go | 147 - .../go-sql-driver/mysql/collations.go | 250 - .../go-sql-driver/mysql/connection.go | 377 - .../github.com/go-sql-driver/mysql/const.go | 163 - .../github.com/go-sql-driver/mysql/driver.go | 183 - vendor/github.com/go-sql-driver/mysql/dsn.go | 548 - .../github.com/go-sql-driver/mysql/errors.go | 132 - .../github.com/go-sql-driver/mysql/infile.go | 182 - .../github.com/go-sql-driver/mysql/packets.go | 1287 - .../github.com/go-sql-driver/mysql/result.go | 22 - vendor/github.com/go-sql-driver/mysql/rows.go | 112 - .../go-sql-driver/mysql/statement.go | 153 - .../go-sql-driver/mysql/transaction.go | 31 - .../github.com/go-sql-driver/mysql/utils.go | 740 - vendor/github.com/golang/protobuf/AUTHORS | 3 - .../github.com/golang/protobuf/CONTRIBUTORS | 3 - vendor/github.com/golang/protobuf/LICENSE | 31 - .../github.com/golang/protobuf/proto/clone.go | 253 - .../golang/protobuf/proto/decode.go | 428 - .../golang/protobuf/proto/discard.go | 350 - .../golang/protobuf/proto/encode.go | 221 - .../github.com/golang/protobuf/proto/equal.go | 300 - .../golang/protobuf/proto/extensions.go | 543 - .../github.com/golang/protobuf/proto/lib.go | 921 - .../golang/protobuf/proto/message_set.go | 314 - .../golang/protobuf/proto/pointer_reflect.go | 357 - .../golang/protobuf/proto/pointer_unsafe.go | 308 - .../golang/protobuf/proto/properties.go | 544 - .../golang/protobuf/proto/table_marshal.go | 2681 - .../golang/protobuf/proto/table_merge.go | 654 - .../golang/protobuf/proto/table_unmarshal.go | 1967 - .../github.com/golang/protobuf/proto/text.go | 843 - .../golang/protobuf/proto/text_parser.go | 880 - .../protoc-gen-go/descriptor/descriptor.pb.go | 2812 - .../github.com/golang/protobuf/ptypes/any.go | 139 - .../golang/protobuf/ptypes/any/any.pb.go | 191 - .../github.com/golang/protobuf/ptypes/doc.go | 35 - .../golang/protobuf/ptypes/duration.go | 102 - .../protobuf/ptypes/duration/duration.pb.go | 159 - .../golang/protobuf/ptypes/timestamp.go | 134 - .../protobuf/ptypes/timestamp/timestamp.pb.go | 175 - vendor/github.com/golang/snappy/AUTHORS | 15 - vendor/github.com/golang/snappy/CONTRIBUTORS | 37 - vendor/github.com/golang/snappy/LICENSE | 27 - vendor/github.com/golang/snappy/decode.go | 237 - .../github.com/golang/snappy/decode_amd64.go | 14 - .../github.com/golang/snappy/decode_amd64.s | 490 - .../github.com/golang/snappy/decode_other.go | 101 - vendor/github.com/golang/snappy/encode.go | 285 - .../github.com/golang/snappy/encode_amd64.go | 29 - .../github.com/golang/snappy/encode_amd64.s | 730 - .../github.com/golang/snappy/encode_other.go | 238 - vendor/github.com/golang/snappy/snappy.go | 98 - vendor/github.com/google/btree/LICENSE | 202 - vendor/github.com/google/btree/btree.go | 881 - vendor/github.com/google/btree/btree_mem.go | 76 - .../grpc-ecosystem/go-grpc-middleware/LICENSE | 201 - .../go-grpc-middleware/auth/README.md | 1 - .../go-grpc-middleware/chain.go | 183 - .../grpc-ecosystem/go-grpc-middleware/doc.go | 69 - .../go-grpc-middleware/logging/README.md | 1 - .../logging/logrus/README.md | 1 - .../go-grpc-middleware/logging/zap/README.md | 1 - .../go-grpc-middleware/recovery/README.md | 1 - .../go-grpc-middleware/retry/README.md | 1 - .../go-grpc-middleware/tags/README.md | 1 - .../go-grpc-middleware/tags/context.go | 78 - .../go-grpc-middleware/tags/doc.go | 22 - .../go-grpc-middleware/tags/fieldextractor.go | 85 - .../go-grpc-middleware/tags/interceptors.go | 83 - .../go-grpc-middleware/tags/options.go | 44 - .../tracing/opentracing/README.md | 1 - .../opentracing/client_interceptors.go | 142 - .../tracing/opentracing/doc.go | 22 - .../tracing/opentracing/id_extract.go | 42 - .../tracing/opentracing/metadata.go | 56 - .../tracing/opentracing/options.go | 55 - .../opentracing/server_interceptors.go | 86 - .../util/metautils/README.md | 1 - .../go-grpc-middleware/util/metautils/doc.go | 19 - .../util/metautils/nicemd.go | 126 - .../util/metautils/single_key.go | 22 - .../go-grpc-middleware/wrappers.go | 29 - .../grpc-ecosystem/go-grpc-prometheus/LICENSE | 201 - .../go-grpc-prometheus/client.go | 39 - .../go-grpc-prometheus/client_metrics.go | 170 - .../go-grpc-prometheus/client_reporter.go | 46 - .../go-grpc-prometheus/metric_options.go | 41 - .../go-grpc-prometheus/server.go | 48 - .../go-grpc-prometheus/server_metrics.go | 185 - .../go-grpc-prometheus/server_reporter.go | 46 - .../grpc-ecosystem/go-grpc-prometheus/util.go | 50 - vendor/github.com/juju/errors/LICENSE | 191 - vendor/github.com/juju/errors/doc.go | 81 - vendor/github.com/juju/errors/error.go | 172 - vendor/github.com/juju/errors/errortypes.go | 309 - vendor/github.com/juju/errors/functions.go | 330 - vendor/github.com/juju/errors/path.go | 38 - .../golang_protobuf_extensions/LICENSE | 201 - .../golang_protobuf_extensions/NOTICE | 1 - .../pbutil/decode.go | 75 - .../golang_protobuf_extensions/pbutil/doc.go | 16 - .../pbutil/encode.go | 46 - .../opentracing/opentracing-go/LICENSE | 21 - .../opentracing/opentracing-go/ext/tags.go | 198 - .../opentracing-go/globaltracer.go | 32 - .../opentracing/opentracing-go/gocontext.go | 57 - .../opentracing/opentracing-go/log/field.go | 245 - .../opentracing/opentracing-go/log/util.go | 54 - .../opentracing/opentracing-go/noop.go | 64 - .../opentracing/opentracing-go/propagation.go | 176 - .../opentracing/opentracing-go/span.go | 185 - .../opentracing/opentracing-go/tracer.go | 305 - vendor/github.com/petar/GoLLRB/AUTHORS | 4 - vendor/github.com/petar/GoLLRB/LICENSE | 27 - vendor/github.com/petar/GoLLRB/llrb/avgvar.go | 39 - .../github.com/petar/GoLLRB/llrb/iterator.go | 93 - .../petar/GoLLRB/llrb/llrb-stats.go | 46 - vendor/github.com/petar/GoLLRB/llrb/llrb.go | 456 - vendor/github.com/petar/GoLLRB/llrb/util.go | 17 - vendor/github.com/pingcap/goleveldb/LICENSE | 24 - .../pingcap/goleveldb/leveldb/batch.go | 349 - .../pingcap/goleveldb/leveldb/cache/cache.go | 705 - .../pingcap/goleveldb/leveldb/cache/lru.go | 195 - .../pingcap/goleveldb/leveldb/comparer.go | 67 - .../leveldb/comparer/bytes_comparer.go | 51 - .../goleveldb/leveldb/comparer/comparer.go | 57 - .../pingcap/goleveldb/leveldb/db.go | 1091 - .../goleveldb/leveldb/db_compaction.go | 826 - .../pingcap/goleveldb/leveldb/db_iter.go | 360 - .../pingcap/goleveldb/leveldb/db_snapshot.go | 183 - .../pingcap/goleveldb/leveldb/db_state.go | 239 - .../goleveldb/leveldb/db_transaction.go | 325 - .../pingcap/goleveldb/leveldb/db_util.go | 102 - .../pingcap/goleveldb/leveldb/db_write.go | 452 - .../pingcap/goleveldb/leveldb/doc.go | 92 - .../pingcap/goleveldb/leveldb/errors.go | 20 - .../goleveldb/leveldb/errors/errors.go | 78 - .../pingcap/goleveldb/leveldb/filter.go | 31 - .../pingcap/goleveldb/leveldb/filter/bloom.go | 116 - .../goleveldb/leveldb/filter/filter.go | 60 - .../goleveldb/leveldb/iterator/array_iter.go | 184 - .../leveldb/iterator/indexed_iter.go | 242 - .../goleveldb/leveldb/iterator/iter.go | 132 - .../goleveldb/leveldb/iterator/merged_iter.go | 304 - .../goleveldb/leveldb/journal/journal.go | 524 - .../pingcap/goleveldb/leveldb/key.go | 143 - .../pingcap/goleveldb/leveldb/memdb/memdb.go | 524 - .../pingcap/goleveldb/leveldb/opt/options.go | 684 - .../pingcap/goleveldb/leveldb/options.go | 107 - .../pingcap/goleveldb/leveldb/session.go | 210 - .../goleveldb/leveldb/session_compaction.go | 302 - .../goleveldb/leveldb/session_record.go | 323 - .../pingcap/goleveldb/leveldb/session_util.go | 271 - .../goleveldb/leveldb/storage/file_storage.go | 599 - .../leveldb/storage/file_storage_nacl.go | 34 - .../leveldb/storage/file_storage_plan9.go | 65 - .../leveldb/storage/file_storage_solaris.go | 81 - .../leveldb/storage/file_storage_unix.go | 86 - .../leveldb/storage/file_storage_windows.go | 78 - .../goleveldb/leveldb/storage/mem_storage.go | 218 - .../goleveldb/leveldb/storage/storage.go | 179 - .../pingcap/goleveldb/leveldb/table.go | 529 - .../pingcap/goleveldb/leveldb/table/reader.go | 1135 - .../pingcap/goleveldb/leveldb/table/table.go | 177 - .../pingcap/goleveldb/leveldb/table/writer.go | 375 - .../pingcap/goleveldb/leveldb/util.go | 98 - .../pingcap/goleveldb/leveldb/util/buffer.go | 293 - .../goleveldb/leveldb/util/buffer_pool.go | 239 - .../pingcap/goleveldb/leveldb/util/crc32.go | 30 - .../pingcap/goleveldb/leveldb/util/hash.go | 48 - .../pingcap/goleveldb/leveldb/util/range.go | 32 - .../pingcap/goleveldb/leveldb/util/util.go | 73 - .../pingcap/goleveldb/leveldb/version.go | 528 - vendor/github.com/pingcap/kvproto/LICENSE | 201 - .../src/github.com/gogo/protobuf/LICENSE | 36 - .../src/github.com/golang/protobuf/LICENSE | 31 - .../src/github.com/juju/errors/LICENSE | 191 - .../_vendor/src/github.com/pingcap/kvproto | 1 - .../src/github.com/pingcap/tipb/LICENSE | 201 - .../_vendor/src/golang.org/x/net/LICENSE | 27 - .../_vendor/src/golang.org/x/net/PATENTS | 22 - .../_vendor/src/golang.org/x/text/LICENSE | 27 - .../_vendor/src/golang.org/x/tools/LICENSE | 27 - .../_vendor/src/golang.org/x/tools/PATENTS | 22 - .../src/google.golang.org/grpc/LICENSE | 28 - .../src/google.golang.org/grpc/PATENTS | 22 - .../kvproto/pkg/coprocessor/coprocessor.pb.go | 1073 - .../pingcap/kvproto/pkg/eraftpb/eraftpb.pb.go | 2349 - .../pingcap/kvproto/pkg/errorpb/errorpb.pb.go | 1984 - .../pingcap/kvproto/pkg/kvrpcpb/kvrpcpb.pb.go | 15024 ---- .../pingcap/kvproto/pkg/metapb/metapb.pb.go | 1514 - .../pingcap/kvproto/pkg/pdpb/pdpb.pb.go | 10421 --- .../pkg/raft_serverpb/raft_serverpb.pb.go | 3019 - .../pingcap/kvproto/pkg/tikvpb/tikvpb.pb.go | 1161 - vendor/github.com/pingcap/pd/LICENSE | 201 - .../github.com/pingcap/pd/pd-client/client.go | 654 - .../pingcap/pd/pd-client/metrics.go | 51 - vendor/github.com/pingcap/tidb/CONTRIBUTORS | 124 - vendor/github.com/pingcap/tidb/LICENSE | 201 - .../github.com/pingcap/tidb/config/config.go | 379 - .../pingcap/tidb/kv/buffer_store.go | 117 - vendor/github.com/pingcap/tidb/kv/error.go | 107 - .../pingcap/tidb/kv/fault_injection.go | 143 - vendor/github.com/pingcap/tidb/kv/iter.go | 29 - vendor/github.com/pingcap/tidb/kv/key.go | 96 - vendor/github.com/pingcap/tidb/kv/kv.go | 275 - .../pingcap/tidb/kv/memdb_buffer.go | 181 - vendor/github.com/pingcap/tidb/kv/mock.go | 220 - vendor/github.com/pingcap/tidb/kv/txn.go | 127 - .../github.com/pingcap/tidb/kv/union_iter.go | 185 - .../github.com/pingcap/tidb/kv/union_store.go | 266 - vendor/github.com/pingcap/tidb/kv/utils.go | 60 - .../github.com/pingcap/tidb/kv/variables.go | 38 - vendor/github.com/pingcap/tidb/kv/version.go | 51 - .../pingcap/tidb/meta/autoid/autoid.go | 262 - vendor/github.com/pingcap/tidb/meta/meta.go | 723 - vendor/github.com/pingcap/tidb/metrics/ddl.go | 124 - .../pingcap/tidb/metrics/distsql.go | 62 - .../github.com/pingcap/tidb/metrics/domain.go | 54 - .../pingcap/tidb/metrics/executor.go | 44 - .../github.com/pingcap/tidb/metrics/meta.go | 53 - .../pingcap/tidb/metrics/metrics.go | 52 - .../github.com/pingcap/tidb/metrics/owner.go | 58 - .../github.com/pingcap/tidb/metrics/server.go | 138 - .../pingcap/tidb/metrics/session.go | 123 - .../github.com/pingcap/tidb/metrics/stats.go | 89 - .../pingcap/tidb/metrics/tikvclient.go | 202 - vendor/github.com/pingcap/tidb/model/ddl.go | 374 - vendor/github.com/pingcap/tidb/model/flags.go | 43 - vendor/github.com/pingcap/tidb/model/model.go | 495 - .../github.com/pingcap/tidb/mysql/charset.go | 608 - vendor/github.com/pingcap/tidb/mysql/const.go | 633 - .../github.com/pingcap/tidb/mysql/errcode.go | 907 - .../github.com/pingcap/tidb/mysql/errname.go | 902 - vendor/github.com/pingcap/tidb/mysql/error.go | 71 - .../pingcap/tidb/mysql/locale_format.go | 99 - vendor/github.com/pingcap/tidb/mysql/state.go | 257 - vendor/github.com/pingcap/tidb/mysql/type.go | 149 - vendor/github.com/pingcap/tidb/mysql/util.go | 93 - .../github.com/pingcap/tidb/owner/manager.go | 342 - vendor/github.com/pingcap/tidb/owner/mock.go | 78 - .../pingcap/tidb/parser/opcode/opcode.go | 138 - .../tidb/sessionctx/binloginfo/binloginfo.go | 184 - .../pingcap/tidb/sessionctx/context.go | 119 - .../tidb/sessionctx/stmtctx/stmtctx.go | 214 - .../tidb/sessionctx/variable/session.go | 639 - .../tidb/sessionctx/variable/statusvar.go | 172 - .../tidb/sessionctx/variable/sysvar.go | 694 - .../tidb/sessionctx/variable/tidb_vars.go | 224 - .../tidb/sessionctx/variable/varsutil.go | 213 - .../github.com/pingcap/tidb/store/tikv/2pc.go | 730 - .../pingcap/tidb/store/tikv/backoff.go | 272 - .../pingcap/tidb/store/tikv/client.go | 277 - .../pingcap/tidb/store/tikv/coprocessor.go | 791 - .../pingcap/tidb/store/tikv/delete_range.go | 121 - .../pingcap/tidb/store/tikv/error.go | 56 - .../pingcap/tidb/store/tikv/interface.go | 70 - .../github.com/pingcap/tidb/store/tikv/kv.go | 406 - .../pingcap/tidb/store/tikv/latch/latch.go | 235 - .../tidb/store/tikv/latch/scheduler.go | 99 - .../pingcap/tidb/store/tikv/lock_resolver.go | 397 - .../pingcap/tidb/store/tikv/oracle/oracle.go | 55 - .../tidb/store/tikv/oracle/oracles/local.go | 72 - .../tidb/store/tikv/oracle/oracles/metrics.go | 33 - .../tidb/store/tikv/oracle/oracles/pd.go | 139 - .../pingcap/tidb/store/tikv/pd_codec.go | 73 - .../pingcap/tidb/store/tikv/rawkv.go | 300 - .../pingcap/tidb/store/tikv/region_cache.go | 611 - .../pingcap/tidb/store/tikv/region_request.go | 251 - .../pingcap/tidb/store/tikv/safepoint.go | 141 - .../pingcap/tidb/store/tikv/scan.go | 211 - .../pingcap/tidb/store/tikv/snapshot.go | 346 - .../pingcap/tidb/store/tikv/split_region.go | 67 - .../pingcap/tidb/store/tikv/test_util.go | 45 - .../tidb/store/tikv/tikvrpc/tikvrpc.go | 497 - .../github.com/pingcap/tidb/store/tikv/txn.go | 278 - .../github.com/pingcap/tidb/structure/hash.go | 302 - .../github.com/pingcap/tidb/structure/list.go | 243 - .../pingcap/tidb/structure/string.go | 79 - .../pingcap/tidb/structure/structure.go | 53 - .../github.com/pingcap/tidb/structure/type.go | 116 - .../pingcap/tidb/tablecodec/tablecodec.go | 614 - .../github.com/pingcap/tidb/terror/terror.go | 344 - .../pingcap/tidb/types/binary_literal.go | 227 - .../github.com/pingcap/tidb/types/compare.go | 58 - .../github.com/pingcap/tidb/types/convert.go | 463 - vendor/github.com/pingcap/tidb/types/datum.go | 1840 - .../pingcap/tidb/types/datum_eval.go | 568 - vendor/github.com/pingcap/tidb/types/enum.go | 62 - .../github.com/pingcap/tidb/types/errors.go | 109 - vendor/github.com/pingcap/tidb/types/etc.go | 186 - .../pingcap/tidb/types/eval_type.go | 42 - .../pingcap/tidb/types/field_type.go | 1421 - vendor/github.com/pingcap/tidb/types/fsp.go | 97 - .../github.com/pingcap/tidb/types/helper.go | 194 - .../pingcap/tidb/types/json/binary.go | 619 - .../tidb/types/json/binary_functions.go | 691 - .../pingcap/tidb/types/json/constants.go | 223 - .../pingcap/tidb/types/json/path_expr.go | 209 - .../pingcap/tidb/types/mydecimal.go | 2184 - .../github.com/pingcap/tidb/types/mytime.go | 460 - .../github.com/pingcap/tidb/types/overflow.go | 189 - vendor/github.com/pingcap/tidb/types/row.go | 152 - vendor/github.com/pingcap/tidb/types/set.go | 111 - vendor/github.com/pingcap/tidb/types/time.go | 2506 - .../github.com/pingcap/tidb/util/auth/auth.go | 95 - .../pingcap/tidb/util/charset/charset.go | 417 - .../tidb/util/charset/encoding_table.go | 259 - .../pingcap/tidb/util/chunk/chunk.go | 649 - .../pingcap/tidb/util/chunk/compare.go | 231 - .../pingcap/tidb/util/chunk/iterator.go | 279 - .../pingcap/tidb/util/chunk/list.go | 154 - .../pingcap/tidb/util/chunk/mutrow.go | 348 - .../pingcap/tidb/util/codec/bytes.go | 208 - .../pingcap/tidb/util/codec/codec.go | 664 - .../pingcap/tidb/util/codec/decimal.go | 47 - .../pingcap/tidb/util/codec/float.go | 65 - .../pingcap/tidb/util/codec/number.go | 284 - .../pingcap/tidb/util/format/format.go | 195 - .../pingcap/tidb/util/goroutine_pool/fake.go | 30 - .../pingcap/tidb/util/goroutine_pool/gp.go | 124 - .../github.com/pingcap/tidb/util/hack/hack.go | 43 - .../pingcap/tidb/util/kvcache/sharded_lru.go | 58 - .../pingcap/tidb/util/kvcache/simple_lru.go | 91 - .../pingcap/tidb/util/logutil/log.go | 285 - .../pingcap/tidb/util/memory/action.go | 75 - .../pingcap/tidb/util/memory/tracker.go | 200 - vendor/github.com/pingcap/tidb/util/misc.go | 55 - .../pingcap/tidb/util/prefix_helper.go | 97 - .../pingcap/tidb/util/processinfo.go | 38 - vendor/github.com/pingcap/tidb/util/random.go | 31 - vendor/github.com/pingcap/tipb/LICENSE | 201 - .../pingcap/tipb/go-binlog/binlog.pb.go | 1344 - .../pingcap/tipb/go-binlog/cistern.pb.go | 1134 - .../pingcap/tipb/go-binlog/pump.pb.go | 1281 - .../pingcap/tipb/go-tipb/analyze.pb.go | 2815 - .../pingcap/tipb/go-tipb/checksum.pb.go | 629 - .../pingcap/tipb/go-tipb/executor.pb.go | 2122 - .../pingcap/tipb/go-tipb/expression.pb.go | 2813 - .../pingcap/tipb/go-tipb/schema.pb.go | 1237 - .../pingcap/tipb/go-tipb/select.pb.go | 2237 - .../proto/Mysqlx/Notice/mysqlx_notice.proto | 149 - .../pingcap/tipb/sharedbytes/sharedbytes.go | 42 - vendor/github.com/pkg/errors/LICENSE | 23 - vendor/github.com/pkg/errors/errors.go | 269 - vendor/github.com/pkg/errors/stack.go | 178 - .../prometheus/client_golang/AUTHORS.md | 18 - .../prometheus/client_golang/LICENSE | 201 - .../prometheus/client_golang/NOTICE | 23 - .../client_golang/prometheus/collector.go | 75 - .../client_golang/prometheus/counter.go | 172 - .../client_golang/prometheus/desc.go | 205 - .../client_golang/prometheus/doc.go | 181 - .../prometheus/expvar_collector.go | 119 - .../client_golang/prometheus/fnv.go | 29 - .../client_golang/prometheus/gauge.go | 140 - .../client_golang/prometheus/go_collector.go | 263 - .../client_golang/prometheus/histogram.go | 444 - .../client_golang/prometheus/http.go | 490 - .../client_golang/prometheus/metric.go | 166 - .../prometheus/process_collector.go | 142 - .../client_golang/prometheus/registry.go | 806 - .../client_golang/prometheus/summary.go | 534 - .../client_golang/prometheus/untyped.go | 138 - .../client_golang/prometheus/value.go | 234 - .../client_golang/prometheus/vec.go | 404 - .../prometheus/client_model/LICENSE | 201 - .../github.com/prometheus/client_model/NOTICE | 5 - .../prometheus/client_model/go/metrics.pb.go | 364 - .../prometheus/client_model/ruby/LICENSE | 201 - vendor/github.com/prometheus/common/LICENSE | 201 - vendor/github.com/prometheus/common/NOTICE | 5 - .../prometheus/common/expfmt/decode.go | 429 - .../prometheus/common/expfmt/encode.go | 88 - .../prometheus/common/expfmt/expfmt.go | 38 - .../prometheus/common/expfmt/fuzz.go | 36 - .../prometheus/common/expfmt/text_create.go | 303 - .../prometheus/common/expfmt/text_parse.go | 757 - .../bitbucket.org/ww/goautoneg/autoneg.go | 162 - .../prometheus/common/model/alert.go | 136 - .../prometheus/common/model/fingerprinting.go | 105 - .../github.com/prometheus/common/model/fnv.go | 42 - .../prometheus/common/model/labels.go | 210 - .../prometheus/common/model/labelset.go | 169 - .../prometheus/common/model/metric.go | 103 - .../prometheus/common/model/model.go | 16 - .../prometheus/common/model/signature.go | 144 - .../prometheus/common/model/silence.go | 106 - .../prometheus/common/model/time.go | 264 - .../prometheus/common/model/value.go | 416 - vendor/github.com/prometheus/procfs/LICENSE | 201 - vendor/github.com/prometheus/procfs/NOTICE | 7 - .../github.com/prometheus/procfs/buddyinfo.go | 95 - vendor/github.com/prometheus/procfs/doc.go | 45 - vendor/github.com/prometheus/procfs/fs.go | 82 - .../prometheus/procfs/internal/util/parse.go | 46 - vendor/github.com/prometheus/procfs/ipvs.go | 259 - vendor/github.com/prometheus/procfs/mdstat.go | 151 - .../prometheus/procfs/mountstats.go | 569 - .../github.com/prometheus/procfs/net_dev.go | 216 - .../github.com/prometheus/procfs/nfs/nfs.go | 263 - .../github.com/prometheus/procfs/nfs/parse.go | 317 - .../prometheus/procfs/nfs/parse_nfs.go | 67 - .../prometheus/procfs/nfs/parse_nfsd.go | 89 - vendor/github.com/prometheus/procfs/proc.go | 238 - .../github.com/prometheus/procfs/proc_io.go | 65 - .../prometheus/procfs/proc_limits.go | 150 - .../github.com/prometheus/procfs/proc_ns.go | 68 - .../github.com/prometheus/procfs/proc_stat.go | 188 - vendor/github.com/prometheus/procfs/stat.go | 232 - vendor/github.com/prometheus/procfs/xfrm.go | 187 - .../github.com/prometheus/procfs/xfs/parse.go | 330 - .../github.com/prometheus/procfs/xfs/xfs.go | 163 - vendor/github.com/sirupsen/logrus/LICENSE | 21 - vendor/github.com/sirupsen/logrus/alt_exit.go | 64 - vendor/github.com/sirupsen/logrus/doc.go | 26 - vendor/github.com/sirupsen/logrus/entry.go | 275 - vendor/github.com/sirupsen/logrus/exported.go | 193 - .../github.com/sirupsen/logrus/formatter.go | 45 - vendor/github.com/sirupsen/logrus/hooks.go | 34 - .../sirupsen/logrus/json_formatter.go | 74 - vendor/github.com/sirupsen/logrus/logger.go | 317 - vendor/github.com/sirupsen/logrus/logrus.go | 143 - .../sirupsen/logrus/terminal_appengine.go | 10 - .../sirupsen/logrus/terminal_bsd.go | 10 - .../sirupsen/logrus/terminal_linux.go | 14 - .../sirupsen/logrus/terminal_notwindows.go | 28 - .../sirupsen/logrus/terminal_solaris.go | 21 - .../sirupsen/logrus/terminal_windows.go | 33 - .../sirupsen/logrus/text_formatter.go | 189 - vendor/github.com/sirupsen/logrus/writer.go | 62 - vendor/github.com/spaolacci/murmur3/LICENSE | 24 - vendor/github.com/spaolacci/murmur3/murmur.go | 64 - .../github.com/spaolacci/murmur3/murmur128.go | 203 - .../github.com/spaolacci/murmur3/murmur32.go | 167 - .../github.com/spaolacci/murmur3/murmur64.go | 57 - vendor/github.com/twinj/uuid/LICENSE | 20 - vendor/github.com/twinj/uuid/format.go | 161 - vendor/github.com/twinj/uuid/generator.go | 527 - vendor/github.com/twinj/uuid/saver.go | 65 - vendor/github.com/twinj/uuid/timestamp.go | 120 - vendor/github.com/twinj/uuid/types.go | 175 - vendor/github.com/twinj/uuid/uuid.go | 267 - vendor/github.com/twinj/uuid/version.go | 71 - .../github.com/uber/jaeger-client-go/LICENSE | 201 - .../uber/jaeger-client-go/baggage_setter.go | 77 - .../uber/jaeger-client-go/config/config.go | 372 - .../jaeger-client-go/config/config_env.go | 205 - .../uber/jaeger-client-go/config/options.go | 140 - .../uber/jaeger-client-go/constants.go | 85 - .../uber/jaeger-client-go/context.go | 258 - .../uber/jaeger-client-go/contrib_observer.go | 56 - .../github.com/uber/jaeger-client-go/doc.go | 24 - .../uber/jaeger-client-go/header.go | 64 - .../internal/baggage/remote/options.go | 101 - .../baggage/remote/restriction_manager.go | 157 - .../internal/baggage/restriction_manager.go | 71 - .../jaeger-client-go/internal/spanlog/json.go | 81 - .../internal/throttler/remote/options.go | 99 - .../internal/throttler/remote/throttler.go | 216 - .../internal/throttler/throttler.go | 32 - .../uber/jaeger-client-go/interop.go | 55 - .../uber/jaeger-client-go/jaeger_tag.go | 84 - .../jaeger-client-go/jaeger_thrift_span.go | 179 - .../uber/jaeger-client-go/log/logger.go | 90 - .../uber/jaeger-client-go/logger.go | 53 - .../uber/jaeger-client-go/metrics.go | 107 - .../uber/jaeger-client-go/observer.go | 88 - .../uber/jaeger-client-go/process.go | 29 - .../uber/jaeger-client-go/propagation.go | 300 - .../uber/jaeger-client-go/reference.go | 23 - .../uber/jaeger-client-go/reporter.go | 289 - .../uber/jaeger-client-go/reporter_options.go | 69 - .../uber/jaeger-client-go/rpcmetrics/doc.go | 16 - .../jaeger-client-go/rpcmetrics/endpoints.go | 63 - .../jaeger-client-go/rpcmetrics/metrics.go | 124 - .../jaeger-client-go/rpcmetrics/normalizer.go | 101 - .../jaeger-client-go/rpcmetrics/observer.go | 171 - .../uber/jaeger-client-go/sampler.go | 556 - .../uber/jaeger-client-go/sampler_options.go | 81 - .../github.com/uber/jaeger-client-go/span.go | 249 - .../thrift-gen/agent/agent.go | 411 - .../thrift-gen/agent/constants.go | 23 - .../thrift-gen/agent/ttypes.go | 21 - .../baggage/baggagerestrictionmanager.go | 435 - .../thrift-gen/baggage/constants.go | 18 - .../thrift-gen/baggage/ttypes.go | 154 - .../thrift-gen/jaeger/agent.go | 242 - .../thrift-gen/jaeger/constants.go | 18 - .../thrift-gen/jaeger/ttypes.go | 1838 - .../thrift-gen/sampling/constants.go | 18 - .../thrift-gen/sampling/samplingmanager.go | 410 - .../thrift-gen/sampling/ttypes.go | 873 - .../thrift-gen/zipkincore/constants.go | 32 - .../thrift-gen/zipkincore/ttypes.go | 1247 - .../thrift-gen/zipkincore/zipkincollector.go | 446 - .../thrift/application_exception.go | 142 - .../thrift/binary_protocol.go | 514 - .../thrift/compact_protocol.go | 815 - .../uber/jaeger-client-go/thrift/exception.go | 44 - .../jaeger-client-go/thrift/memory_buffer.go | 79 - .../jaeger-client-go/thrift/messagetype.go | 31 - .../uber/jaeger-client-go/thrift/numeric.go | 164 - .../uber/jaeger-client-go/thrift/processor.go | 30 - .../uber/jaeger-client-go/thrift/protocol.go | 175 - .../thrift/protocol_exception.go | 78 - .../thrift/protocol_factory.go | 25 - .../jaeger-client-go/thrift/rich_transport.go | 69 - .../jaeger-client-go/thrift/serializer.go | 75 - .../thrift/simple_json_protocol.go | 1337 - .../uber/jaeger-client-go/thrift/transport.go | 68 - .../thrift/transport_exception.go | 90 - .../thrift/transport_factory.go | 39 - .../uber/jaeger-client-go/thrift/type.go | 69 - .../uber/jaeger-client-go/tracer.go | 421 - .../uber/jaeger-client-go/tracer_options.go | 153 - .../uber/jaeger-client-go/transport.go | 38 - .../uber/jaeger-client-go/transport_udp.go | 131 - .../uber/jaeger-client-go/utils/http_json.go | 54 - .../uber/jaeger-client-go/utils/localip.go | 84 - .../uber/jaeger-client-go/utils/rand.go | 46 - .../jaeger-client-go/utils/rate_limiter.go | 77 - .../uber/jaeger-client-go/utils/udp_client.go | 98 - .../uber/jaeger-client-go/utils/utils.go | 87 - .../uber/jaeger-client-go/zipkin.go | 76 - .../jaeger-client-go/zipkin_thrift_span.go | 325 - vendor/github.com/uber/jaeger-lib/LICENSE | 201 - .../uber/jaeger-lib/metrics/counter.go | 28 - .../uber/jaeger-lib/metrics/factory.go | 35 - .../uber/jaeger-lib/metrics/gauge.go | 28 - .../uber/jaeger-lib/metrics/local.go | 337 - .../uber/jaeger-lib/metrics/metrics.go | 85 - .../uber/jaeger-lib/metrics/stopwatch.go | 43 - .../uber/jaeger-lib/metrics/timer.go | 33 - vendor/golang.org/x/net/AUTHORS | 3 - vendor/golang.org/x/net/CONTRIBUTORS | 3 - vendor/golang.org/x/net/LICENSE | 27 - vendor/golang.org/x/net/PATENTS | 22 - vendor/golang.org/x/net/context/context.go | 56 - vendor/golang.org/x/net/context/go17.go | 72 - vendor/golang.org/x/net/context/go19.go | 20 - vendor/golang.org/x/net/context/pre_go17.go | 300 - vendor/golang.org/x/net/context/pre_go19.go | 109 - vendor/golang.org/x/net/http/httpguts/guts.go | 50 - .../golang.org/x/net/http/httpguts/httplex.go | 346 - vendor/golang.org/x/net/http2/ciphers.go | 641 - .../x/net/http2/client_conn_pool.go | 256 - .../x/net/http2/configure_transport.go | 80 - vendor/golang.org/x/net/http2/databuffer.go | 146 - vendor/golang.org/x/net/http2/errors.go | 133 - vendor/golang.org/x/net/http2/flow.go | 50 - vendor/golang.org/x/net/http2/frame.go | 1579 - vendor/golang.org/x/net/http2/go16.go | 16 - vendor/golang.org/x/net/http2/go17.go | 106 - vendor/golang.org/x/net/http2/go17_not18.go | 36 - vendor/golang.org/x/net/http2/go18.go | 56 - vendor/golang.org/x/net/http2/go19.go | 16 - vendor/golang.org/x/net/http2/gotrack.go | 170 - vendor/golang.org/x/net/http2/headermap.go | 78 - vendor/golang.org/x/net/http2/hpack/encode.go | 240 - vendor/golang.org/x/net/http2/hpack/hpack.go | 496 - .../golang.org/x/net/http2/hpack/huffman.go | 212 - vendor/golang.org/x/net/http2/hpack/tables.go | 479 - vendor/golang.org/x/net/http2/http2.go | 391 - vendor/golang.org/x/net/http2/not_go16.go | 21 - vendor/golang.org/x/net/http2/not_go17.go | 87 - vendor/golang.org/x/net/http2/not_go18.go | 29 - vendor/golang.org/x/net/http2/not_go19.go | 16 - vendor/golang.org/x/net/http2/pipe.go | 163 - vendor/golang.org/x/net/http2/server.go | 2878 - vendor/golang.org/x/net/http2/transport.go | 2310 - vendor/golang.org/x/net/http2/write.go | 365 - vendor/golang.org/x/net/http2/writesched.go | 242 - .../x/net/http2/writesched_priority.go | 452 - .../x/net/http2/writesched_random.go | 72 - vendor/golang.org/x/net/idna/idna.go | 732 - vendor/golang.org/x/net/idna/punycode.go | 203 - vendor/golang.org/x/net/idna/tables.go | 4557 - vendor/golang.org/x/net/idna/trie.go | 72 - vendor/golang.org/x/net/idna/trieval.go | 119 - .../x/net/internal/timeseries/timeseries.go | 525 - vendor/golang.org/x/net/trace/events.go | 532 - vendor/golang.org/x/net/trace/histogram.go | 365 - vendor/golang.org/x/net/trace/trace.go | 1103 - vendor/golang.org/x/net/trace/trace_go16.go | 21 - vendor/golang.org/x/net/trace/trace_go17.go | 21 - vendor/golang.org/x/sys/AUTHORS | 3 - vendor/golang.org/x/sys/CONTRIBUTORS | 3 - vendor/golang.org/x/sys/LICENSE | 27 - vendor/golang.org/x/sys/PATENTS | 22 - .../golang.org/x/sys/unix/affinity_linux.go | 124 - vendor/golang.org/x/sys/unix/asm_darwin_386.s | 29 - .../golang.org/x/sys/unix/asm_darwin_amd64.s | 29 - vendor/golang.org/x/sys/unix/asm_darwin_arm.s | 30 - .../golang.org/x/sys/unix/asm_darwin_arm64.s | 30 - .../x/sys/unix/asm_dragonfly_amd64.s | 29 - .../golang.org/x/sys/unix/asm_freebsd_386.s | 29 - .../golang.org/x/sys/unix/asm_freebsd_amd64.s | 29 - .../golang.org/x/sys/unix/asm_freebsd_arm.s | 29 - vendor/golang.org/x/sys/unix/asm_linux_386.s | 65 - .../golang.org/x/sys/unix/asm_linux_amd64.s | 57 - vendor/golang.org/x/sys/unix/asm_linux_arm.s | 56 - .../golang.org/x/sys/unix/asm_linux_arm64.s | 52 - .../golang.org/x/sys/unix/asm_linux_mips64x.s | 56 - .../golang.org/x/sys/unix/asm_linux_mipsx.s | 54 - .../golang.org/x/sys/unix/asm_linux_ppc64x.s | 56 - .../golang.org/x/sys/unix/asm_linux_s390x.s | 56 - vendor/golang.org/x/sys/unix/asm_netbsd_386.s | 29 - .../golang.org/x/sys/unix/asm_netbsd_amd64.s | 29 - vendor/golang.org/x/sys/unix/asm_netbsd_arm.s | 29 - .../golang.org/x/sys/unix/asm_openbsd_386.s | 29 - .../golang.org/x/sys/unix/asm_openbsd_amd64.s | 29 - .../golang.org/x/sys/unix/asm_openbsd_arm.s | 29 - .../golang.org/x/sys/unix/asm_solaris_amd64.s | 17 - .../golang.org/x/sys/unix/bluetooth_linux.go | 35 - vendor/golang.org/x/sys/unix/cap_freebsd.go | 195 - vendor/golang.org/x/sys/unix/constants.go | 13 - vendor/golang.org/x/sys/unix/dev_darwin.go | 24 - vendor/golang.org/x/sys/unix/dev_dragonfly.go | 30 - vendor/golang.org/x/sys/unix/dev_freebsd.go | 30 - vendor/golang.org/x/sys/unix/dev_linux.go | 42 - vendor/golang.org/x/sys/unix/dev_netbsd.go | 29 - vendor/golang.org/x/sys/unix/dev_openbsd.go | 29 - vendor/golang.org/x/sys/unix/dirent.go | 17 - vendor/golang.org/x/sys/unix/endian_big.go | 9 - vendor/golang.org/x/sys/unix/endian_little.go | 9 - vendor/golang.org/x/sys/unix/env_unix.go | 31 - .../x/sys/unix/errors_freebsd_386.go | 227 - .../x/sys/unix/errors_freebsd_amd64.go | 227 - .../x/sys/unix/errors_freebsd_arm.go | 226 - vendor/golang.org/x/sys/unix/fcntl.go | 32 - .../x/sys/unix/fcntl_linux_32bit.go | 13 - vendor/golang.org/x/sys/unix/gccgo.go | 61 - vendor/golang.org/x/sys/unix/gccgo_c.c | 38 - .../x/sys/unix/gccgo_linux_amd64.go | 20 - vendor/golang.org/x/sys/unix/mkpost.go | 98 - .../golang.org/x/sys/unix/openbsd_pledge.go | 38 - vendor/golang.org/x/sys/unix/pagesize_unix.go | 15 - vendor/golang.org/x/sys/unix/race.go | 30 - vendor/golang.org/x/sys/unix/race0.go | 25 - .../golang.org/x/sys/unix/sockcmsg_linux.go | 36 - vendor/golang.org/x/sys/unix/sockcmsg_unix.go | 104 - vendor/golang.org/x/sys/unix/str.go | 26 - vendor/golang.org/x/sys/unix/syscall.go | 54 - vendor/golang.org/x/sys/unix/syscall_bsd.go | 624 - .../golang.org/x/sys/unix/syscall_darwin.go | 680 - .../x/sys/unix/syscall_darwin_386.go | 68 - .../x/sys/unix/syscall_darwin_amd64.go | 68 - .../x/sys/unix/syscall_darwin_arm.go | 66 - .../x/sys/unix/syscall_darwin_arm64.go | 68 - .../x/sys/unix/syscall_dragonfly.go | 523 - .../x/sys/unix/syscall_dragonfly_amd64.go | 52 - .../golang.org/x/sys/unix/syscall_freebsd.go | 756 - .../x/sys/unix/syscall_freebsd_386.go | 52 - .../x/sys/unix/syscall_freebsd_amd64.go | 52 - .../x/sys/unix/syscall_freebsd_arm.go | 52 - vendor/golang.org/x/sys/unix/syscall_linux.go | 1474 - .../x/sys/unix/syscall_linux_386.go | 385 - .../x/sys/unix/syscall_linux_amd64.go | 162 - .../x/sys/unix/syscall_linux_amd64_gc.go | 13 - .../x/sys/unix/syscall_linux_arm.go | 259 - .../x/sys/unix/syscall_linux_arm64.go | 212 - .../golang.org/x/sys/unix/syscall_linux_gc.go | 14 - .../x/sys/unix/syscall_linux_gc_386.go | 16 - .../x/sys/unix/syscall_linux_gccgo_386.go | 30 - .../x/sys/unix/syscall_linux_gccgo_arm.go | 20 - .../x/sys/unix/syscall_linux_mips64x.go | 214 - .../x/sys/unix/syscall_linux_mipsx.go | 234 - .../x/sys/unix/syscall_linux_ppc64x.go | 131 - .../x/sys/unix/syscall_linux_s390x.go | 324 - .../x/sys/unix/syscall_linux_sparc64.go | 146 - .../golang.org/x/sys/unix/syscall_netbsd.go | 568 - .../x/sys/unix/syscall_netbsd_386.go | 33 - .../x/sys/unix/syscall_netbsd_amd64.go | 33 - .../x/sys/unix/syscall_netbsd_arm.go | 33 - .../golang.org/x/sys/unix/syscall_openbsd.go | 368 - .../x/sys/unix/syscall_openbsd_386.go | 33 - .../x/sys/unix/syscall_openbsd_amd64.go | 37 - .../x/sys/unix/syscall_openbsd_arm.go | 33 - .../golang.org/x/sys/unix/syscall_solaris.go | 730 - .../x/sys/unix/syscall_solaris_amd64.go | 23 - vendor/golang.org/x/sys/unix/syscall_unix.go | 394 - .../golang.org/x/sys/unix/syscall_unix_gc.go | 15 - vendor/golang.org/x/sys/unix/timestruct.go | 82 - vendor/golang.org/x/sys/unix/types_darwin.go | 277 - .../golang.org/x/sys/unix/types_dragonfly.go | 280 - vendor/golang.org/x/sys/unix/types_freebsd.go | 402 - vendor/golang.org/x/sys/unix/types_netbsd.go | 281 - vendor/golang.org/x/sys/unix/types_openbsd.go | 282 - vendor/golang.org/x/sys/unix/types_solaris.go | 283 - .../x/sys/unix/zerrors_darwin_386.go | 1783 - .../x/sys/unix/zerrors_darwin_amd64.go | 1783 - .../x/sys/unix/zerrors_darwin_arm.go | 1783 - .../x/sys/unix/zerrors_darwin_arm64.go | 1783 - .../x/sys/unix/zerrors_dragonfly_amd64.go | 1586 - .../x/sys/unix/zerrors_freebsd_386.go | 1764 - .../x/sys/unix/zerrors_freebsd_amd64.go | 1765 - .../x/sys/unix/zerrors_freebsd_arm.go | 1773 - .../x/sys/unix/zerrors_linux_386.go | 2602 - .../x/sys/unix/zerrors_linux_amd64.go | 2602 - .../x/sys/unix/zerrors_linux_arm.go | 2608 - .../x/sys/unix/zerrors_linux_arm64.go | 2593 - .../x/sys/unix/zerrors_linux_mips.go | 2610 - .../x/sys/unix/zerrors_linux_mips64.go | 2610 - .../x/sys/unix/zerrors_linux_mips64le.go | 2610 - .../x/sys/unix/zerrors_linux_mipsle.go | 2610 - .../x/sys/unix/zerrors_linux_ppc64.go | 2663 - .../x/sys/unix/zerrors_linux_ppc64le.go | 2663 - .../x/sys/unix/zerrors_linux_s390x.go | 2662 - .../x/sys/unix/zerrors_linux_sparc64.go | 2142 - .../x/sys/unix/zerrors_netbsd_386.go | 1728 - .../x/sys/unix/zerrors_netbsd_amd64.go | 1718 - .../x/sys/unix/zerrors_netbsd_arm.go | 1707 - .../x/sys/unix/zerrors_openbsd_386.go | 1600 - .../x/sys/unix/zerrors_openbsd_amd64.go | 1706 - .../x/sys/unix/zerrors_openbsd_arm.go | 1602 - .../x/sys/unix/zerrors_solaris_amd64.go | 1497 - .../golang.org/x/sys/unix/zptrace386_linux.go | 80 - .../golang.org/x/sys/unix/zptracearm_linux.go | 41 - .../x/sys/unix/zptracemips_linux.go | 50 - .../x/sys/unix/zptracemipsle_linux.go | 50 - .../x/sys/unix/zsyscall_darwin_386.go | 1712 - .../x/sys/unix/zsyscall_darwin_amd64.go | 1712 - .../x/sys/unix/zsyscall_darwin_arm.go | 1712 - .../x/sys/unix/zsyscall_darwin_arm64.go | 1712 - .../x/sys/unix/zsyscall_dragonfly_amd64.go | 1508 - .../x/sys/unix/zsyscall_freebsd_386.go | 1937 - .../x/sys/unix/zsyscall_freebsd_amd64.go | 1937 - .../x/sys/unix/zsyscall_freebsd_arm.go | 1937 - .../x/sys/unix/zsyscall_linux_386.go | 2010 - .../x/sys/unix/zsyscall_linux_amd64.go | 2177 - .../x/sys/unix/zsyscall_linux_arm.go | 2112 - .../x/sys/unix/zsyscall_linux_arm64.go | 2019 - .../x/sys/unix/zsyscall_linux_mips.go | 2178 - .../x/sys/unix/zsyscall_linux_mips64.go | 2161 - .../x/sys/unix/zsyscall_linux_mips64le.go | 2161 - .../x/sys/unix/zsyscall_linux_mipsle.go | 2178 - .../x/sys/unix/zsyscall_linux_ppc64.go | 2224 - .../x/sys/unix/zsyscall_linux_ppc64le.go | 2224 - .../x/sys/unix/zsyscall_linux_s390x.go | 1994 - .../x/sys/unix/zsyscall_linux_sparc64.go | 2172 - .../x/sys/unix/zsyscall_netbsd_386.go | 1439 - .../x/sys/unix/zsyscall_netbsd_amd64.go | 1439 - .../x/sys/unix/zsyscall_netbsd_arm.go | 1439 - .../x/sys/unix/zsyscall_openbsd_386.go | 1508 - .../x/sys/unix/zsyscall_openbsd_amd64.go | 1508 - .../x/sys/unix/zsyscall_openbsd_arm.go | 1508 - .../x/sys/unix/zsyscall_solaris_amd64.go | 1697 - .../x/sys/unix/zsysctl_openbsd_386.go | 270 - .../x/sys/unix/zsysctl_openbsd_amd64.go | 257 - .../x/sys/unix/zsysctl_openbsd_arm.go | 270 - .../x/sys/unix/zsysnum_darwin_386.go | 436 - .../x/sys/unix/zsysnum_darwin_amd64.go | 436 - .../x/sys/unix/zsysnum_darwin_arm.go | 436 - .../x/sys/unix/zsysnum_darwin_arm64.go | 436 - .../x/sys/unix/zsysnum_dragonfly_amd64.go | 315 - .../x/sys/unix/zsysnum_freebsd_386.go | 353 - .../x/sys/unix/zsysnum_freebsd_amd64.go | 353 - .../x/sys/unix/zsysnum_freebsd_arm.go | 353 - .../x/sys/unix/zsysnum_linux_386.go | 390 - .../x/sys/unix/zsysnum_linux_amd64.go | 342 - .../x/sys/unix/zsysnum_linux_arm.go | 362 - .../x/sys/unix/zsysnum_linux_arm64.go | 286 - .../x/sys/unix/zsysnum_linux_mips.go | 375 - .../x/sys/unix/zsysnum_linux_mips64.go | 335 - .../x/sys/unix/zsysnum_linux_mips64le.go | 335 - .../x/sys/unix/zsysnum_linux_mipsle.go | 375 - .../x/sys/unix/zsysnum_linux_ppc64.go | 373 - .../x/sys/unix/zsysnum_linux_ppc64le.go | 373 - .../x/sys/unix/zsysnum_linux_s390x.go | 335 - .../x/sys/unix/zsysnum_linux_sparc64.go | 348 - .../x/sys/unix/zsysnum_netbsd_386.go | 274 - .../x/sys/unix/zsysnum_netbsd_amd64.go | 274 - .../x/sys/unix/zsysnum_netbsd_arm.go | 274 - .../x/sys/unix/zsysnum_openbsd_386.go | 207 - .../x/sys/unix/zsysnum_openbsd_amd64.go | 217 - .../x/sys/unix/zsysnum_openbsd_arm.go | 213 - .../x/sys/unix/ztypes_darwin_386.go | 489 - .../x/sys/unix/ztypes_darwin_amd64.go | 499 - .../x/sys/unix/ztypes_darwin_arm.go | 490 - .../x/sys/unix/ztypes_darwin_arm64.go | 499 - .../x/sys/unix/ztypes_dragonfly_amd64.go | 486 - .../x/sys/unix/ztypes_freebsd_386.go | 553 - .../x/sys/unix/ztypes_freebsd_amd64.go | 556 - .../x/sys/unix/ztypes_freebsd_arm.go | 556 - .../golang.org/x/sys/unix/ztypes_linux_386.go | 1846 - .../x/sys/unix/ztypes_linux_amd64.go | 1866 - .../golang.org/x/sys/unix/ztypes_linux_arm.go | 1835 - .../x/sys/unix/ztypes_linux_arm64.go | 1845 - .../x/sys/unix/ztypes_linux_mips.go | 1840 - .../x/sys/unix/ztypes_linux_mips64.go | 1847 - .../x/sys/unix/ztypes_linux_mips64le.go | 1847 - .../x/sys/unix/ztypes_linux_mipsle.go | 1840 - .../x/sys/unix/ztypes_linux_ppc64.go | 1855 - .../x/sys/unix/ztypes_linux_ppc64le.go | 1855 - .../x/sys/unix/ztypes_linux_s390x.go | 1872 - .../x/sys/unix/ztypes_linux_sparc64.go | 690 - .../x/sys/unix/ztypes_netbsd_386.go | 448 - .../x/sys/unix/ztypes_netbsd_amd64.go | 455 - .../x/sys/unix/ztypes_netbsd_arm.go | 453 - .../x/sys/unix/ztypes_openbsd_386.go | 484 - .../x/sys/unix/ztypes_openbsd_amd64.go | 484 - .../x/sys/unix/ztypes_openbsd_arm.go | 477 - .../x/sys/unix/ztypes_solaris_amd64.go | 459 - vendor/golang.org/x/text/AUTHORS | 3 - vendor/golang.org/x/text/CONTRIBUTORS | 3 - vendor/golang.org/x/text/LICENSE | 27 - vendor/golang.org/x/text/PATENTS | 22 - .../x/text/collate/build/builder.go | 702 - .../x/text/collate/build/colelem.go | 294 - .../x/text/collate/build/contract.go | 309 - .../golang.org/x/text/collate/build/order.go | 393 - .../golang.org/x/text/collate/build/table.go | 81 - .../golang.org/x/text/collate/build/trie.go | 290 - vendor/golang.org/x/text/collate/collate.go | 403 - vendor/golang.org/x/text/collate/index.go | 32 - .../golang.org/x/text/collate/maketables.go | 553 - vendor/golang.org/x/text/collate/option.go | 239 - vendor/golang.org/x/text/collate/sort.go | 81 - vendor/golang.org/x/text/collate/tables.go | 73789 ---------------- .../x/text/encoding/charmap/charmap.go | 249 - .../x/text/encoding/charmap/maketables.go | 556 - .../x/text/encoding/charmap/tables.go | 7410 -- vendor/golang.org/x/text/encoding/encoding.go | 335 - .../text/encoding/internal/identifier/gen.go | 137 - .../internal/identifier/identifier.go | 81 - .../text/encoding/internal/identifier/mib.go | 1621 - .../x/text/encoding/internal/internal.go | 75 - .../x/text/encoding/japanese/all.go | 12 - .../x/text/encoding/japanese/eucjp.go | 225 - .../x/text/encoding/japanese/iso2022jp.go | 299 - .../x/text/encoding/japanese/maketables.go | 161 - .../x/text/encoding/japanese/shiftjis.go | 189 - .../x/text/encoding/japanese/tables.go | 26971 ------ .../x/text/encoding/korean/euckr.go | 177 - .../x/text/encoding/korean/maketables.go | 143 - .../x/text/encoding/korean/tables.go | 34152 ------- .../x/text/encoding/simplifiedchinese/all.go | 12 - .../x/text/encoding/simplifiedchinese/gbk.go | 269 - .../encoding/simplifiedchinese/hzgb2312.go | 245 - .../encoding/simplifiedchinese/maketables.go | 161 - .../text/encoding/simplifiedchinese/tables.go | 43999 --------- .../text/encoding/traditionalchinese/big5.go | 199 - .../encoding/traditionalchinese/maketables.go | 140 - .../encoding/traditionalchinese/tables.go | 37142 -------- .../x/text/encoding/unicode/override.go | 82 - .../x/text/encoding/unicode/unicode.go | 434 - .../x/text/internal/colltab/collelem.go | 371 - .../x/text/internal/colltab/colltab.go | 105 - .../x/text/internal/colltab/contract.go | 145 - .../x/text/internal/colltab/iter.go | 178 - .../x/text/internal/colltab/numeric.go | 236 - .../x/text/internal/colltab/table.go | 275 - .../x/text/internal/colltab/trie.go | 159 - .../x/text/internal/colltab/weighter.go | 31 - vendor/golang.org/x/text/internal/gen/code.go | 369 - vendor/golang.org/x/text/internal/gen/gen.go | 333 - vendor/golang.org/x/text/internal/tag/tag.go | 100 - .../x/text/internal/triegen/compact.go | 58 - .../x/text/internal/triegen/print.go | 251 - .../x/text/internal/triegen/triegen.go | 494 - vendor/golang.org/x/text/internal/ucd/ucd.go | 371 - .../internal/utf8internal/utf8internal.go | 87 - vendor/golang.org/x/text/language/common.go | 16 - vendor/golang.org/x/text/language/coverage.go | 197 - vendor/golang.org/x/text/language/doc.go | 102 - vendor/golang.org/x/text/language/gen.go | 1712 - .../golang.org/x/text/language/gen_common.go | 20 - .../golang.org/x/text/language/gen_index.go | 162 - vendor/golang.org/x/text/language/go1_1.go | 38 - vendor/golang.org/x/text/language/go1_2.go | 11 - vendor/golang.org/x/text/language/index.go | 783 - vendor/golang.org/x/text/language/language.go | 907 - vendor/golang.org/x/text/language/lookup.go | 396 - vendor/golang.org/x/text/language/match.go | 933 - vendor/golang.org/x/text/language/parse.go | 859 - vendor/golang.org/x/text/language/tables.go | 3686 - vendor/golang.org/x/text/language/tags.go | 143 - vendor/golang.org/x/text/runes/cond.go | 187 - vendor/golang.org/x/text/runes/runes.go | 355 - .../x/text/secure/bidirule/bidirule.go | 336 - .../x/text/secure/bidirule/bidirule10.0.0.go | 11 - .../x/text/secure/bidirule/bidirule9.0.0.go | 14 - .../golang.org/x/text/transform/transform.go | 705 - vendor/golang.org/x/text/unicode/bidi/bidi.go | 198 - .../golang.org/x/text/unicode/bidi/bracket.go | 335 - vendor/golang.org/x/text/unicode/bidi/core.go | 1058 - vendor/golang.org/x/text/unicode/bidi/gen.go | 133 - .../x/text/unicode/bidi/gen_ranges.go | 57 - .../x/text/unicode/bidi/gen_trieval.go | 64 - vendor/golang.org/x/text/unicode/bidi/prop.go | 206 - .../x/text/unicode/bidi/tables10.0.0.go | 1815 - .../x/text/unicode/bidi/tables9.0.0.go | 1781 - .../golang.org/x/text/unicode/bidi/trieval.go | 60 - vendor/golang.org/x/text/unicode/cldr/base.go | 105 - vendor/golang.org/x/text/unicode/cldr/cldr.go | 130 - .../golang.org/x/text/unicode/cldr/collate.go | 359 - .../golang.org/x/text/unicode/cldr/decode.go | 171 - .../golang.org/x/text/unicode/cldr/makexml.go | 400 - .../golang.org/x/text/unicode/cldr/resolve.go | 602 - .../golang.org/x/text/unicode/cldr/slice.go | 144 - vendor/golang.org/x/text/unicode/cldr/xml.go | 1494 - .../x/text/unicode/norm/composition.go | 508 - .../x/text/unicode/norm/forminfo.go | 259 - .../golang.org/x/text/unicode/norm/input.go | 109 - vendor/golang.org/x/text/unicode/norm/iter.go | 457 - .../x/text/unicode/norm/maketables.go | 976 - .../x/text/unicode/norm/normalize.go | 609 - .../x/text/unicode/norm/readwriter.go | 125 - .../x/text/unicode/norm/tables10.0.0.go | 7653 -- .../x/text/unicode/norm/tables9.0.0.go | 7633 -- .../x/text/unicode/norm/transform.go | 88 - vendor/golang.org/x/text/unicode/norm/trie.go | 54 - .../golang.org/x/text/unicode/norm/triegen.go | 117 - .../x/text/unicode/rangetable/gen.go | 115 - .../x/text/unicode/rangetable/merge.go | 260 - .../x/text/unicode/rangetable/rangetable.go | 70 - .../x/text/unicode/rangetable/tables10.0.0.go | 6378 -- .../x/text/unicode/rangetable/tables9.0.0.go | 5737 -- vendor/google.golang.org/genproto/LICENSE | 202 - .../api/annotations/annotations.pb.go | 54 - .../googleapis/api/annotations/http.pb.go | 666 - .../googleapis/rpc/status/status.pb.go | 156 - vendor/google.golang.org/grpc/AUTHORS | 1 - vendor/google.golang.org/grpc/LICENSE | 202 - vendor/google.golang.org/grpc/backoff.go | 38 - vendor/google.golang.org/grpc/balancer.go | 416 - .../grpc/balancer/balancer.go | 270 - .../grpc/balancer/base/balancer.go | 208 - .../grpc/balancer/base/base.go | 52 - .../grpc/balancer/roundrobin/roundrobin.go | 79 - .../grpc/balancer_conn_wrappers.go | 300 - .../grpc/balancer_v1_wrapper.go | 328 - vendor/google.golang.org/grpc/call.go | 93 - vendor/google.golang.org/grpc/clientconn.go | 1602 - vendor/google.golang.org/grpc/codec.go | 50 - .../grpc/codes/code_string.go | 62 - vendor/google.golang.org/grpc/codes/codes.go | 197 - .../grpc/connectivity/connectivity.go | 72 - .../grpc/credentials/credentials.go | 220 - .../grpc/credentials/credentials_util_go17.go | 60 - .../grpc/credentials/credentials_util_go18.go | 38 - .../credentials/credentials_util_pre_go17.go | 57 - vendor/google.golang.org/grpc/doc.go | 24 - .../grpc/encoding/encoding.go | 118 - .../grpc/encoding/proto/proto.go | 110 - vendor/google.golang.org/grpc/envconfig.go | 37 - vendor/google.golang.org/grpc/go16.go | 70 - vendor/google.golang.org/grpc/go17.go | 71 - .../google.golang.org/grpc/grpclog/grpclog.go | 126 - .../google.golang.org/grpc/grpclog/logger.go | 85 - .../grpc/grpclog/loggerv2.go | 195 - .../grpc/health/grpc_health_v1/health.pb.go | 227 - vendor/google.golang.org/grpc/interceptor.go | 77 - .../grpc/internal/backoff/backoff.go | 78 - .../grpc/internal/channelz/funcs.go | 573 - .../grpc/internal/channelz/types.go | 418 - .../grpc/internal/grpcrand/grpcrand.go | 56 - .../grpc/internal/internal.go | 36 - .../grpc/keepalive/keepalive.go | 65 - .../grpc/metadata/metadata.go | 210 - .../grpc/naming/dns_resolver.go | 290 - vendor/google.golang.org/grpc/naming/go17.go | 34 - vendor/google.golang.org/grpc/naming/go18.go | 28 - .../google.golang.org/grpc/naming/naming.go | 69 - vendor/google.golang.org/grpc/peer/peer.go | 51 - .../google.golang.org/grpc/picker_wrapper.go | 336 - vendor/google.golang.org/grpc/pickfirst.go | 108 - vendor/google.golang.org/grpc/proxy.go | 130 - .../grpc/resolver/dns/dns_resolver.go | 381 - .../grpc/resolver/dns/go17.go | 35 - .../grpc/resolver/dns/go18.go | 29 - .../grpc/resolver/passthrough/passthrough.go | 57 - .../grpc/resolver/resolver.go | 154 - .../grpc/resolver_conn_wrapper.go | 158 - vendor/google.golang.org/grpc/rpc_util.go | 741 - vendor/google.golang.org/grpc/server.go | 1486 - .../google.golang.org/grpc/service_config.go | 233 - .../google.golang.org/grpc/stats/handlers.go | 64 - vendor/google.golang.org/grpc/stats/stats.go | 296 - vendor/google.golang.org/grpc/status/go16.go | 42 - vendor/google.golang.org/grpc/status/go17.go | 44 - .../google.golang.org/grpc/status/status.go | 189 - .../grpc/stickiness_linkedmap.go | 97 - vendor/google.golang.org/grpc/stream.go | 779 - vendor/google.golang.org/grpc/tap/tap.go | 51 - vendor/google.golang.org/grpc/trace.go | 113 - .../grpc/transport/bdp_estimator.go | 140 - .../grpc/transport/controlbuf.go | 796 - .../grpc/transport/flowcontrol.go | 242 - .../google.golang.org/grpc/transport/go16.go | 51 - .../google.golang.org/grpc/transport/go17.go | 52 - .../grpc/transport/handler_server.go | 451 - .../grpc/transport/http2_client.go | 1298 - .../grpc/transport/http2_server.go | 1142 - .../grpc/transport/http_util.go | 592 - .../google.golang.org/grpc/transport/log.go | 50 - .../grpc/transport/transport.go | 708 - vendor/google.golang.org/grpc/version.go | 22 - .../gopkg.in/natefinch/lumberjack.v2/LICENSE | 21 - .../gopkg.in/natefinch/lumberjack.v2/chown.go | 11 - .../natefinch/lumberjack.v2/chown_linux.go | 19 - .../natefinch/lumberjack.v2/lumberjack.go | 541 - 1102 files changed, 227 insertions(+), 702603 deletions(-) delete mode 100644 Gopkg.lock delete mode 100644 Gopkg.toml mode change 120000 => 100644 Porcupine-LICENSE create mode 100644 go.mod create mode 100644 go.sum delete mode 100644 vendor/github.com/BurntSushi/toml/COPYING delete mode 100644 vendor/github.com/BurntSushi/toml/cmd/toml-test-decoder/COPYING delete mode 100644 vendor/github.com/BurntSushi/toml/cmd/toml-test-encoder/COPYING delete mode 100644 vendor/github.com/BurntSushi/toml/cmd/tomlv/COPYING delete mode 100644 vendor/github.com/BurntSushi/toml/decode.go delete mode 100644 vendor/github.com/BurntSushi/toml/decode_meta.go delete mode 100644 vendor/github.com/BurntSushi/toml/doc.go delete mode 100644 vendor/github.com/BurntSushi/toml/encode.go delete mode 100644 vendor/github.com/BurntSushi/toml/encoding_types.go delete mode 100644 vendor/github.com/BurntSushi/toml/encoding_types_1.1.go delete mode 100644 vendor/github.com/BurntSushi/toml/lex.go delete mode 100644 vendor/github.com/BurntSushi/toml/parse.go delete mode 100644 vendor/github.com/BurntSushi/toml/type_check.go delete mode 100644 vendor/github.com/BurntSushi/toml/type_fields.go delete mode 100644 vendor/github.com/anishathalye/porcupine/LICENSE.md delete mode 100644 vendor/github.com/anishathalye/porcupine/bitset.go delete mode 100644 vendor/github.com/anishathalye/porcupine/model.go delete mode 100644 vendor/github.com/anishathalye/porcupine/porcupine.go delete mode 100644 vendor/github.com/beorn7/perks/LICENSE delete mode 100644 vendor/github.com/beorn7/perks/quantile/stream.go delete mode 100644 vendor/github.com/codahale/hdrhistogram/LICENSE delete mode 100644 vendor/github.com/codahale/hdrhistogram/hdr.go delete mode 100644 vendor/github.com/codahale/hdrhistogram/window.go delete mode 120000 vendor/github.com/coreos/etcd/Documentation/README.md delete mode 100644 vendor/github.com/coreos/etcd/LICENSE delete mode 100644 vendor/github.com/coreos/etcd/NOTICE delete mode 100644 vendor/github.com/coreos/etcd/auth/authpb/auth.pb.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/auth.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/client.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/cluster.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/compact_op.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/compare.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/concurrency/doc.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/concurrency/election.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/concurrency/key.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/concurrency/mutex.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/concurrency/session.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/concurrency/stm.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/config.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/doc.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/health_balancer.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/kv.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/lease.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/logger.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/maintenance.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/op.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/options.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/ready_wait.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/retry.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/sort.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/txn.go delete mode 100644 vendor/github.com/coreos/etcd/clientv3/watch.go delete mode 120000 vendor/github.com/coreos/etcd/cmd/etcd delete mode 120000 vendor/github.com/coreos/etcd/cmd/etcdctl delete mode 120000 vendor/github.com/coreos/etcd/cmd/tools delete mode 100644 vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/doc.go delete mode 100644 vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/error.go delete mode 100644 vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/md.go delete mode 100644 vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/etcdserver.pb.go delete mode 100644 vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/raft_internal.pb.go delete mode 100644 vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.pb.go delete mode 100644 vendor/github.com/coreos/etcd/mvcc/mvccpb/kv.pb.go delete mode 100644 vendor/github.com/coreos/etcd/pkg/types/doc.go delete mode 100644 vendor/github.com/coreos/etcd/pkg/types/id.go delete mode 100644 vendor/github.com/coreos/etcd/pkg/types/set.go delete mode 100644 vendor/github.com/coreos/etcd/pkg/types/slice.go delete mode 100644 vendor/github.com/coreos/etcd/pkg/types/urls.go delete mode 100644 vendor/github.com/coreos/etcd/pkg/types/urlsmap.go delete mode 100644 vendor/github.com/cznic/mathutil/AUTHORS delete mode 100644 vendor/github.com/cznic/mathutil/CONTRIBUTORS delete mode 100644 vendor/github.com/cznic/mathutil/LICENSE delete mode 100644 vendor/github.com/cznic/mathutil/bits.go delete mode 100644 vendor/github.com/cznic/mathutil/envelope.go delete mode 100644 vendor/github.com/cznic/mathutil/int.go delete mode 100644 vendor/github.com/cznic/mathutil/mathutil.go delete mode 100644 vendor/github.com/cznic/mathutil/mersenne/AUTHORS delete mode 100644 vendor/github.com/cznic/mathutil/mersenne/CONTRIBUTORS delete mode 100644 vendor/github.com/cznic/mathutil/mersenne/LICENSE delete mode 100644 vendor/github.com/cznic/mathutil/permute.go delete mode 100644 vendor/github.com/cznic/mathutil/poly.go delete mode 100644 vendor/github.com/cznic/mathutil/primes.go delete mode 100644 vendor/github.com/cznic/mathutil/rat.go delete mode 100644 vendor/github.com/cznic/mathutil/rnd.go delete mode 100644 vendor/github.com/cznic/mathutil/tables.go delete mode 100644 vendor/github.com/cznic/mathutil/test_deps.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/AUTHORS delete mode 100644 vendor/github.com/go-sql-driver/mysql/LICENSE delete mode 100644 vendor/github.com/go-sql-driver/mysql/appengine.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/buffer.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/collations.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/connection.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/const.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/driver.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/dsn.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/errors.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/infile.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/packets.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/result.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/rows.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/statement.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/transaction.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/utils.go delete mode 100644 vendor/github.com/golang/protobuf/AUTHORS delete mode 100644 vendor/github.com/golang/protobuf/CONTRIBUTORS delete mode 100644 vendor/github.com/golang/protobuf/LICENSE delete mode 100644 vendor/github.com/golang/protobuf/proto/clone.go delete mode 100644 vendor/github.com/golang/protobuf/proto/decode.go delete mode 100644 vendor/github.com/golang/protobuf/proto/discard.go delete mode 100644 vendor/github.com/golang/protobuf/proto/encode.go delete mode 100644 vendor/github.com/golang/protobuf/proto/equal.go delete mode 100644 vendor/github.com/golang/protobuf/proto/extensions.go delete mode 100644 vendor/github.com/golang/protobuf/proto/lib.go delete mode 100644 vendor/github.com/golang/protobuf/proto/message_set.go delete mode 100644 vendor/github.com/golang/protobuf/proto/pointer_reflect.go delete mode 100644 vendor/github.com/golang/protobuf/proto/pointer_unsafe.go delete mode 100644 vendor/github.com/golang/protobuf/proto/properties.go delete mode 100644 vendor/github.com/golang/protobuf/proto/table_marshal.go delete mode 100644 vendor/github.com/golang/protobuf/proto/table_merge.go delete mode 100644 vendor/github.com/golang/protobuf/proto/table_unmarshal.go delete mode 100644 vendor/github.com/golang/protobuf/proto/text.go delete mode 100644 vendor/github.com/golang/protobuf/proto/text_parser.go delete mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go delete mode 100644 vendor/github.com/golang/protobuf/ptypes/any.go delete mode 100644 vendor/github.com/golang/protobuf/ptypes/any/any.pb.go delete mode 100644 vendor/github.com/golang/protobuf/ptypes/doc.go delete mode 100644 vendor/github.com/golang/protobuf/ptypes/duration.go delete mode 100644 vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go delete mode 100644 vendor/github.com/golang/protobuf/ptypes/timestamp.go delete mode 100644 vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go delete mode 100644 vendor/github.com/golang/snappy/AUTHORS delete mode 100644 vendor/github.com/golang/snappy/CONTRIBUTORS delete mode 100644 vendor/github.com/golang/snappy/LICENSE delete mode 100644 vendor/github.com/golang/snappy/decode.go delete mode 100644 vendor/github.com/golang/snappy/decode_amd64.go delete mode 100644 vendor/github.com/golang/snappy/decode_amd64.s delete mode 100644 vendor/github.com/golang/snappy/decode_other.go delete mode 100644 vendor/github.com/golang/snappy/encode.go delete mode 100644 vendor/github.com/golang/snappy/encode_amd64.go delete mode 100644 vendor/github.com/golang/snappy/encode_amd64.s delete mode 100644 vendor/github.com/golang/snappy/encode_other.go delete mode 100644 vendor/github.com/golang/snappy/snappy.go delete mode 100644 vendor/github.com/google/btree/LICENSE delete mode 100644 vendor/github.com/google/btree/btree.go delete mode 100644 vendor/github.com/google/btree/btree_mem.go delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-middleware/LICENSE delete mode 120000 vendor/github.com/grpc-ecosystem/go-grpc-middleware/auth/README.md delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-middleware/chain.go delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-middleware/doc.go delete mode 120000 vendor/github.com/grpc-ecosystem/go-grpc-middleware/logging/README.md delete mode 120000 vendor/github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/README.md delete mode 120000 vendor/github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/README.md delete mode 120000 vendor/github.com/grpc-ecosystem/go-grpc-middleware/recovery/README.md delete mode 120000 vendor/github.com/grpc-ecosystem/go-grpc-middleware/retry/README.md delete mode 120000 vendor/github.com/grpc-ecosystem/go-grpc-middleware/tags/README.md delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-middleware/tags/context.go delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-middleware/tags/doc.go delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-middleware/tags/fieldextractor.go delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-middleware/tags/interceptors.go delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-middleware/tags/options.go delete mode 120000 vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/README.md delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/client_interceptors.go delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/doc.go delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/id_extract.go delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/metadata.go delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/options.go delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/server_interceptors.go delete mode 120000 vendor/github.com/grpc-ecosystem/go-grpc-middleware/util/metautils/README.md delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-middleware/util/metautils/doc.go delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-middleware/util/metautils/nicemd.go delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-middleware/util/metautils/single_key.go delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-middleware/wrappers.go delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-prometheus/LICENSE delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-prometheus/client.go delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-prometheus/client_metrics.go delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-prometheus/client_reporter.go delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-prometheus/metric_options.go delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-prometheus/server.go delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-prometheus/server_metrics.go delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-prometheus/server_reporter.go delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-prometheus/util.go delete mode 100644 vendor/github.com/juju/errors/LICENSE delete mode 100644 vendor/github.com/juju/errors/doc.go delete mode 100644 vendor/github.com/juju/errors/error.go delete mode 100644 vendor/github.com/juju/errors/errortypes.go delete mode 100644 vendor/github.com/juju/errors/functions.go delete mode 100644 vendor/github.com/juju/errors/path.go delete mode 100644 vendor/github.com/matttproud/golang_protobuf_extensions/LICENSE delete mode 100644 vendor/github.com/matttproud/golang_protobuf_extensions/NOTICE delete mode 100644 vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/decode.go delete mode 100644 vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/doc.go delete mode 100644 vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/encode.go delete mode 100644 vendor/github.com/opentracing/opentracing-go/LICENSE delete mode 100644 vendor/github.com/opentracing/opentracing-go/ext/tags.go delete mode 100644 vendor/github.com/opentracing/opentracing-go/globaltracer.go delete mode 100644 vendor/github.com/opentracing/opentracing-go/gocontext.go delete mode 100644 vendor/github.com/opentracing/opentracing-go/log/field.go delete mode 100644 vendor/github.com/opentracing/opentracing-go/log/util.go delete mode 100644 vendor/github.com/opentracing/opentracing-go/noop.go delete mode 100644 vendor/github.com/opentracing/opentracing-go/propagation.go delete mode 100644 vendor/github.com/opentracing/opentracing-go/span.go delete mode 100644 vendor/github.com/opentracing/opentracing-go/tracer.go delete mode 100644 vendor/github.com/petar/GoLLRB/AUTHORS delete mode 100644 vendor/github.com/petar/GoLLRB/LICENSE delete mode 100644 vendor/github.com/petar/GoLLRB/llrb/avgvar.go delete mode 100644 vendor/github.com/petar/GoLLRB/llrb/iterator.go delete mode 100644 vendor/github.com/petar/GoLLRB/llrb/llrb-stats.go delete mode 100644 vendor/github.com/petar/GoLLRB/llrb/llrb.go delete mode 100644 vendor/github.com/petar/GoLLRB/llrb/util.go delete mode 100644 vendor/github.com/pingcap/goleveldb/LICENSE delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/batch.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/cache/cache.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/cache/lru.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/comparer.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/comparer/bytes_comparer.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/comparer/comparer.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/db.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/db_compaction.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/db_iter.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/db_snapshot.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/db_state.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/db_transaction.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/db_util.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/db_write.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/doc.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/errors.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/errors/errors.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/filter.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/filter/bloom.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/filter/filter.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/iterator/array_iter.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/iterator/indexed_iter.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/iterator/iter.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/iterator/merged_iter.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/journal/journal.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/key.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/memdb/memdb.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/opt/options.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/options.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/session.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/session_compaction.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/session_record.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/session_util.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/storage/file_storage.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/storage/file_storage_nacl.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/storage/file_storage_plan9.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/storage/file_storage_solaris.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/storage/file_storage_unix.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/storage/file_storage_windows.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/storage/mem_storage.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/storage/storage.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/table.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/table/reader.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/table/table.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/table/writer.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/util.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/util/buffer.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/util/buffer_pool.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/util/crc32.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/util/hash.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/util/range.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/util/util.go delete mode 100644 vendor/github.com/pingcap/goleveldb/leveldb/version.go delete mode 100644 vendor/github.com/pingcap/kvproto/LICENSE delete mode 100644 vendor/github.com/pingcap/kvproto/_vendor/src/github.com/gogo/protobuf/LICENSE delete mode 100644 vendor/github.com/pingcap/kvproto/_vendor/src/github.com/golang/protobuf/LICENSE delete mode 100644 vendor/github.com/pingcap/kvproto/_vendor/src/github.com/juju/errors/LICENSE delete mode 120000 vendor/github.com/pingcap/kvproto/_vendor/src/github.com/pingcap/kvproto delete mode 100644 vendor/github.com/pingcap/kvproto/_vendor/src/github.com/pingcap/tipb/LICENSE delete mode 100644 vendor/github.com/pingcap/kvproto/_vendor/src/golang.org/x/net/LICENSE delete mode 100644 vendor/github.com/pingcap/kvproto/_vendor/src/golang.org/x/net/PATENTS delete mode 100644 vendor/github.com/pingcap/kvproto/_vendor/src/golang.org/x/text/LICENSE delete mode 100644 vendor/github.com/pingcap/kvproto/_vendor/src/golang.org/x/tools/LICENSE delete mode 100644 vendor/github.com/pingcap/kvproto/_vendor/src/golang.org/x/tools/PATENTS delete mode 100644 vendor/github.com/pingcap/kvproto/_vendor/src/google.golang.org/grpc/LICENSE delete mode 100644 vendor/github.com/pingcap/kvproto/_vendor/src/google.golang.org/grpc/PATENTS delete mode 100644 vendor/github.com/pingcap/kvproto/pkg/coprocessor/coprocessor.pb.go delete mode 100644 vendor/github.com/pingcap/kvproto/pkg/eraftpb/eraftpb.pb.go delete mode 100644 vendor/github.com/pingcap/kvproto/pkg/errorpb/errorpb.pb.go delete mode 100644 vendor/github.com/pingcap/kvproto/pkg/kvrpcpb/kvrpcpb.pb.go delete mode 100644 vendor/github.com/pingcap/kvproto/pkg/metapb/metapb.pb.go delete mode 100644 vendor/github.com/pingcap/kvproto/pkg/pdpb/pdpb.pb.go delete mode 100644 vendor/github.com/pingcap/kvproto/pkg/raft_serverpb/raft_serverpb.pb.go delete mode 100644 vendor/github.com/pingcap/kvproto/pkg/tikvpb/tikvpb.pb.go delete mode 100644 vendor/github.com/pingcap/pd/LICENSE delete mode 100644 vendor/github.com/pingcap/pd/pd-client/client.go delete mode 100644 vendor/github.com/pingcap/pd/pd-client/metrics.go delete mode 100644 vendor/github.com/pingcap/tidb/CONTRIBUTORS delete mode 100644 vendor/github.com/pingcap/tidb/LICENSE delete mode 100644 vendor/github.com/pingcap/tidb/config/config.go delete mode 100644 vendor/github.com/pingcap/tidb/kv/buffer_store.go delete mode 100644 vendor/github.com/pingcap/tidb/kv/error.go delete mode 100644 vendor/github.com/pingcap/tidb/kv/fault_injection.go delete mode 100644 vendor/github.com/pingcap/tidb/kv/iter.go delete mode 100644 vendor/github.com/pingcap/tidb/kv/key.go delete mode 100644 vendor/github.com/pingcap/tidb/kv/kv.go delete mode 100644 vendor/github.com/pingcap/tidb/kv/memdb_buffer.go delete mode 100644 vendor/github.com/pingcap/tidb/kv/mock.go delete mode 100644 vendor/github.com/pingcap/tidb/kv/txn.go delete mode 100644 vendor/github.com/pingcap/tidb/kv/union_iter.go delete mode 100644 vendor/github.com/pingcap/tidb/kv/union_store.go delete mode 100644 vendor/github.com/pingcap/tidb/kv/utils.go delete mode 100644 vendor/github.com/pingcap/tidb/kv/variables.go delete mode 100644 vendor/github.com/pingcap/tidb/kv/version.go delete mode 100644 vendor/github.com/pingcap/tidb/meta/autoid/autoid.go delete mode 100644 vendor/github.com/pingcap/tidb/meta/meta.go delete mode 100644 vendor/github.com/pingcap/tidb/metrics/ddl.go delete mode 100644 vendor/github.com/pingcap/tidb/metrics/distsql.go delete mode 100644 vendor/github.com/pingcap/tidb/metrics/domain.go delete mode 100644 vendor/github.com/pingcap/tidb/metrics/executor.go delete mode 100644 vendor/github.com/pingcap/tidb/metrics/meta.go delete mode 100644 vendor/github.com/pingcap/tidb/metrics/metrics.go delete mode 100644 vendor/github.com/pingcap/tidb/metrics/owner.go delete mode 100644 vendor/github.com/pingcap/tidb/metrics/server.go delete mode 100644 vendor/github.com/pingcap/tidb/metrics/session.go delete mode 100644 vendor/github.com/pingcap/tidb/metrics/stats.go delete mode 100644 vendor/github.com/pingcap/tidb/metrics/tikvclient.go delete mode 100644 vendor/github.com/pingcap/tidb/model/ddl.go delete mode 100644 vendor/github.com/pingcap/tidb/model/flags.go delete mode 100644 vendor/github.com/pingcap/tidb/model/model.go delete mode 100644 vendor/github.com/pingcap/tidb/mysql/charset.go delete mode 100644 vendor/github.com/pingcap/tidb/mysql/const.go delete mode 100644 vendor/github.com/pingcap/tidb/mysql/errcode.go delete mode 100644 vendor/github.com/pingcap/tidb/mysql/errname.go delete mode 100644 vendor/github.com/pingcap/tidb/mysql/error.go delete mode 100644 vendor/github.com/pingcap/tidb/mysql/locale_format.go delete mode 100644 vendor/github.com/pingcap/tidb/mysql/state.go delete mode 100644 vendor/github.com/pingcap/tidb/mysql/type.go delete mode 100644 vendor/github.com/pingcap/tidb/mysql/util.go delete mode 100644 vendor/github.com/pingcap/tidb/owner/manager.go delete mode 100644 vendor/github.com/pingcap/tidb/owner/mock.go delete mode 100644 vendor/github.com/pingcap/tidb/parser/opcode/opcode.go delete mode 100644 vendor/github.com/pingcap/tidb/sessionctx/binloginfo/binloginfo.go delete mode 100644 vendor/github.com/pingcap/tidb/sessionctx/context.go delete mode 100644 vendor/github.com/pingcap/tidb/sessionctx/stmtctx/stmtctx.go delete mode 100644 vendor/github.com/pingcap/tidb/sessionctx/variable/session.go delete mode 100644 vendor/github.com/pingcap/tidb/sessionctx/variable/statusvar.go delete mode 100644 vendor/github.com/pingcap/tidb/sessionctx/variable/sysvar.go delete mode 100644 vendor/github.com/pingcap/tidb/sessionctx/variable/tidb_vars.go delete mode 100644 vendor/github.com/pingcap/tidb/sessionctx/variable/varsutil.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/2pc.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/backoff.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/client.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/coprocessor.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/delete_range.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/error.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/interface.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/kv.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/latch/latch.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/latch/scheduler.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/lock_resolver.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/oracle/oracle.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/oracle/oracles/local.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/oracle/oracles/metrics.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/oracle/oracles/pd.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/pd_codec.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/rawkv.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/region_cache.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/region_request.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/safepoint.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/scan.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/snapshot.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/split_region.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/test_util.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/tikvrpc/tikvrpc.go delete mode 100644 vendor/github.com/pingcap/tidb/store/tikv/txn.go delete mode 100644 vendor/github.com/pingcap/tidb/structure/hash.go delete mode 100644 vendor/github.com/pingcap/tidb/structure/list.go delete mode 100644 vendor/github.com/pingcap/tidb/structure/string.go delete mode 100644 vendor/github.com/pingcap/tidb/structure/structure.go delete mode 100644 vendor/github.com/pingcap/tidb/structure/type.go delete mode 100644 vendor/github.com/pingcap/tidb/tablecodec/tablecodec.go delete mode 100644 vendor/github.com/pingcap/tidb/terror/terror.go delete mode 100644 vendor/github.com/pingcap/tidb/types/binary_literal.go delete mode 100644 vendor/github.com/pingcap/tidb/types/compare.go delete mode 100644 vendor/github.com/pingcap/tidb/types/convert.go delete mode 100644 vendor/github.com/pingcap/tidb/types/datum.go delete mode 100644 vendor/github.com/pingcap/tidb/types/datum_eval.go delete mode 100644 vendor/github.com/pingcap/tidb/types/enum.go delete mode 100644 vendor/github.com/pingcap/tidb/types/errors.go delete mode 100644 vendor/github.com/pingcap/tidb/types/etc.go delete mode 100644 vendor/github.com/pingcap/tidb/types/eval_type.go delete mode 100644 vendor/github.com/pingcap/tidb/types/field_type.go delete mode 100644 vendor/github.com/pingcap/tidb/types/fsp.go delete mode 100644 vendor/github.com/pingcap/tidb/types/helper.go delete mode 100644 vendor/github.com/pingcap/tidb/types/json/binary.go delete mode 100644 vendor/github.com/pingcap/tidb/types/json/binary_functions.go delete mode 100644 vendor/github.com/pingcap/tidb/types/json/constants.go delete mode 100644 vendor/github.com/pingcap/tidb/types/json/path_expr.go delete mode 100644 vendor/github.com/pingcap/tidb/types/mydecimal.go delete mode 100644 vendor/github.com/pingcap/tidb/types/mytime.go delete mode 100644 vendor/github.com/pingcap/tidb/types/overflow.go delete mode 100644 vendor/github.com/pingcap/tidb/types/row.go delete mode 100644 vendor/github.com/pingcap/tidb/types/set.go delete mode 100644 vendor/github.com/pingcap/tidb/types/time.go delete mode 100644 vendor/github.com/pingcap/tidb/util/auth/auth.go delete mode 100644 vendor/github.com/pingcap/tidb/util/charset/charset.go delete mode 100644 vendor/github.com/pingcap/tidb/util/charset/encoding_table.go delete mode 100644 vendor/github.com/pingcap/tidb/util/chunk/chunk.go delete mode 100644 vendor/github.com/pingcap/tidb/util/chunk/compare.go delete mode 100644 vendor/github.com/pingcap/tidb/util/chunk/iterator.go delete mode 100644 vendor/github.com/pingcap/tidb/util/chunk/list.go delete mode 100644 vendor/github.com/pingcap/tidb/util/chunk/mutrow.go delete mode 100644 vendor/github.com/pingcap/tidb/util/codec/bytes.go delete mode 100644 vendor/github.com/pingcap/tidb/util/codec/codec.go delete mode 100644 vendor/github.com/pingcap/tidb/util/codec/decimal.go delete mode 100644 vendor/github.com/pingcap/tidb/util/codec/float.go delete mode 100644 vendor/github.com/pingcap/tidb/util/codec/number.go delete mode 100644 vendor/github.com/pingcap/tidb/util/format/format.go delete mode 100644 vendor/github.com/pingcap/tidb/util/goroutine_pool/fake.go delete mode 100644 vendor/github.com/pingcap/tidb/util/goroutine_pool/gp.go delete mode 100644 vendor/github.com/pingcap/tidb/util/hack/hack.go delete mode 100644 vendor/github.com/pingcap/tidb/util/kvcache/sharded_lru.go delete mode 100644 vendor/github.com/pingcap/tidb/util/kvcache/simple_lru.go delete mode 100644 vendor/github.com/pingcap/tidb/util/logutil/log.go delete mode 100644 vendor/github.com/pingcap/tidb/util/memory/action.go delete mode 100644 vendor/github.com/pingcap/tidb/util/memory/tracker.go delete mode 100644 vendor/github.com/pingcap/tidb/util/misc.go delete mode 100644 vendor/github.com/pingcap/tidb/util/prefix_helper.go delete mode 100644 vendor/github.com/pingcap/tidb/util/processinfo.go delete mode 100644 vendor/github.com/pingcap/tidb/util/random.go delete mode 100644 vendor/github.com/pingcap/tipb/LICENSE delete mode 100644 vendor/github.com/pingcap/tipb/go-binlog/binlog.pb.go delete mode 100644 vendor/github.com/pingcap/tipb/go-binlog/cistern.pb.go delete mode 100644 vendor/github.com/pingcap/tipb/go-binlog/pump.pb.go delete mode 100644 vendor/github.com/pingcap/tipb/go-tipb/analyze.pb.go delete mode 100644 vendor/github.com/pingcap/tipb/go-tipb/checksum.pb.go delete mode 100644 vendor/github.com/pingcap/tipb/go-tipb/executor.pb.go delete mode 100644 vendor/github.com/pingcap/tipb/go-tipb/expression.pb.go delete mode 100644 vendor/github.com/pingcap/tipb/go-tipb/schema.pb.go delete mode 100644 vendor/github.com/pingcap/tipb/go-tipb/select.pb.go delete mode 100644 vendor/github.com/pingcap/tipb/proto/Mysqlx/Notice/mysqlx_notice.proto delete mode 100644 vendor/github.com/pingcap/tipb/sharedbytes/sharedbytes.go delete mode 100644 vendor/github.com/pkg/errors/LICENSE delete mode 100644 vendor/github.com/pkg/errors/errors.go delete mode 100644 vendor/github.com/pkg/errors/stack.go delete mode 100644 vendor/github.com/prometheus/client_golang/AUTHORS.md delete mode 100644 vendor/github.com/prometheus/client_golang/LICENSE delete mode 100644 vendor/github.com/prometheus/client_golang/NOTICE delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/collector.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/counter.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/desc.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/doc.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/fnv.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/gauge.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/go_collector.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/histogram.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/http.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/metric.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/process_collector.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/registry.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/summary.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/untyped.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/value.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/vec.go delete mode 100644 vendor/github.com/prometheus/client_model/LICENSE delete mode 100644 vendor/github.com/prometheus/client_model/NOTICE delete mode 100644 vendor/github.com/prometheus/client_model/go/metrics.pb.go delete mode 100644 vendor/github.com/prometheus/client_model/ruby/LICENSE delete mode 100644 vendor/github.com/prometheus/common/LICENSE delete mode 100644 vendor/github.com/prometheus/common/NOTICE delete mode 100644 vendor/github.com/prometheus/common/expfmt/decode.go delete mode 100644 vendor/github.com/prometheus/common/expfmt/encode.go delete mode 100644 vendor/github.com/prometheus/common/expfmt/expfmt.go delete mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz.go delete mode 100644 vendor/github.com/prometheus/common/expfmt/text_create.go delete mode 100644 vendor/github.com/prometheus/common/expfmt/text_parse.go delete mode 100644 vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/autoneg.go delete mode 100644 vendor/github.com/prometheus/common/model/alert.go delete mode 100644 vendor/github.com/prometheus/common/model/fingerprinting.go delete mode 100644 vendor/github.com/prometheus/common/model/fnv.go delete mode 100644 vendor/github.com/prometheus/common/model/labels.go delete mode 100644 vendor/github.com/prometheus/common/model/labelset.go delete mode 100644 vendor/github.com/prometheus/common/model/metric.go delete mode 100644 vendor/github.com/prometheus/common/model/model.go delete mode 100644 vendor/github.com/prometheus/common/model/signature.go delete mode 100644 vendor/github.com/prometheus/common/model/silence.go delete mode 100644 vendor/github.com/prometheus/common/model/time.go delete mode 100644 vendor/github.com/prometheus/common/model/value.go delete mode 100644 vendor/github.com/prometheus/procfs/LICENSE delete mode 100644 vendor/github.com/prometheus/procfs/NOTICE delete mode 100644 vendor/github.com/prometheus/procfs/buddyinfo.go delete mode 100644 vendor/github.com/prometheus/procfs/doc.go delete mode 100644 vendor/github.com/prometheus/procfs/fs.go delete mode 100644 vendor/github.com/prometheus/procfs/internal/util/parse.go delete mode 100644 vendor/github.com/prometheus/procfs/ipvs.go delete mode 100644 vendor/github.com/prometheus/procfs/mdstat.go delete mode 100644 vendor/github.com/prometheus/procfs/mountstats.go delete mode 100644 vendor/github.com/prometheus/procfs/net_dev.go delete mode 100644 vendor/github.com/prometheus/procfs/nfs/nfs.go delete mode 100644 vendor/github.com/prometheus/procfs/nfs/parse.go delete mode 100644 vendor/github.com/prometheus/procfs/nfs/parse_nfs.go delete mode 100644 vendor/github.com/prometheus/procfs/nfs/parse_nfsd.go delete mode 100644 vendor/github.com/prometheus/procfs/proc.go delete mode 100644 vendor/github.com/prometheus/procfs/proc_io.go delete mode 100644 vendor/github.com/prometheus/procfs/proc_limits.go delete mode 100644 vendor/github.com/prometheus/procfs/proc_ns.go delete mode 100644 vendor/github.com/prometheus/procfs/proc_stat.go delete mode 100644 vendor/github.com/prometheus/procfs/stat.go delete mode 100644 vendor/github.com/prometheus/procfs/xfrm.go delete mode 100644 vendor/github.com/prometheus/procfs/xfs/parse.go delete mode 100644 vendor/github.com/prometheus/procfs/xfs/xfs.go delete mode 100644 vendor/github.com/sirupsen/logrus/LICENSE delete mode 100644 vendor/github.com/sirupsen/logrus/alt_exit.go delete mode 100644 vendor/github.com/sirupsen/logrus/doc.go delete mode 100644 vendor/github.com/sirupsen/logrus/entry.go delete mode 100644 vendor/github.com/sirupsen/logrus/exported.go delete mode 100644 vendor/github.com/sirupsen/logrus/formatter.go delete mode 100644 vendor/github.com/sirupsen/logrus/hooks.go delete mode 100644 vendor/github.com/sirupsen/logrus/json_formatter.go delete mode 100644 vendor/github.com/sirupsen/logrus/logger.go delete mode 100644 vendor/github.com/sirupsen/logrus/logrus.go delete mode 100644 vendor/github.com/sirupsen/logrus/terminal_appengine.go delete mode 100644 vendor/github.com/sirupsen/logrus/terminal_bsd.go delete mode 100644 vendor/github.com/sirupsen/logrus/terminal_linux.go delete mode 100644 vendor/github.com/sirupsen/logrus/terminal_notwindows.go delete mode 100644 vendor/github.com/sirupsen/logrus/terminal_solaris.go delete mode 100644 vendor/github.com/sirupsen/logrus/terminal_windows.go delete mode 100644 vendor/github.com/sirupsen/logrus/text_formatter.go delete mode 100644 vendor/github.com/sirupsen/logrus/writer.go delete mode 100644 vendor/github.com/spaolacci/murmur3/LICENSE delete mode 100644 vendor/github.com/spaolacci/murmur3/murmur.go delete mode 100644 vendor/github.com/spaolacci/murmur3/murmur128.go delete mode 100644 vendor/github.com/spaolacci/murmur3/murmur32.go delete mode 100644 vendor/github.com/spaolacci/murmur3/murmur64.go delete mode 100644 vendor/github.com/twinj/uuid/LICENSE delete mode 100644 vendor/github.com/twinj/uuid/format.go delete mode 100644 vendor/github.com/twinj/uuid/generator.go delete mode 100644 vendor/github.com/twinj/uuid/saver.go delete mode 100644 vendor/github.com/twinj/uuid/timestamp.go delete mode 100644 vendor/github.com/twinj/uuid/types.go delete mode 100644 vendor/github.com/twinj/uuid/uuid.go delete mode 100644 vendor/github.com/twinj/uuid/version.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/LICENSE delete mode 100644 vendor/github.com/uber/jaeger-client-go/baggage_setter.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/config/config.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/config/config_env.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/config/options.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/constants.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/context.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/contrib_observer.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/doc.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/header.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/internal/baggage/remote/options.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/internal/baggage/remote/restriction_manager.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/internal/baggage/restriction_manager.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/internal/spanlog/json.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/internal/throttler/remote/options.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/internal/throttler/remote/throttler.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/internal/throttler/throttler.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/interop.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/jaeger_tag.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/jaeger_thrift_span.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/log/logger.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/logger.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/metrics.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/observer.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/process.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/propagation.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/reference.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/reporter.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/reporter_options.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/rpcmetrics/doc.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/rpcmetrics/endpoints.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/rpcmetrics/metrics.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/rpcmetrics/normalizer.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/rpcmetrics/observer.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/sampler.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/sampler_options.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/span.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/agent/agent.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/agent/constants.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/agent/ttypes.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/baggage/baggagerestrictionmanager.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/baggage/constants.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/baggage/ttypes.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/jaeger/agent.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/jaeger/constants.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/jaeger/ttypes.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/sampling/constants.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/sampling/samplingmanager.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/sampling/ttypes.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/zipkincore/constants.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/zipkincore/ttypes.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/zipkincore/zipkincollector.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/application_exception.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/binary_protocol.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/compact_protocol.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/exception.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/memory_buffer.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/messagetype.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/numeric.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/processor.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/protocol.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/protocol_exception.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/protocol_factory.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/rich_transport.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/serializer.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/simple_json_protocol.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/transport.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/transport_exception.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/transport_factory.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/type.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/tracer.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/tracer_options.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/transport.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/transport_udp.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/utils/http_json.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/utils/localip.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/utils/rand.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/utils/rate_limiter.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/utils/udp_client.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/utils/utils.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/zipkin.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/zipkin_thrift_span.go delete mode 100644 vendor/github.com/uber/jaeger-lib/LICENSE delete mode 100644 vendor/github.com/uber/jaeger-lib/metrics/counter.go delete mode 100644 vendor/github.com/uber/jaeger-lib/metrics/factory.go delete mode 100644 vendor/github.com/uber/jaeger-lib/metrics/gauge.go delete mode 100644 vendor/github.com/uber/jaeger-lib/metrics/local.go delete mode 100644 vendor/github.com/uber/jaeger-lib/metrics/metrics.go delete mode 100644 vendor/github.com/uber/jaeger-lib/metrics/stopwatch.go delete mode 100644 vendor/github.com/uber/jaeger-lib/metrics/timer.go delete mode 100644 vendor/golang.org/x/net/AUTHORS delete mode 100644 vendor/golang.org/x/net/CONTRIBUTORS delete mode 100644 vendor/golang.org/x/net/LICENSE delete mode 100644 vendor/golang.org/x/net/PATENTS delete mode 100644 vendor/golang.org/x/net/context/context.go delete mode 100644 vendor/golang.org/x/net/context/go17.go delete mode 100644 vendor/golang.org/x/net/context/go19.go delete mode 100644 vendor/golang.org/x/net/context/pre_go17.go delete mode 100644 vendor/golang.org/x/net/context/pre_go19.go delete mode 100644 vendor/golang.org/x/net/http/httpguts/guts.go delete mode 100644 vendor/golang.org/x/net/http/httpguts/httplex.go delete mode 100644 vendor/golang.org/x/net/http2/ciphers.go delete mode 100644 vendor/golang.org/x/net/http2/client_conn_pool.go delete mode 100644 vendor/golang.org/x/net/http2/configure_transport.go delete mode 100644 vendor/golang.org/x/net/http2/databuffer.go delete mode 100644 vendor/golang.org/x/net/http2/errors.go delete mode 100644 vendor/golang.org/x/net/http2/flow.go delete mode 100644 vendor/golang.org/x/net/http2/frame.go delete mode 100644 vendor/golang.org/x/net/http2/go16.go delete mode 100644 vendor/golang.org/x/net/http2/go17.go delete mode 100644 vendor/golang.org/x/net/http2/go17_not18.go delete mode 100644 vendor/golang.org/x/net/http2/go18.go delete mode 100644 vendor/golang.org/x/net/http2/go19.go delete mode 100644 vendor/golang.org/x/net/http2/gotrack.go delete mode 100644 vendor/golang.org/x/net/http2/headermap.go delete mode 100644 vendor/golang.org/x/net/http2/hpack/encode.go delete mode 100644 vendor/golang.org/x/net/http2/hpack/hpack.go delete mode 100644 vendor/golang.org/x/net/http2/hpack/huffman.go delete mode 100644 vendor/golang.org/x/net/http2/hpack/tables.go delete mode 100644 vendor/golang.org/x/net/http2/http2.go delete mode 100644 vendor/golang.org/x/net/http2/not_go16.go delete mode 100644 vendor/golang.org/x/net/http2/not_go17.go delete mode 100644 vendor/golang.org/x/net/http2/not_go18.go delete mode 100644 vendor/golang.org/x/net/http2/not_go19.go delete mode 100644 vendor/golang.org/x/net/http2/pipe.go delete mode 100644 vendor/golang.org/x/net/http2/server.go delete mode 100644 vendor/golang.org/x/net/http2/transport.go delete mode 100644 vendor/golang.org/x/net/http2/write.go delete mode 100644 vendor/golang.org/x/net/http2/writesched.go delete mode 100644 vendor/golang.org/x/net/http2/writesched_priority.go delete mode 100644 vendor/golang.org/x/net/http2/writesched_random.go delete mode 100644 vendor/golang.org/x/net/idna/idna.go delete mode 100644 vendor/golang.org/x/net/idna/punycode.go delete mode 100644 vendor/golang.org/x/net/idna/tables.go delete mode 100644 vendor/golang.org/x/net/idna/trie.go delete mode 100644 vendor/golang.org/x/net/idna/trieval.go delete mode 100644 vendor/golang.org/x/net/internal/timeseries/timeseries.go delete mode 100644 vendor/golang.org/x/net/trace/events.go delete mode 100644 vendor/golang.org/x/net/trace/histogram.go delete mode 100644 vendor/golang.org/x/net/trace/trace.go delete mode 100644 vendor/golang.org/x/net/trace/trace_go16.go delete mode 100644 vendor/golang.org/x/net/trace/trace_go17.go delete mode 100644 vendor/golang.org/x/sys/AUTHORS delete mode 100644 vendor/golang.org/x/sys/CONTRIBUTORS delete mode 100644 vendor/golang.org/x/sys/LICENSE delete mode 100644 vendor/golang.org/x/sys/PATENTS delete mode 100644 vendor/golang.org/x/sys/unix/affinity_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/asm_darwin_386.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_darwin_amd64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_darwin_arm.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_darwin_arm64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_freebsd_386.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_freebsd_arm.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_386.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_amd64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_arm.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_arm64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_mips64x.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_mipsx.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_s390x.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_netbsd_386.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_netbsd_arm.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_openbsd_386.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_openbsd_arm.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_solaris_amd64.s delete mode 100644 vendor/golang.org/x/sys/unix/bluetooth_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/cap_freebsd.go delete mode 100644 vendor/golang.org/x/sys/unix/constants.go delete mode 100644 vendor/golang.org/x/sys/unix/dev_darwin.go delete mode 100644 vendor/golang.org/x/sys/unix/dev_dragonfly.go delete mode 100644 vendor/golang.org/x/sys/unix/dev_freebsd.go delete mode 100644 vendor/golang.org/x/sys/unix/dev_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/dev_netbsd.go delete mode 100644 vendor/golang.org/x/sys/unix/dev_openbsd.go delete mode 100644 vendor/golang.org/x/sys/unix/dirent.go delete mode 100644 vendor/golang.org/x/sys/unix/endian_big.go delete mode 100644 vendor/golang.org/x/sys/unix/endian_little.go delete mode 100644 vendor/golang.org/x/sys/unix/env_unix.go delete mode 100644 vendor/golang.org/x/sys/unix/errors_freebsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/errors_freebsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/fcntl.go delete mode 100644 vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go delete mode 100644 vendor/golang.org/x/sys/unix/gccgo.go delete mode 100644 vendor/golang.org/x/sys/unix/gccgo_c.c delete mode 100644 vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/mkpost.go delete mode 100644 vendor/golang.org/x/sys/unix/openbsd_pledge.go delete mode 100644 vendor/golang.org/x/sys/unix/pagesize_unix.go delete mode 100644 vendor/golang.org/x/sys/unix/race.go delete mode 100644 vendor/golang.org/x/sys/unix/race0.go delete mode 100644 vendor/golang.org/x/sys/unix/sockcmsg_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/sockcmsg_unix.go delete mode 100644 vendor/golang.org/x/sys/unix/str.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_bsd.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_386.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_dragonfly.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_386.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gc.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_s390x.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_solaris.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_unix.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_unix_gc.go delete mode 100644 vendor/golang.org/x/sys/unix/timestruct.go delete mode 100644 vendor/golang.org/x/sys/unix/types_darwin.go delete mode 100644 vendor/golang.org/x/sys/unix/types_dragonfly.go delete mode 100644 vendor/golang.org/x/sys/unix/types_freebsd.go delete mode 100644 vendor/golang.org/x/sys/unix/types_netbsd.go delete mode 100644 vendor/golang.org/x/sys/unix/types_openbsd.go delete mode 100644 vendor/golang.org/x/sys/unix/types_solaris.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_darwin_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mips.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zptrace386_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/zptracearm_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/zptracemips_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/zptracemipsle_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_darwin_386.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_386.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mips.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go delete mode 100644 vendor/golang.org/x/text/AUTHORS delete mode 100644 vendor/golang.org/x/text/CONTRIBUTORS delete mode 100644 vendor/golang.org/x/text/LICENSE delete mode 100644 vendor/golang.org/x/text/PATENTS delete mode 100644 vendor/golang.org/x/text/collate/build/builder.go delete mode 100644 vendor/golang.org/x/text/collate/build/colelem.go delete mode 100644 vendor/golang.org/x/text/collate/build/contract.go delete mode 100644 vendor/golang.org/x/text/collate/build/order.go delete mode 100644 vendor/golang.org/x/text/collate/build/table.go delete mode 100644 vendor/golang.org/x/text/collate/build/trie.go delete mode 100644 vendor/golang.org/x/text/collate/collate.go delete mode 100644 vendor/golang.org/x/text/collate/index.go delete mode 100644 vendor/golang.org/x/text/collate/maketables.go delete mode 100644 vendor/golang.org/x/text/collate/option.go delete mode 100644 vendor/golang.org/x/text/collate/sort.go delete mode 100644 vendor/golang.org/x/text/collate/tables.go delete mode 100644 vendor/golang.org/x/text/encoding/charmap/charmap.go delete mode 100644 vendor/golang.org/x/text/encoding/charmap/maketables.go delete mode 100644 vendor/golang.org/x/text/encoding/charmap/tables.go delete mode 100644 vendor/golang.org/x/text/encoding/encoding.go delete mode 100644 vendor/golang.org/x/text/encoding/internal/identifier/gen.go delete mode 100644 vendor/golang.org/x/text/encoding/internal/identifier/identifier.go delete mode 100644 vendor/golang.org/x/text/encoding/internal/identifier/mib.go delete mode 100644 vendor/golang.org/x/text/encoding/internal/internal.go delete mode 100644 vendor/golang.org/x/text/encoding/japanese/all.go delete mode 100644 vendor/golang.org/x/text/encoding/japanese/eucjp.go delete mode 100644 vendor/golang.org/x/text/encoding/japanese/iso2022jp.go delete mode 100644 vendor/golang.org/x/text/encoding/japanese/maketables.go delete mode 100644 vendor/golang.org/x/text/encoding/japanese/shiftjis.go delete mode 100644 vendor/golang.org/x/text/encoding/japanese/tables.go delete mode 100644 vendor/golang.org/x/text/encoding/korean/euckr.go delete mode 100644 vendor/golang.org/x/text/encoding/korean/maketables.go delete mode 100644 vendor/golang.org/x/text/encoding/korean/tables.go delete mode 100644 vendor/golang.org/x/text/encoding/simplifiedchinese/all.go delete mode 100644 vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.go delete mode 100644 vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go delete mode 100644 vendor/golang.org/x/text/encoding/simplifiedchinese/maketables.go delete mode 100644 vendor/golang.org/x/text/encoding/simplifiedchinese/tables.go delete mode 100644 vendor/golang.org/x/text/encoding/traditionalchinese/big5.go delete mode 100644 vendor/golang.org/x/text/encoding/traditionalchinese/maketables.go delete mode 100644 vendor/golang.org/x/text/encoding/traditionalchinese/tables.go delete mode 100644 vendor/golang.org/x/text/encoding/unicode/override.go delete mode 100644 vendor/golang.org/x/text/encoding/unicode/unicode.go delete mode 100644 vendor/golang.org/x/text/internal/colltab/collelem.go delete mode 100644 vendor/golang.org/x/text/internal/colltab/colltab.go delete mode 100644 vendor/golang.org/x/text/internal/colltab/contract.go delete mode 100644 vendor/golang.org/x/text/internal/colltab/iter.go delete mode 100644 vendor/golang.org/x/text/internal/colltab/numeric.go delete mode 100644 vendor/golang.org/x/text/internal/colltab/table.go delete mode 100644 vendor/golang.org/x/text/internal/colltab/trie.go delete mode 100644 vendor/golang.org/x/text/internal/colltab/weighter.go delete mode 100644 vendor/golang.org/x/text/internal/gen/code.go delete mode 100644 vendor/golang.org/x/text/internal/gen/gen.go delete mode 100644 vendor/golang.org/x/text/internal/tag/tag.go delete mode 100644 vendor/golang.org/x/text/internal/triegen/compact.go delete mode 100644 vendor/golang.org/x/text/internal/triegen/print.go delete mode 100644 vendor/golang.org/x/text/internal/triegen/triegen.go delete mode 100644 vendor/golang.org/x/text/internal/ucd/ucd.go delete mode 100644 vendor/golang.org/x/text/internal/utf8internal/utf8internal.go delete mode 100644 vendor/golang.org/x/text/language/common.go delete mode 100644 vendor/golang.org/x/text/language/coverage.go delete mode 100644 vendor/golang.org/x/text/language/doc.go delete mode 100644 vendor/golang.org/x/text/language/gen.go delete mode 100644 vendor/golang.org/x/text/language/gen_common.go delete mode 100644 vendor/golang.org/x/text/language/gen_index.go delete mode 100644 vendor/golang.org/x/text/language/go1_1.go delete mode 100644 vendor/golang.org/x/text/language/go1_2.go delete mode 100644 vendor/golang.org/x/text/language/index.go delete mode 100644 vendor/golang.org/x/text/language/language.go delete mode 100644 vendor/golang.org/x/text/language/lookup.go delete mode 100644 vendor/golang.org/x/text/language/match.go delete mode 100644 vendor/golang.org/x/text/language/parse.go delete mode 100644 vendor/golang.org/x/text/language/tables.go delete mode 100644 vendor/golang.org/x/text/language/tags.go delete mode 100644 vendor/golang.org/x/text/runes/cond.go delete mode 100644 vendor/golang.org/x/text/runes/runes.go delete mode 100644 vendor/golang.org/x/text/secure/bidirule/bidirule.go delete mode 100644 vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go delete mode 100644 vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go delete mode 100644 vendor/golang.org/x/text/transform/transform.go delete mode 100644 vendor/golang.org/x/text/unicode/bidi/bidi.go delete mode 100644 vendor/golang.org/x/text/unicode/bidi/bracket.go delete mode 100644 vendor/golang.org/x/text/unicode/bidi/core.go delete mode 100644 vendor/golang.org/x/text/unicode/bidi/gen.go delete mode 100644 vendor/golang.org/x/text/unicode/bidi/gen_ranges.go delete mode 100644 vendor/golang.org/x/text/unicode/bidi/gen_trieval.go delete mode 100644 vendor/golang.org/x/text/unicode/bidi/prop.go delete mode 100644 vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go delete mode 100644 vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go delete mode 100644 vendor/golang.org/x/text/unicode/bidi/trieval.go delete mode 100644 vendor/golang.org/x/text/unicode/cldr/base.go delete mode 100644 vendor/golang.org/x/text/unicode/cldr/cldr.go delete mode 100644 vendor/golang.org/x/text/unicode/cldr/collate.go delete mode 100644 vendor/golang.org/x/text/unicode/cldr/decode.go delete mode 100644 vendor/golang.org/x/text/unicode/cldr/makexml.go delete mode 100644 vendor/golang.org/x/text/unicode/cldr/resolve.go delete mode 100644 vendor/golang.org/x/text/unicode/cldr/slice.go delete mode 100644 vendor/golang.org/x/text/unicode/cldr/xml.go delete mode 100644 vendor/golang.org/x/text/unicode/norm/composition.go delete mode 100644 vendor/golang.org/x/text/unicode/norm/forminfo.go delete mode 100644 vendor/golang.org/x/text/unicode/norm/input.go delete mode 100644 vendor/golang.org/x/text/unicode/norm/iter.go delete mode 100644 vendor/golang.org/x/text/unicode/norm/maketables.go delete mode 100644 vendor/golang.org/x/text/unicode/norm/normalize.go delete mode 100644 vendor/golang.org/x/text/unicode/norm/readwriter.go delete mode 100644 vendor/golang.org/x/text/unicode/norm/tables10.0.0.go delete mode 100644 vendor/golang.org/x/text/unicode/norm/tables9.0.0.go delete mode 100644 vendor/golang.org/x/text/unicode/norm/transform.go delete mode 100644 vendor/golang.org/x/text/unicode/norm/trie.go delete mode 100644 vendor/golang.org/x/text/unicode/norm/triegen.go delete mode 100644 vendor/golang.org/x/text/unicode/rangetable/gen.go delete mode 100644 vendor/golang.org/x/text/unicode/rangetable/merge.go delete mode 100644 vendor/golang.org/x/text/unicode/rangetable/rangetable.go delete mode 100644 vendor/golang.org/x/text/unicode/rangetable/tables10.0.0.go delete mode 100644 vendor/golang.org/x/text/unicode/rangetable/tables9.0.0.go delete mode 100644 vendor/google.golang.org/genproto/LICENSE delete mode 100644 vendor/google.golang.org/genproto/googleapis/api/annotations/annotations.pb.go delete mode 100644 vendor/google.golang.org/genproto/googleapis/api/annotations/http.pb.go delete mode 100644 vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go delete mode 100644 vendor/google.golang.org/grpc/AUTHORS delete mode 100644 vendor/google.golang.org/grpc/LICENSE delete mode 100644 vendor/google.golang.org/grpc/backoff.go delete mode 100644 vendor/google.golang.org/grpc/balancer.go delete mode 100644 vendor/google.golang.org/grpc/balancer/balancer.go delete mode 100644 vendor/google.golang.org/grpc/balancer/base/balancer.go delete mode 100644 vendor/google.golang.org/grpc/balancer/base/base.go delete mode 100644 vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go delete mode 100644 vendor/google.golang.org/grpc/balancer_conn_wrappers.go delete mode 100644 vendor/google.golang.org/grpc/balancer_v1_wrapper.go delete mode 100644 vendor/google.golang.org/grpc/call.go delete mode 100644 vendor/google.golang.org/grpc/clientconn.go delete mode 100644 vendor/google.golang.org/grpc/codec.go delete mode 100644 vendor/google.golang.org/grpc/codes/code_string.go delete mode 100644 vendor/google.golang.org/grpc/codes/codes.go delete mode 100644 vendor/google.golang.org/grpc/connectivity/connectivity.go delete mode 100644 vendor/google.golang.org/grpc/credentials/credentials.go delete mode 100644 vendor/google.golang.org/grpc/credentials/credentials_util_go17.go delete mode 100644 vendor/google.golang.org/grpc/credentials/credentials_util_go18.go delete mode 100644 vendor/google.golang.org/grpc/credentials/credentials_util_pre_go17.go delete mode 100644 vendor/google.golang.org/grpc/doc.go delete mode 100644 vendor/google.golang.org/grpc/encoding/encoding.go delete mode 100644 vendor/google.golang.org/grpc/encoding/proto/proto.go delete mode 100644 vendor/google.golang.org/grpc/envconfig.go delete mode 100644 vendor/google.golang.org/grpc/go16.go delete mode 100644 vendor/google.golang.org/grpc/go17.go delete mode 100644 vendor/google.golang.org/grpc/grpclog/grpclog.go delete mode 100644 vendor/google.golang.org/grpc/grpclog/logger.go delete mode 100644 vendor/google.golang.org/grpc/grpclog/loggerv2.go delete mode 100644 vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go delete mode 100644 vendor/google.golang.org/grpc/interceptor.go delete mode 100644 vendor/google.golang.org/grpc/internal/backoff/backoff.go delete mode 100644 vendor/google.golang.org/grpc/internal/channelz/funcs.go delete mode 100644 vendor/google.golang.org/grpc/internal/channelz/types.go delete mode 100644 vendor/google.golang.org/grpc/internal/grpcrand/grpcrand.go delete mode 100644 vendor/google.golang.org/grpc/internal/internal.go delete mode 100644 vendor/google.golang.org/grpc/keepalive/keepalive.go delete mode 100644 vendor/google.golang.org/grpc/metadata/metadata.go delete mode 100644 vendor/google.golang.org/grpc/naming/dns_resolver.go delete mode 100644 vendor/google.golang.org/grpc/naming/go17.go delete mode 100644 vendor/google.golang.org/grpc/naming/go18.go delete mode 100644 vendor/google.golang.org/grpc/naming/naming.go delete mode 100644 vendor/google.golang.org/grpc/peer/peer.go delete mode 100644 vendor/google.golang.org/grpc/picker_wrapper.go delete mode 100644 vendor/google.golang.org/grpc/pickfirst.go delete mode 100644 vendor/google.golang.org/grpc/proxy.go delete mode 100644 vendor/google.golang.org/grpc/resolver/dns/dns_resolver.go delete mode 100644 vendor/google.golang.org/grpc/resolver/dns/go17.go delete mode 100644 vendor/google.golang.org/grpc/resolver/dns/go18.go delete mode 100644 vendor/google.golang.org/grpc/resolver/passthrough/passthrough.go delete mode 100644 vendor/google.golang.org/grpc/resolver/resolver.go delete mode 100644 vendor/google.golang.org/grpc/resolver_conn_wrapper.go delete mode 100644 vendor/google.golang.org/grpc/rpc_util.go delete mode 100644 vendor/google.golang.org/grpc/server.go delete mode 100644 vendor/google.golang.org/grpc/service_config.go delete mode 100644 vendor/google.golang.org/grpc/stats/handlers.go delete mode 100644 vendor/google.golang.org/grpc/stats/stats.go delete mode 100644 vendor/google.golang.org/grpc/status/go16.go delete mode 100644 vendor/google.golang.org/grpc/status/go17.go delete mode 100644 vendor/google.golang.org/grpc/status/status.go delete mode 100644 vendor/google.golang.org/grpc/stickiness_linkedmap.go delete mode 100644 vendor/google.golang.org/grpc/stream.go delete mode 100644 vendor/google.golang.org/grpc/tap/tap.go delete mode 100644 vendor/google.golang.org/grpc/trace.go delete mode 100644 vendor/google.golang.org/grpc/transport/bdp_estimator.go delete mode 100644 vendor/google.golang.org/grpc/transport/controlbuf.go delete mode 100644 vendor/google.golang.org/grpc/transport/flowcontrol.go delete mode 100644 vendor/google.golang.org/grpc/transport/go16.go delete mode 100644 vendor/google.golang.org/grpc/transport/go17.go delete mode 100644 vendor/google.golang.org/grpc/transport/handler_server.go delete mode 100644 vendor/google.golang.org/grpc/transport/http2_client.go delete mode 100644 vendor/google.golang.org/grpc/transport/http2_server.go delete mode 100644 vendor/google.golang.org/grpc/transport/http_util.go delete mode 100644 vendor/google.golang.org/grpc/transport/log.go delete mode 100644 vendor/google.golang.org/grpc/transport/transport.go delete mode 100644 vendor/google.golang.org/grpc/version.go delete mode 100644 vendor/gopkg.in/natefinch/lumberjack.v2/LICENSE delete mode 100644 vendor/gopkg.in/natefinch/lumberjack.v2/chown.go delete mode 100644 vendor/gopkg.in/natefinch/lumberjack.v2/chown_linux.go delete mode 100644 vendor/gopkg.in/natefinch/lumberjack.v2/lumberjack.go diff --git a/Gopkg.lock b/Gopkg.lock deleted file mode 100644 index 455ebb0..0000000 --- a/Gopkg.lock +++ /dev/null @@ -1,406 +0,0 @@ -# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. - - -[[projects]] - branch = "master" - name = "github.com/BurntSushi/toml" - packages = ["."] - revision = "a368813c5e648fee92e5f6c30e3944ff9d5e8895" - -[[projects]] - branch = "master" - name = "github.com/anishathalye/porcupine" - packages = ["."] - revision = "2a2300ed350ec3563e52b5830e6f6b28dd728a6e" - -[[projects]] - branch = "master" - name = "github.com/beorn7/perks" - packages = ["quantile"] - revision = "3a771d992973f24aa725d07868b467d1ddfceafb" - -[[projects]] - branch = "master" - name = "github.com/codahale/hdrhistogram" - packages = ["."] - revision = "3a0bb77429bd3a61596f5e8a3172445844342120" - -[[projects]] - name = "github.com/coreos/etcd" - packages = [ - "auth/authpb", - "clientv3", - "clientv3/concurrency", - "etcdserver/api/v3rpc/rpctypes", - "etcdserver/etcdserverpb", - "mvcc/mvccpb", - "pkg/types" - ] - revision = "eddf599c689ec85f4752060edff5a72e81e9106a" - version = "v3.2.18" - -[[projects]] - branch = "master" - name = "github.com/cznic/mathutil" - packages = ["."] - revision = "ca4c9f2c136954238c3158b92de72078c7672ecc" - -[[projects]] - name = "github.com/go-sql-driver/mysql" - packages = ["."] - revision = "a0583e0143b1624142adab07e0e97fe106d99561" - version = "v1.3" - -[[projects]] - name = "github.com/golang/protobuf" - packages = [ - "proto", - "protoc-gen-go/descriptor", - "ptypes", - "ptypes/any", - "ptypes/duration", - "ptypes/timestamp" - ] - revision = "b4deda0973fb4c70b50d226b1af49f3da59f5265" - version = "v1.1.0" - -[[projects]] - branch = "master" - name = "github.com/golang/snappy" - packages = ["."] - revision = "2e65f85255dbc3072edf28d6b5b8efc472979f5a" - -[[projects]] - branch = "master" - name = "github.com/google/btree" - packages = ["."] - revision = "e89373fe6b4a7413d7acd6da1725b83ef713e6e4" - -[[projects]] - name = "github.com/grpc-ecosystem/go-grpc-middleware" - packages = [ - ".", - "tags", - "tracing/opentracing", - "util/metautils" - ] - revision = "c250d6563d4d4c20252cd865923440e829844f4e" - version = "v1.0.0" - -[[projects]] - name = "github.com/grpc-ecosystem/go-grpc-prometheus" - packages = ["."] - revision = "c225b8c3b01faf2899099b768856a9e916e5087b" - version = "v1.2.0" - -[[projects]] - branch = "master" - name = "github.com/juju/errors" - packages = ["."] - revision = "c7d06af17c68cd34c835053720b21f6549d9b0ee" - -[[projects]] - name = "github.com/matttproud/golang_protobuf_extensions" - packages = ["pbutil"] - revision = "c12348ce28de40eed0136aa2b644d0ee0650e56c" - version = "v1.0.1" - -[[projects]] - name = "github.com/opentracing/opentracing-go" - packages = [ - ".", - "ext", - "log" - ] - revision = "1949ddbfd147afd4d964a9f00b24eb291e0e7c38" - version = "v1.0.2" - -[[projects]] - branch = "master" - name = "github.com/petar/GoLLRB" - packages = ["llrb"] - revision = "53be0d36a84c2a886ca057d34b6aa4468df9ccb4" - -[[projects]] - branch = "master" - name = "github.com/pingcap/goleveldb" - packages = [ - "leveldb", - "leveldb/cache", - "leveldb/comparer", - "leveldb/errors", - "leveldb/filter", - "leveldb/iterator", - "leveldb/journal", - "leveldb/memdb", - "leveldb/opt", - "leveldb/storage", - "leveldb/table", - "leveldb/util" - ] - revision = "b9ff6c35079e0b7925a4028005fc2dbc37aec69a" - -[[projects]] - branch = "master" - name = "github.com/pingcap/kvproto" - packages = [ - "pkg/coprocessor", - "pkg/eraftpb", - "pkg/errorpb", - "pkg/kvrpcpb", - "pkg/metapb", - "pkg/pdpb", - "pkg/raft_serverpb", - "pkg/tikvpb" - ] - revision = "716bb0d730ba0dbc7249a5b157bef5669027ae4f" - -[[projects]] - branch = "master" - name = "github.com/pingcap/pd" - packages = ["pd-client"] - revision = "312d131fd2eee9ed3b9e217323f88b3d6ba73dc3" - -[[projects]] - name = "github.com/pingcap/tidb" - packages = [ - "config", - "kv", - "meta", - "meta/autoid", - "metrics", - "model", - "mysql", - "owner", - "parser/opcode", - "sessionctx", - "sessionctx/binloginfo", - "sessionctx/stmtctx", - "sessionctx/variable", - "store/tikv", - "store/tikv/latch", - "store/tikv/oracle", - "store/tikv/oracle/oracles", - "store/tikv/tikvrpc", - "structure", - "tablecodec", - "terror", - "types", - "types/json", - "util", - "util/auth", - "util/charset", - "util/chunk", - "util/codec", - "util/format", - "util/goroutine_pool", - "util/hack", - "util/kvcache", - "util/logutil", - "util/memory" - ] - revision = "dd37138dc0bbcf20296d9bc3972cb25e73e36797" - version = "v2.1.0-beta" - -[[projects]] - branch = "master" - name = "github.com/pingcap/tipb" - packages = [ - "go-binlog", - "go-tipb", - "sharedbytes" - ] - revision = "658ea9c14169a59084290fe68060d53ea52722a2" - -[[projects]] - name = "github.com/pkg/errors" - packages = ["."] - revision = "645ef00459ed84a119197bfb8d8205042c6df63d" - version = "v0.8.0" - -[[projects]] - name = "github.com/prometheus/client_golang" - packages = ["prometheus"] - revision = "c5b7fccd204277076155f10851dad72b76a49317" - version = "v0.8.0" - -[[projects]] - branch = "master" - name = "github.com/prometheus/client_model" - packages = ["go"] - revision = "99fa1f4be8e564e8a6b613da7fa6f46c9edafc6c" - -[[projects]] - branch = "master" - name = "github.com/prometheus/common" - packages = [ - "expfmt", - "internal/bitbucket.org/ww/goautoneg", - "model" - ] - revision = "7600349dcfe1abd18d72d3a1770870d9800a7801" - -[[projects]] - branch = "master" - name = "github.com/prometheus/procfs" - packages = [ - ".", - "internal/util", - "nfs", - "xfs" - ] - revision = "40f013a808ec4fa79def444a1a56de4d1727efcb" - -[[projects]] - name = "github.com/sirupsen/logrus" - packages = ["."] - revision = "3bcb09397d6d88e7676a9bc8433ca11ba5304837" - -[[projects]] - name = "github.com/spaolacci/murmur3" - packages = ["."] - revision = "9f5d223c60793748f04a9d5b4b4eacddfc1f755d" - version = "v1.1" - -[[projects]] - name = "github.com/twinj/uuid" - packages = ["."] - revision = "835a10bbd6bce40820349a68b1368a62c3c5617c" - version = "v1.0.0" - -[[projects]] - name = "github.com/uber/jaeger-client-go" - packages = [ - ".", - "config", - "internal/baggage", - "internal/baggage/remote", - "internal/spanlog", - "internal/throttler", - "internal/throttler/remote", - "log", - "rpcmetrics", - "thrift", - "thrift-gen/agent", - "thrift-gen/baggage", - "thrift-gen/jaeger", - "thrift-gen/sampling", - "thrift-gen/zipkincore", - "utils" - ] - revision = "b043381d944715b469fd6b37addfd30145ca1758" - version = "v2.14.0" - -[[projects]] - name = "github.com/uber/jaeger-lib" - packages = ["metrics"] - revision = "ed3a127ec5fef7ae9ea95b01b542c47fbd999ce5" - version = "v1.5.0" - -[[projects]] - branch = "master" - name = "golang.org/x/net" - packages = [ - "context", - "http/httpguts", - "http2", - "http2/hpack", - "idna", - "internal/timeseries", - "trace" - ] - revision = "ed29d75add3d7c4bf7ca65aac0c6df3d1420216f" - -[[projects]] - branch = "master" - name = "golang.org/x/sys" - packages = ["unix"] - revision = "151529c776cdc58ddbe7963ba9af779f3577b419" - -[[projects]] - name = "golang.org/x/text" - packages = [ - "collate", - "collate/build", - "encoding", - "encoding/charmap", - "encoding/internal", - "encoding/internal/identifier", - "encoding/japanese", - "encoding/korean", - "encoding/simplifiedchinese", - "encoding/traditionalchinese", - "encoding/unicode", - "internal/colltab", - "internal/gen", - "internal/tag", - "internal/triegen", - "internal/ucd", - "internal/utf8internal", - "language", - "runes", - "secure/bidirule", - "transform", - "unicode/bidi", - "unicode/cldr", - "unicode/norm", - "unicode/rangetable" - ] - revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" - version = "v0.3.0" - -[[projects]] - branch = "master" - name = "google.golang.org/genproto" - packages = [ - "googleapis/api/annotations", - "googleapis/rpc/status" - ] - revision = "ff3583edef7de132f219f0efc00e097cabcc0ec0" - -[[projects]] - name = "google.golang.org/grpc" - packages = [ - ".", - "balancer", - "balancer/base", - "balancer/roundrobin", - "codes", - "connectivity", - "credentials", - "encoding", - "encoding/proto", - "grpclog", - "health/grpc_health_v1", - "internal", - "internal/backoff", - "internal/channelz", - "internal/grpcrand", - "keepalive", - "metadata", - "naming", - "peer", - "resolver", - "resolver/dns", - "resolver/passthrough", - "stats", - "status", - "tap", - "transport" - ] - revision = "168a6198bcb0ef175f7dacec0b8691fc141dc9b8" - source = "https://github.com/grpc/grpc-go.git" - version = "v1.13.0" - -[[projects]] - name = "gopkg.in/natefinch/lumberjack.v2" - packages = ["."] - revision = "a96e63847dc3c67d17befa69c303767e2f84e54f" - version = "v2.1" - -[solve-meta] - analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "782eb7edd631e5150cdff24d23bfd2b48d45795db8f169b08b8a38ed00cc2920" - solver-name = "gps-cdcl" - solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml deleted file mode 100644 index fd9c142..0000000 --- a/Gopkg.toml +++ /dev/null @@ -1,47 +0,0 @@ -# Gopkg.toml example -# -# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html -# for detailed Gopkg.toml documentation. -# -# required = ["github.com/user/thing/cmd/thing"] -# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] -# -# [[constraint]] -# name = "github.com/user/project" -# version = "1.0.0" -# -# [[constraint]] -# name = "github.com/user/project2" -# branch = "dev" -# source = "github.com/myfork/project2" -# -# [[override]] -# name = "github.com/x/y" -# version = "2.4.0" -# -# [prune] -# non-go = false -# go-tests = true -# unused-packages = true - - -[[constraint]] - name = "github.com/go-sql-driver/mysql" - version = "1.3.0" - -[[constraint]] - name = "github.com/gorilla/mux" - version = "1.5.0" - -[[constraint]] - name = "github.com/urfave/negroni" - version = "0.2.0" - -[[constraint]] - name = "github.com/pingcap/tidb" - version = "2.1.0-beta" - -[prune] - go-tests = true - unused-packages = true - non-go = true diff --git a/Makefile b/Makefile index edea51f..4fb0a5c 100644 --- a/Makefile +++ b/Makefile @@ -7,13 +7,13 @@ build: chaos verifier chaos: rawkv tidb txnkv tidb: - go build -o bin/chaos-tidb cmd/tidb/main.go + GO111MODULE=on go build -o bin/chaos-tidb cmd/tidb/main.go rawkv: - go build -o bin/chaos-rawkv cmd/rawkv/main.go + GO111MODULE=on go build -o bin/chaos-rawkv cmd/rawkv/main.go txnkv: - go build -o bin/chaos-txnkv cmd/txnkv/main.go + GO111MODULE=on go build -o bin/chaos-txnkv cmd/txnkv/main.go verifier: - go build -o bin/chaos-verifier cmd/verifier/main.go \ No newline at end of file + GO111MODULE=on go build -o bin/chaos-verifier cmd/verifier/main.go \ No newline at end of file diff --git a/Porcupine-LICENSE b/Porcupine-LICENSE deleted file mode 120000 index 89dd03d..0000000 --- a/Porcupine-LICENSE +++ /dev/null @@ -1 +0,0 @@ -vendor/github.com/anishathalye/porcupine/LICENSE.md \ No newline at end of file diff --git a/Porcupine-LICENSE b/Porcupine-LICENSE new file mode 100644 index 0000000..6e24d72 --- /dev/null +++ b/Porcupine-LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) +===================== + +**Copyright (c) 2017-2018 Anish Athalye (me@anishathalye.com)** + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/db/tidb/bank.go b/db/tidb/bank.go index 10577d4..05b7445 100644 --- a/db/tidb/bank.go +++ b/db/tidb/bank.go @@ -11,7 +11,6 @@ import ( "time" "github.com/anishathalye/porcupine" - "github.com/juju/errors" pchecker "github.com/siddontang/chaos/pkg/check/porcupine" "github.com/siddontang/chaos/pkg/core" "github.com/siddontang/chaos/pkg/history" @@ -172,13 +171,13 @@ func (c *bankClient) DumpState(ctx context.Context) (interface{}, error) { txn, err := c.db.Begin() if err != nil { - return nil, errors.Trace(err) + return nil, err } defer txn.Rollback() rows, err := txn.QueryContext(ctx, "select balance from accounts") if err != nil { - return nil, errors.Trace(err) + return nil, err } defer rows.Close() @@ -186,7 +185,7 @@ func (c *bankClient) DumpState(ctx context.Context) (interface{}, error) { for rows.Next() { var v int64 if err = rows.Scan(&v); err != nil { - return nil, errors.Trace(err) + return nil, err } balances = append(balances, v) } diff --git a/db/tidb/multi_bank.go b/db/tidb/multi_bank.go index 5da4eef..00a0dfd 100644 --- a/db/tidb/multi_bank.go +++ b/db/tidb/multi_bank.go @@ -8,7 +8,6 @@ import ( "math/rand" "time" - "github.com/juju/errors" "github.com/siddontang/chaos/pkg/core" ) @@ -158,7 +157,7 @@ func (c *multiBankClient) DumpState(ctx context.Context) (interface{}, error) { txn, err := c.db.Begin() if err != nil { - return nil, errors.Trace(err) + return nil, err } defer txn.Rollback() diff --git a/docker/control/Dockerfile b/docker/control/Dockerfile index 4db3f0d..4417c7f 100644 --- a/docker/control/Dockerfile +++ b/docker/control/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.10 +FROM golang:1.11 MAINTAINER siddontang@gmail.com RUN apt-get -y -q update && \ @@ -8,7 +8,7 @@ RUN apt-get -y -q update && \ git \ gnuplot \ wget \ - vim # not required by chaos itself, just for ease of use + less vim # not required by chaos itself, just for ease of use # You need to locate chaos in this directory (up.sh does that automatically) ADD chaos /go/src/github.com/siddontang/chaos diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..7c436cc --- /dev/null +++ b/go.mod @@ -0,0 +1,16 @@ +module github.com/siddontang/chaos + +require ( + github.com/anishathalye/porcupine v0.0.0-20180912012540-c95d370e6abb + github.com/coreos/bbolt v1.3.1-coreos.6 // indirect + github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 // indirect + github.com/go-sql-driver/mysql v1.4.1 + github.com/pingcap/kvproto v0.0.0-20181130084342-6bbef21532da // indirect + github.com/pingcap/tidb v0.0.0-20181203021530-741adcee43e2 + github.com/pingcap/tipb v0.0.0-20181126132056-a7fd2aaa9719 // indirect + github.com/prometheus/client_golang v0.9.1 // indirect + github.com/prometheus/common v0.0.0-20181126121408-4724e9255275 // indirect + github.com/prometheus/procfs v0.0.0-20181129180645-aa55a523dc0a // indirect + golang.org/x/net v0.0.0-20181201002055-351d144fa1fc // indirect + golang.org/x/sync v0.0.0-20181108010431-42b317875d0f // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..d05bd0e --- /dev/null +++ b/go.sum @@ -0,0 +1,176 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/StackExchange/wmi v0.0.0-20180725035823-b12b22c5341f h1:5ZfJxyXo8KyX8DgGXC5B7ILL8y51fci/qYz2B4j8iLY= +github.com/StackExchange/wmi v0.0.0-20180725035823-b12b22c5341f/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/anishathalye/porcupine v0.0.0-20180912012540-c95d370e6abb h1:m7AZO1q3bHOBd8tr9ME99PLKC+37pKGvnj9npmiRwp4= +github.com/anishathalye/porcupine v0.0.0-20180912012540-c95d370e6abb/go.mod h1:FTYUM6ZeF0TIVWODQgFV5mEwQLdfF2IiPICYgN+unJM= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/blacktear23/go-proxyprotocol v0.0.0-20171102103907-62e368e1c470/go.mod h1:VKt7CNAQxpFpSDz3sXyj9hY/GbVsQCr0sB3w59nE7lU= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/coreos/bbolt v1.3.0/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/bbolt v1.3.1-coreos.6/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible h1:KjVWqrZ5U0wa3CxY2AxlH6/UcB+PK2td1DcsYhA+HRs= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20181031085051-9002847aa142 h1:3jFq2xL4ZajGK4aZY8jz+DAF0FHjI51BXjjSwCzS1Dk= +github.com/coreos/go-systemd v0.0.0-20181031085051-9002847aa142/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cznic/mathutil v0.0.0-20181021201202-eba54fb065b7/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM= +github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM= +github.com/cznic/sortutil v0.0.0-20150617083342-4c7342852e65 h1:hxuZop6tSoOi0sxFzoGGYdRqNrPubyaIf9KoBG9tPiE= +github.com/cznic/sortutil v0.0.0-20150617083342-4c7342852e65/go.mod h1:q2w6Bg5jeox1B+QkJ6Wp/+Vn0G/bo3f1uY7Fn3vivIQ= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385 h1:clC1lXBpe2kTj2VHdaIu9ajZQe4kcEY9j0NsnDDBZ3o= +github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= +github.com/etcd-io/gofail v0.0.0-20180808172546-51ce9a71510a h1:QNEenQIsGDEEfFNSnN+h6hE1OwnHqTg7Dl9gEk1Cko4= +github.com/etcd-io/gofail v0.0.0-20180808172546-51ce9a71510a/go.mod h1:49H/RkXP8pKaZy4h0d+NW16rSLhyVBt4o6VLJbmOqDE= +github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= +github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-sql-driver/mysql v0.0.0-20170715192408-3955978caca4/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20181024230925-c65c006176ff h1:kOkM9whyQYodu09SJ6W3NCsHG7crFaJILQ22Gozp3lg= +github.com/golang/groupcache v0.0.0-20181024230925-c65c006176ff/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/mux v1.6.2 h1:Pgr17XVTNXAk3q/r4CpKzC5xBM/qW1uVLV+IhRZpIIk= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.5.1 h1:3scN4iuXkNOyP98jF55Lv8a9j1o/IwvnDIZ0LHJK1nk= +github.com/grpc-ecosystem/grpc-gateway v1.5.1/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5 h1:2U0HzY8BJ8hVwDKIzp7y4voR9CX/nvcfymLmg2UiOio= +github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/montanaflynn/stats v0.0.0-20180911141734-db72e6cae808 h1:pmpDGKLw4n82EtrNiLqB+xSz/JQwFOaZuMALYUHwX5s= +github.com/montanaflynn/stats v0.0.0-20180911141734-db72e6cae808/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/myesui/uuid v1.0.0 h1:xCBmH4l5KuvLYc5L7AS7SZg9/jKdIFubM7OVoLqaQUI= +github.com/myesui/uuid v1.0.0/go.mod h1:2CDfNgU0LR8mIdO8vdWd8i9gWWxLlcoIGGpSNgafq84= +github.com/ngaut/pools v0.0.0-20180318154953-b7bc8c42aac7 h1:7KAv7KMGTTqSmYZtNdcNTgsos+vFzULLwyElndwn+5c= +github.com/ngaut/pools v0.0.0-20180318154953-b7bc8c42aac7/go.mod h1:iWMfgwqYW+e8n5lC/jjNEhwcjbRDpl5NT7n2h+4UNcI= +github.com/ngaut/sync2 v0.0.0-20141008032647-7a24ed77b2ef h1:K0Fn+DoFqNqktdZtdV3bPQ/0cuYh2H4rkg0tytX/07k= +github.com/ngaut/sync2 v0.0.0-20141008032647-7a24ed77b2ef/go.mod h1:7WjlapSfwQyo6LNmIvEWzsW1hbBQfpUO4JWnuQRmva8= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/opentracing/basictracer-go v1.0.0 h1:YyUAhaEfjoWXclZVJ9sGoNct7j4TVk7lZWlQw5UXuoo= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= +github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/pingcap/check v0.0.0-20171206051426-1c287c953996 h1:ZBdiJCMan6GSo/aPAM7gywcUKa0z58gczVrnG6TQnAQ= +github.com/pingcap/check v0.0.0-20171206051426-1c287c953996/go.mod h1:B1+S9LNcuMyLH/4HMTViQOJevkGiik3wW2AN9zb2fNQ= +github.com/pingcap/errors v0.11.0/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= +github.com/pingcap/goleveldb v0.0.0-20171020122428-b9ff6c35079e/go.mod h1:O17XtbryoCJhkKGbT62+L2OlrniwqiGLSqrmdHCMzZw= +github.com/pingcap/kvproto v0.0.0-20181105061835-1b5d69cd1d26/go.mod h1:0gwbe1F2iBIjuQ9AH0DbQhL+Dpr5GofU8fgYyXk+ykk= +github.com/pingcap/kvproto v0.0.0-20181130084342-6bbef21532da h1:fZHOC3Nzse+WSLtuetndHfAn97m4TKnnxy2/o/lU9qw= +github.com/pingcap/kvproto v0.0.0-20181130084342-6bbef21532da/go.mod h1:0gwbe1F2iBIjuQ9AH0DbQhL+Dpr5GofU8fgYyXk+ykk= +github.com/pingcap/parser v0.0.0-20181126111651-a38036a60de7/go.mod h1:1FNvfp9+J0wvc4kl8eGNh7Rqrxveg15jJoWo/a0uHwA= +github.com/pingcap/pd v2.1.0-rc.4+incompatible h1:/buwGk04aHO5odk/+O8ZOXGs4qkUjYTJ2UpCJXna8NE= +github.com/pingcap/pd v2.1.0-rc.4+incompatible/go.mod h1:nD3+EoYes4+aNNODO99ES59V83MZSI+dFbhyr667a0E= +github.com/pingcap/tidb v0.0.0-20181203021530-741adcee43e2 h1:A95bj50yYZMa1z655BmojZWKAu1zC3FONdSrfN9s8k0= +github.com/pingcap/tidb v0.0.0-20181203021530-741adcee43e2/go.mod h1:xn+3XVdDK//tvavk1V5iNfEDq7dI3klo1xvCiFgBOLs= +github.com/pingcap/tidb-tools v0.0.0-20181112132202-4860a0d5de03 h1:xVuo5U+l6XAWHsb+xhkZ8zz3jerIwDfCHAO6kR2Kaog= +github.com/pingcap/tidb-tools v0.0.0-20181112132202-4860a0d5de03/go.mod h1:XGdcy9+yqlDSEMTpOXnwf3hiTeqrV6MN/u1se9N8yIM= +github.com/pingcap/tipb v0.0.0-20181012112600-11e33c750323/go.mod h1:RtkHW8WbcNxj8lsbzjaILci01CtYnYbIkQhjyZWrWVI= +github.com/pingcap/tipb v0.0.0-20181126132056-a7fd2aaa9719/go.mod h1:RtkHW8WbcNxj8lsbzjaILci01CtYnYbIkQhjyZWrWVI= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v0.9.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.1 h1:K47Rk0v/fkEfwfQet2KWhscE0cJzjgCCDBG2KHZoVno= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f05m9MGOsuEi1ATq9shN03HrxNkD/luQvxCv8= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/common v0.0.0-20181020173914-7e9e6cabbd39/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.0.0-20181126121408-4724e9255275 h1:PnBWHBf+6L0jOqq0gIVUe6Yk0/QMZ640k6NvkxcBf+8= +github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20181129180645-aa55a523dc0a h1:Z2GBQ7wAiTCixJhSGK4sMO/FHYlvFvUBBK0M0FSsxeU= +github.com/prometheus/procfs v0.0.0-20181129180645-aa55a523dc0a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= +github.com/shirou/gopsutil v2.18.10+incompatible h1:cy84jW6EVRPa5g9HAHrlbxMSIjBhDSX0OFYyMYminYs= +github.com/shirou/gopsutil v2.18.10+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= +github.com/shurcooL/vfsgen v0.0.0-20181020040650-a97a25d856ca/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/tiancaiamao/appdash v0.0.0-20181126055449-889f96f722a2/go.mod h1:2PfKggNGDuadAa0LElHrByyrz4JPZ9fFx6Gs7nx7ZZU= +github.com/tmc/grpc-websocket-proxy v0.0.0-20171017195756-830351dc03c6/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/twinj/uuid v1.0.0/go.mod h1:mMgcE1RHFUFqe5AfiwlINXisXfDGro23fWdPUfOMjRY= +github.com/uber-go/atomic v1.3.2 h1:Azu9lPBWRNKzYXSIwRfgRuDuS0YKsK4NFhiQv98gkxo= +github.com/uber-go/atomic v1.3.2/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g= +github.com/uber/jaeger-client-go v2.15.0+incompatible h1:NP3qsSqNxh8VYr956ur1N/1C1PjvOJnJykCzcD5QHbk= +github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v1.5.0/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/ugorji/go/codec v0.0.0-20181127175209-856da096dbdf h1:BLcwkDfQ8QPXNXBApZUATvuigovcYPXkHzez80QFGNg= +github.com/ugorji/go/codec v0.0.0-20181127175209-856da096dbdf/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/unrolled/render v0.0.0-20180914162206-b9786414de4d h1:ggUgChAeyge4NZ4QUw6lhHsVymzwSDJOZcE0s2X8S20= +github.com/unrolled/render v0.0.0-20180914162206-b9786414de4d/go.mod h1:tu82oB5W2ykJRVioYsB+IQKcft7ryBr7w12qMBUPyXg= +github.com/xiang90/probing v0.0.0-20160813154853-07dd2e8dfe18/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/zap v1.9.1 h1:XCJQEf3W6eZaVwhRBof6ImoYGJSITeKWsyeh3HFu/5o= +go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc h1:a3CU5tJYVj92DY2LaA1kUkrsqD5/3mLDhx2NcNqyW+0= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c h1:fqgJT0MGcGpPgpWU7VRdRjuArfcOvC4AoJmILihzhDg= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +google.golang.org/appengine v1.1.0 h1:igQkv0AAhEIvTEpD5LIpAfav2eeVO9HBTjvKHVJPRSs= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= +gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= +gopkg.in/stretchr/testify.v1 v1.2.2 h1:yhQC6Uy5CqibAIlk1wlusa/MJ3iAN49/BsR/dCCKz3M= +gopkg.in/stretchr/testify.v1 v1.2.2/go.mod h1:QI5V/q6UbPmuhtm10CaFZxED9NreB8PnFYN9JcR6TxU= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +sourcegraph.com/sourcegraph/appdash v0.0.0-20180531100431-4c381bd170b4 h1:VO9oZbbkvTwqLimlQt15QNdOOBArT2dw/bvzsMZBiqQ= +sourcegraph.com/sourcegraph/appdash v0.0.0-20180531100431-4c381bd170b4/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= +sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67/go.mod h1:L5q+DGLGOQFpo1snNEkLOJT2d1YTW66rWNzatr3He1k= diff --git a/pkg/check/porcupine/porcupine.go b/pkg/check/porcupine/porcupine.go index e3c63fa..8e858e1 100644 --- a/pkg/check/porcupine/porcupine.go +++ b/pkg/check/porcupine/porcupine.go @@ -1,10 +1,9 @@ package porcupine import ( + "fmt" "log" - "github.com/pkg/errors" - "github.com/anishathalye/porcupine" "github.com/siddontang/chaos/pkg/core" ) @@ -36,7 +35,7 @@ func (Checker) Name() string { // ConvertOperationsToEvents converts core.Operations to porcupine.Event. func ConvertOperationsToEvents(ops []core.Operation) ([]porcupine.Event, error) { if len(ops)%2 != 0 { - return nil, errors.New("history is not complete") + return nil, fmt.Errorf("history is not complete") } procID := map[int64]uint{} @@ -69,7 +68,7 @@ func ConvertOperationsToEvents(ops []core.Operation) ([]porcupine.Event, error) } if len(procID) != 0 { - return nil, errors.New("history is not complete") + return nil, fmt.Errorf("history is not complete") } return events, nil diff --git a/vendor/github.com/BurntSushi/toml/COPYING b/vendor/github.com/BurntSushi/toml/COPYING deleted file mode 100644 index 01b5743..0000000 --- a/vendor/github.com/BurntSushi/toml/COPYING +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013 TOML authors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/github.com/BurntSushi/toml/cmd/toml-test-decoder/COPYING b/vendor/github.com/BurntSushi/toml/cmd/toml-test-decoder/COPYING deleted file mode 100644 index 5a8e332..0000000 --- a/vendor/github.com/BurntSushi/toml/cmd/toml-test-decoder/COPYING +++ /dev/null @@ -1,14 +0,0 @@ - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - Version 2, December 2004 - - Copyright (C) 2004 Sam Hocevar - - Everyone is permitted to copy and distribute verbatim or modified - copies of this license document, and changing it is allowed as long - as the name is changed. - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. You just DO WHAT THE FUCK YOU WANT TO. - diff --git a/vendor/github.com/BurntSushi/toml/cmd/toml-test-encoder/COPYING b/vendor/github.com/BurntSushi/toml/cmd/toml-test-encoder/COPYING deleted file mode 100644 index 5a8e332..0000000 --- a/vendor/github.com/BurntSushi/toml/cmd/toml-test-encoder/COPYING +++ /dev/null @@ -1,14 +0,0 @@ - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - Version 2, December 2004 - - Copyright (C) 2004 Sam Hocevar - - Everyone is permitted to copy and distribute verbatim or modified - copies of this license document, and changing it is allowed as long - as the name is changed. - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. You just DO WHAT THE FUCK YOU WANT TO. - diff --git a/vendor/github.com/BurntSushi/toml/cmd/tomlv/COPYING b/vendor/github.com/BurntSushi/toml/cmd/tomlv/COPYING deleted file mode 100644 index 5a8e332..0000000 --- a/vendor/github.com/BurntSushi/toml/cmd/tomlv/COPYING +++ /dev/null @@ -1,14 +0,0 @@ - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - Version 2, December 2004 - - Copyright (C) 2004 Sam Hocevar - - Everyone is permitted to copy and distribute verbatim or modified - copies of this license document, and changing it is allowed as long - as the name is changed. - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. You just DO WHAT THE FUCK YOU WANT TO. - diff --git a/vendor/github.com/BurntSushi/toml/decode.go b/vendor/github.com/BurntSushi/toml/decode.go deleted file mode 100644 index b0fd51d..0000000 --- a/vendor/github.com/BurntSushi/toml/decode.go +++ /dev/null @@ -1,509 +0,0 @@ -package toml - -import ( - "fmt" - "io" - "io/ioutil" - "math" - "reflect" - "strings" - "time" -) - -func e(format string, args ...interface{}) error { - return fmt.Errorf("toml: "+format, args...) -} - -// Unmarshaler is the interface implemented by objects that can unmarshal a -// TOML description of themselves. -type Unmarshaler interface { - UnmarshalTOML(interface{}) error -} - -// Unmarshal decodes the contents of `p` in TOML format into a pointer `v`. -func Unmarshal(p []byte, v interface{}) error { - _, err := Decode(string(p), v) - return err -} - -// Primitive is a TOML value that hasn't been decoded into a Go value. -// When using the various `Decode*` functions, the type `Primitive` may -// be given to any value, and its decoding will be delayed. -// -// A `Primitive` value can be decoded using the `PrimitiveDecode` function. -// -// The underlying representation of a `Primitive` value is subject to change. -// Do not rely on it. -// -// N.B. Primitive values are still parsed, so using them will only avoid -// the overhead of reflection. They can be useful when you don't know the -// exact type of TOML data until run time. -type Primitive struct { - undecoded interface{} - context Key -} - -// DEPRECATED! -// -// Use MetaData.PrimitiveDecode instead. -func PrimitiveDecode(primValue Primitive, v interface{}) error { - md := MetaData{decoded: make(map[string]bool)} - return md.unify(primValue.undecoded, rvalue(v)) -} - -// PrimitiveDecode is just like the other `Decode*` functions, except it -// decodes a TOML value that has already been parsed. Valid primitive values -// can *only* be obtained from values filled by the decoder functions, -// including this method. (i.e., `v` may contain more `Primitive` -// values.) -// -// Meta data for primitive values is included in the meta data returned by -// the `Decode*` functions with one exception: keys returned by the Undecoded -// method will only reflect keys that were decoded. Namely, any keys hidden -// behind a Primitive will be considered undecoded. Executing this method will -// update the undecoded keys in the meta data. (See the example.) -func (md *MetaData) PrimitiveDecode(primValue Primitive, v interface{}) error { - md.context = primValue.context - defer func() { md.context = nil }() - return md.unify(primValue.undecoded, rvalue(v)) -} - -// Decode will decode the contents of `data` in TOML format into a pointer -// `v`. -// -// TOML hashes correspond to Go structs or maps. (Dealer's choice. They can be -// used interchangeably.) -// -// TOML arrays of tables correspond to either a slice of structs or a slice -// of maps. -// -// TOML datetimes correspond to Go `time.Time` values. -// -// All other TOML types (float, string, int, bool and array) correspond -// to the obvious Go types. -// -// An exception to the above rules is if a type implements the -// encoding.TextUnmarshaler interface. In this case, any primitive TOML value -// (floats, strings, integers, booleans and datetimes) will be converted to -// a byte string and given to the value's UnmarshalText method. See the -// Unmarshaler example for a demonstration with time duration strings. -// -// Key mapping -// -// TOML keys can map to either keys in a Go map or field names in a Go -// struct. The special `toml` struct tag may be used to map TOML keys to -// struct fields that don't match the key name exactly. (See the example.) -// A case insensitive match to struct names will be tried if an exact match -// can't be found. -// -// The mapping between TOML values and Go values is loose. That is, there -// may exist TOML values that cannot be placed into your representation, and -// there may be parts of your representation that do not correspond to -// TOML values. This loose mapping can be made stricter by using the IsDefined -// and/or Undecoded methods on the MetaData returned. -// -// This decoder will not handle cyclic types. If a cyclic type is passed, -// `Decode` will not terminate. -func Decode(data string, v interface{}) (MetaData, error) { - rv := reflect.ValueOf(v) - if rv.Kind() != reflect.Ptr { - return MetaData{}, e("Decode of non-pointer %s", reflect.TypeOf(v)) - } - if rv.IsNil() { - return MetaData{}, e("Decode of nil %s", reflect.TypeOf(v)) - } - p, err := parse(data) - if err != nil { - return MetaData{}, err - } - md := MetaData{ - p.mapping, p.types, p.ordered, - make(map[string]bool, len(p.ordered)), nil, - } - return md, md.unify(p.mapping, indirect(rv)) -} - -// DecodeFile is just like Decode, except it will automatically read the -// contents of the file at `fpath` and decode it for you. -func DecodeFile(fpath string, v interface{}) (MetaData, error) { - bs, err := ioutil.ReadFile(fpath) - if err != nil { - return MetaData{}, err - } - return Decode(string(bs), v) -} - -// DecodeReader is just like Decode, except it will consume all bytes -// from the reader and decode it for you. -func DecodeReader(r io.Reader, v interface{}) (MetaData, error) { - bs, err := ioutil.ReadAll(r) - if err != nil { - return MetaData{}, err - } - return Decode(string(bs), v) -} - -// unify performs a sort of type unification based on the structure of `rv`, -// which is the client representation. -// -// Any type mismatch produces an error. Finding a type that we don't know -// how to handle produces an unsupported type error. -func (md *MetaData) unify(data interface{}, rv reflect.Value) error { - - // Special case. Look for a `Primitive` value. - if rv.Type() == reflect.TypeOf((*Primitive)(nil)).Elem() { - // Save the undecoded data and the key context into the primitive - // value. - context := make(Key, len(md.context)) - copy(context, md.context) - rv.Set(reflect.ValueOf(Primitive{ - undecoded: data, - context: context, - })) - return nil - } - - // Special case. Unmarshaler Interface support. - if rv.CanAddr() { - if v, ok := rv.Addr().Interface().(Unmarshaler); ok { - return v.UnmarshalTOML(data) - } - } - - // Special case. Handle time.Time values specifically. - // TODO: Remove this code when we decide to drop support for Go 1.1. - // This isn't necessary in Go 1.2 because time.Time satisfies the encoding - // interfaces. - if rv.Type().AssignableTo(rvalue(time.Time{}).Type()) { - return md.unifyDatetime(data, rv) - } - - // Special case. Look for a value satisfying the TextUnmarshaler interface. - if v, ok := rv.Interface().(TextUnmarshaler); ok { - return md.unifyText(data, v) - } - // BUG(burntsushi) - // The behavior here is incorrect whenever a Go type satisfies the - // encoding.TextUnmarshaler interface but also corresponds to a TOML - // hash or array. In particular, the unmarshaler should only be applied - // to primitive TOML values. But at this point, it will be applied to - // all kinds of values and produce an incorrect error whenever those values - // are hashes or arrays (including arrays of tables). - - k := rv.Kind() - - // laziness - if k >= reflect.Int && k <= reflect.Uint64 { - return md.unifyInt(data, rv) - } - switch k { - case reflect.Ptr: - elem := reflect.New(rv.Type().Elem()) - err := md.unify(data, reflect.Indirect(elem)) - if err != nil { - return err - } - rv.Set(elem) - return nil - case reflect.Struct: - return md.unifyStruct(data, rv) - case reflect.Map: - return md.unifyMap(data, rv) - case reflect.Array: - return md.unifyArray(data, rv) - case reflect.Slice: - return md.unifySlice(data, rv) - case reflect.String: - return md.unifyString(data, rv) - case reflect.Bool: - return md.unifyBool(data, rv) - case reflect.Interface: - // we only support empty interfaces. - if rv.NumMethod() > 0 { - return e("unsupported type %s", rv.Type()) - } - return md.unifyAnything(data, rv) - case reflect.Float32: - fallthrough - case reflect.Float64: - return md.unifyFloat64(data, rv) - } - return e("unsupported type %s", rv.Kind()) -} - -func (md *MetaData) unifyStruct(mapping interface{}, rv reflect.Value) error { - tmap, ok := mapping.(map[string]interface{}) - if !ok { - if mapping == nil { - return nil - } - return e("type mismatch for %s: expected table but found %T", - rv.Type().String(), mapping) - } - - for key, datum := range tmap { - var f *field - fields := cachedTypeFields(rv.Type()) - for i := range fields { - ff := &fields[i] - if ff.name == key { - f = ff - break - } - if f == nil && strings.EqualFold(ff.name, key) { - f = ff - } - } - if f != nil { - subv := rv - for _, i := range f.index { - subv = indirect(subv.Field(i)) - } - if isUnifiable(subv) { - md.decoded[md.context.add(key).String()] = true - md.context = append(md.context, key) - if err := md.unify(datum, subv); err != nil { - return err - } - md.context = md.context[0 : len(md.context)-1] - } else if f.name != "" { - // Bad user! No soup for you! - return e("cannot write unexported field %s.%s", - rv.Type().String(), f.name) - } - } - } - return nil -} - -func (md *MetaData) unifyMap(mapping interface{}, rv reflect.Value) error { - tmap, ok := mapping.(map[string]interface{}) - if !ok { - if tmap == nil { - return nil - } - return badtype("map", mapping) - } - if rv.IsNil() { - rv.Set(reflect.MakeMap(rv.Type())) - } - for k, v := range tmap { - md.decoded[md.context.add(k).String()] = true - md.context = append(md.context, k) - - rvkey := indirect(reflect.New(rv.Type().Key())) - rvval := reflect.Indirect(reflect.New(rv.Type().Elem())) - if err := md.unify(v, rvval); err != nil { - return err - } - md.context = md.context[0 : len(md.context)-1] - - rvkey.SetString(k) - rv.SetMapIndex(rvkey, rvval) - } - return nil -} - -func (md *MetaData) unifyArray(data interface{}, rv reflect.Value) error { - datav := reflect.ValueOf(data) - if datav.Kind() != reflect.Slice { - if !datav.IsValid() { - return nil - } - return badtype("slice", data) - } - sliceLen := datav.Len() - if sliceLen != rv.Len() { - return e("expected array length %d; got TOML array of length %d", - rv.Len(), sliceLen) - } - return md.unifySliceArray(datav, rv) -} - -func (md *MetaData) unifySlice(data interface{}, rv reflect.Value) error { - datav := reflect.ValueOf(data) - if datav.Kind() != reflect.Slice { - if !datav.IsValid() { - return nil - } - return badtype("slice", data) - } - n := datav.Len() - if rv.IsNil() || rv.Cap() < n { - rv.Set(reflect.MakeSlice(rv.Type(), n, n)) - } - rv.SetLen(n) - return md.unifySliceArray(datav, rv) -} - -func (md *MetaData) unifySliceArray(data, rv reflect.Value) error { - sliceLen := data.Len() - for i := 0; i < sliceLen; i++ { - v := data.Index(i).Interface() - sliceval := indirect(rv.Index(i)) - if err := md.unify(v, sliceval); err != nil { - return err - } - } - return nil -} - -func (md *MetaData) unifyDatetime(data interface{}, rv reflect.Value) error { - if _, ok := data.(time.Time); ok { - rv.Set(reflect.ValueOf(data)) - return nil - } - return badtype("time.Time", data) -} - -func (md *MetaData) unifyString(data interface{}, rv reflect.Value) error { - if s, ok := data.(string); ok { - rv.SetString(s) - return nil - } - return badtype("string", data) -} - -func (md *MetaData) unifyFloat64(data interface{}, rv reflect.Value) error { - if num, ok := data.(float64); ok { - switch rv.Kind() { - case reflect.Float32: - fallthrough - case reflect.Float64: - rv.SetFloat(num) - default: - panic("bug") - } - return nil - } - return badtype("float", data) -} - -func (md *MetaData) unifyInt(data interface{}, rv reflect.Value) error { - if num, ok := data.(int64); ok { - if rv.Kind() >= reflect.Int && rv.Kind() <= reflect.Int64 { - switch rv.Kind() { - case reflect.Int, reflect.Int64: - // No bounds checking necessary. - case reflect.Int8: - if num < math.MinInt8 || num > math.MaxInt8 { - return e("value %d is out of range for int8", num) - } - case reflect.Int16: - if num < math.MinInt16 || num > math.MaxInt16 { - return e("value %d is out of range for int16", num) - } - case reflect.Int32: - if num < math.MinInt32 || num > math.MaxInt32 { - return e("value %d is out of range for int32", num) - } - } - rv.SetInt(num) - } else if rv.Kind() >= reflect.Uint && rv.Kind() <= reflect.Uint64 { - unum := uint64(num) - switch rv.Kind() { - case reflect.Uint, reflect.Uint64: - // No bounds checking necessary. - case reflect.Uint8: - if num < 0 || unum > math.MaxUint8 { - return e("value %d is out of range for uint8", num) - } - case reflect.Uint16: - if num < 0 || unum > math.MaxUint16 { - return e("value %d is out of range for uint16", num) - } - case reflect.Uint32: - if num < 0 || unum > math.MaxUint32 { - return e("value %d is out of range for uint32", num) - } - } - rv.SetUint(unum) - } else { - panic("unreachable") - } - return nil - } - return badtype("integer", data) -} - -func (md *MetaData) unifyBool(data interface{}, rv reflect.Value) error { - if b, ok := data.(bool); ok { - rv.SetBool(b) - return nil - } - return badtype("boolean", data) -} - -func (md *MetaData) unifyAnything(data interface{}, rv reflect.Value) error { - rv.Set(reflect.ValueOf(data)) - return nil -} - -func (md *MetaData) unifyText(data interface{}, v TextUnmarshaler) error { - var s string - switch sdata := data.(type) { - case TextMarshaler: - text, err := sdata.MarshalText() - if err != nil { - return err - } - s = string(text) - case fmt.Stringer: - s = sdata.String() - case string: - s = sdata - case bool: - s = fmt.Sprintf("%v", sdata) - case int64: - s = fmt.Sprintf("%d", sdata) - case float64: - s = fmt.Sprintf("%f", sdata) - default: - return badtype("primitive (string-like)", data) - } - if err := v.UnmarshalText([]byte(s)); err != nil { - return err - } - return nil -} - -// rvalue returns a reflect.Value of `v`. All pointers are resolved. -func rvalue(v interface{}) reflect.Value { - return indirect(reflect.ValueOf(v)) -} - -// indirect returns the value pointed to by a pointer. -// Pointers are followed until the value is not a pointer. -// New values are allocated for each nil pointer. -// -// An exception to this rule is if the value satisfies an interface of -// interest to us (like encoding.TextUnmarshaler). -func indirect(v reflect.Value) reflect.Value { - if v.Kind() != reflect.Ptr { - if v.CanSet() { - pv := v.Addr() - if _, ok := pv.Interface().(TextUnmarshaler); ok { - return pv - } - } - return v - } - if v.IsNil() { - v.Set(reflect.New(v.Type().Elem())) - } - return indirect(reflect.Indirect(v)) -} - -func isUnifiable(rv reflect.Value) bool { - if rv.CanSet() { - return true - } - if _, ok := rv.Interface().(TextUnmarshaler); ok { - return true - } - return false -} - -func badtype(expected string, data interface{}) error { - return e("cannot load TOML value of type %T into a Go %s", data, expected) -} diff --git a/vendor/github.com/BurntSushi/toml/decode_meta.go b/vendor/github.com/BurntSushi/toml/decode_meta.go deleted file mode 100644 index b9914a6..0000000 --- a/vendor/github.com/BurntSushi/toml/decode_meta.go +++ /dev/null @@ -1,121 +0,0 @@ -package toml - -import "strings" - -// MetaData allows access to meta information about TOML data that may not -// be inferrable via reflection. In particular, whether a key has been defined -// and the TOML type of a key. -type MetaData struct { - mapping map[string]interface{} - types map[string]tomlType - keys []Key - decoded map[string]bool - context Key // Used only during decoding. -} - -// IsDefined returns true if the key given exists in the TOML data. The key -// should be specified hierarchially. e.g., -// -// // access the TOML key 'a.b.c' -// IsDefined("a", "b", "c") -// -// IsDefined will return false if an empty key given. Keys are case sensitive. -func (md *MetaData) IsDefined(key ...string) bool { - if len(key) == 0 { - return false - } - - var hash map[string]interface{} - var ok bool - var hashOrVal interface{} = md.mapping - for _, k := range key { - if hash, ok = hashOrVal.(map[string]interface{}); !ok { - return false - } - if hashOrVal, ok = hash[k]; !ok { - return false - } - } - return true -} - -// Type returns a string representation of the type of the key specified. -// -// Type will return the empty string if given an empty key or a key that -// does not exist. Keys are case sensitive. -func (md *MetaData) Type(key ...string) string { - fullkey := strings.Join(key, ".") - if typ, ok := md.types[fullkey]; ok { - return typ.typeString() - } - return "" -} - -// Key is the type of any TOML key, including key groups. Use (MetaData).Keys -// to get values of this type. -type Key []string - -func (k Key) String() string { - return strings.Join(k, ".") -} - -func (k Key) maybeQuotedAll() string { - var ss []string - for i := range k { - ss = append(ss, k.maybeQuoted(i)) - } - return strings.Join(ss, ".") -} - -func (k Key) maybeQuoted(i int) string { - quote := false - for _, c := range k[i] { - if !isBareKeyChar(c) { - quote = true - break - } - } - if quote { - return "\"" + strings.Replace(k[i], "\"", "\\\"", -1) + "\"" - } - return k[i] -} - -func (k Key) add(piece string) Key { - newKey := make(Key, len(k)+1) - copy(newKey, k) - newKey[len(k)] = piece - return newKey -} - -// Keys returns a slice of every key in the TOML data, including key groups. -// Each key is itself a slice, where the first element is the top of the -// hierarchy and the last is the most specific. -// -// The list will have the same order as the keys appeared in the TOML data. -// -// All keys returned are non-empty. -func (md *MetaData) Keys() []Key { - return md.keys -} - -// Undecoded returns all keys that have not been decoded in the order in which -// they appear in the original TOML document. -// -// This includes keys that haven't been decoded because of a Primitive value. -// Once the Primitive value is decoded, the keys will be considered decoded. -// -// Also note that decoding into an empty interface will result in no decoding, -// and so no keys will be considered decoded. -// -// In this sense, the Undecoded keys correspond to keys in the TOML document -// that do not have a concrete type in your representation. -func (md *MetaData) Undecoded() []Key { - undecoded := make([]Key, 0, len(md.keys)) - for _, key := range md.keys { - if !md.decoded[key.String()] { - undecoded = append(undecoded, key) - } - } - return undecoded -} diff --git a/vendor/github.com/BurntSushi/toml/doc.go b/vendor/github.com/BurntSushi/toml/doc.go deleted file mode 100644 index b371f39..0000000 --- a/vendor/github.com/BurntSushi/toml/doc.go +++ /dev/null @@ -1,27 +0,0 @@ -/* -Package toml provides facilities for decoding and encoding TOML configuration -files via reflection. There is also support for delaying decoding with -the Primitive type, and querying the set of keys in a TOML document with the -MetaData type. - -The specification implemented: https://github.com/toml-lang/toml - -The sub-command github.com/BurntSushi/toml/cmd/tomlv can be used to verify -whether a file is a valid TOML document. It can also be used to print the -type of each key in a TOML document. - -Testing - -There are two important types of tests used for this package. The first is -contained inside '*_test.go' files and uses the standard Go unit testing -framework. These tests are primarily devoted to holistically testing the -decoder and encoder. - -The second type of testing is used to verify the implementation's adherence -to the TOML specification. These tests have been factored into their own -project: https://github.com/BurntSushi/toml-test - -The reason the tests are in a separate project is so that they can be used by -any implementation of TOML. Namely, it is language agnostic. -*/ -package toml diff --git a/vendor/github.com/BurntSushi/toml/encode.go b/vendor/github.com/BurntSushi/toml/encode.go deleted file mode 100644 index d905c21..0000000 --- a/vendor/github.com/BurntSushi/toml/encode.go +++ /dev/null @@ -1,568 +0,0 @@ -package toml - -import ( - "bufio" - "errors" - "fmt" - "io" - "reflect" - "sort" - "strconv" - "strings" - "time" -) - -type tomlEncodeError struct{ error } - -var ( - errArrayMixedElementTypes = errors.New( - "toml: cannot encode array with mixed element types") - errArrayNilElement = errors.New( - "toml: cannot encode array with nil element") - errNonString = errors.New( - "toml: cannot encode a map with non-string key type") - errAnonNonStruct = errors.New( - "toml: cannot encode an anonymous field that is not a struct") - errArrayNoTable = errors.New( - "toml: TOML array element cannot contain a table") - errNoKey = errors.New( - "toml: top-level values must be Go maps or structs") - errAnything = errors.New("") // used in testing -) - -var quotedReplacer = strings.NewReplacer( - "\t", "\\t", - "\n", "\\n", - "\r", "\\r", - "\"", "\\\"", - "\\", "\\\\", -) - -// Encoder controls the encoding of Go values to a TOML document to some -// io.Writer. -// -// The indentation level can be controlled with the Indent field. -type Encoder struct { - // A single indentation level. By default it is two spaces. - Indent string - - // hasWritten is whether we have written any output to w yet. - hasWritten bool - w *bufio.Writer -} - -// NewEncoder returns a TOML encoder that encodes Go values to the io.Writer -// given. By default, a single indentation level is 2 spaces. -func NewEncoder(w io.Writer) *Encoder { - return &Encoder{ - w: bufio.NewWriter(w), - Indent: " ", - } -} - -// Encode writes a TOML representation of the Go value to the underlying -// io.Writer. If the value given cannot be encoded to a valid TOML document, -// then an error is returned. -// -// The mapping between Go values and TOML values should be precisely the same -// as for the Decode* functions. Similarly, the TextMarshaler interface is -// supported by encoding the resulting bytes as strings. (If you want to write -// arbitrary binary data then you will need to use something like base64 since -// TOML does not have any binary types.) -// -// When encoding TOML hashes (i.e., Go maps or structs), keys without any -// sub-hashes are encoded first. -// -// If a Go map is encoded, then its keys are sorted alphabetically for -// deterministic output. More control over this behavior may be provided if -// there is demand for it. -// -// Encoding Go values without a corresponding TOML representation---like map -// types with non-string keys---will cause an error to be returned. Similarly -// for mixed arrays/slices, arrays/slices with nil elements, embedded -// non-struct types and nested slices containing maps or structs. -// (e.g., [][]map[string]string is not allowed but []map[string]string is OK -// and so is []map[string][]string.) -func (enc *Encoder) Encode(v interface{}) error { - rv := eindirect(reflect.ValueOf(v)) - if err := enc.safeEncode(Key([]string{}), rv); err != nil { - return err - } - return enc.w.Flush() -} - -func (enc *Encoder) safeEncode(key Key, rv reflect.Value) (err error) { - defer func() { - if r := recover(); r != nil { - if terr, ok := r.(tomlEncodeError); ok { - err = terr.error - return - } - panic(r) - } - }() - enc.encode(key, rv) - return nil -} - -func (enc *Encoder) encode(key Key, rv reflect.Value) { - // Special case. Time needs to be in ISO8601 format. - // Special case. If we can marshal the type to text, then we used that. - // Basically, this prevents the encoder for handling these types as - // generic structs (or whatever the underlying type of a TextMarshaler is). - switch rv.Interface().(type) { - case time.Time, TextMarshaler: - enc.keyEqElement(key, rv) - return - } - - k := rv.Kind() - switch k { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, - reflect.Int64, - reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, - reflect.Uint64, - reflect.Float32, reflect.Float64, reflect.String, reflect.Bool: - enc.keyEqElement(key, rv) - case reflect.Array, reflect.Slice: - if typeEqual(tomlArrayHash, tomlTypeOfGo(rv)) { - enc.eArrayOfTables(key, rv) - } else { - enc.keyEqElement(key, rv) - } - case reflect.Interface: - if rv.IsNil() { - return - } - enc.encode(key, rv.Elem()) - case reflect.Map: - if rv.IsNil() { - return - } - enc.eTable(key, rv) - case reflect.Ptr: - if rv.IsNil() { - return - } - enc.encode(key, rv.Elem()) - case reflect.Struct: - enc.eTable(key, rv) - default: - panic(e("unsupported type for key '%s': %s", key, k)) - } -} - -// eElement encodes any value that can be an array element (primitives and -// arrays). -func (enc *Encoder) eElement(rv reflect.Value) { - switch v := rv.Interface().(type) { - case time.Time: - // Special case time.Time as a primitive. Has to come before - // TextMarshaler below because time.Time implements - // encoding.TextMarshaler, but we need to always use UTC. - enc.wf(v.UTC().Format("2006-01-02T15:04:05Z")) - return - case TextMarshaler: - // Special case. Use text marshaler if it's available for this value. - if s, err := v.MarshalText(); err != nil { - encPanic(err) - } else { - enc.writeQuoted(string(s)) - } - return - } - switch rv.Kind() { - case reflect.Bool: - enc.wf(strconv.FormatBool(rv.Bool())) - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, - reflect.Int64: - enc.wf(strconv.FormatInt(rv.Int(), 10)) - case reflect.Uint, reflect.Uint8, reflect.Uint16, - reflect.Uint32, reflect.Uint64: - enc.wf(strconv.FormatUint(rv.Uint(), 10)) - case reflect.Float32: - enc.wf(floatAddDecimal(strconv.FormatFloat(rv.Float(), 'f', -1, 32))) - case reflect.Float64: - enc.wf(floatAddDecimal(strconv.FormatFloat(rv.Float(), 'f', -1, 64))) - case reflect.Array, reflect.Slice: - enc.eArrayOrSliceElement(rv) - case reflect.Interface: - enc.eElement(rv.Elem()) - case reflect.String: - enc.writeQuoted(rv.String()) - default: - panic(e("unexpected primitive type: %s", rv.Kind())) - } -} - -// By the TOML spec, all floats must have a decimal with at least one -// number on either side. -func floatAddDecimal(fstr string) string { - if !strings.Contains(fstr, ".") { - return fstr + ".0" - } - return fstr -} - -func (enc *Encoder) writeQuoted(s string) { - enc.wf("\"%s\"", quotedReplacer.Replace(s)) -} - -func (enc *Encoder) eArrayOrSliceElement(rv reflect.Value) { - length := rv.Len() - enc.wf("[") - for i := 0; i < length; i++ { - elem := rv.Index(i) - enc.eElement(elem) - if i != length-1 { - enc.wf(", ") - } - } - enc.wf("]") -} - -func (enc *Encoder) eArrayOfTables(key Key, rv reflect.Value) { - if len(key) == 0 { - encPanic(errNoKey) - } - for i := 0; i < rv.Len(); i++ { - trv := rv.Index(i) - if isNil(trv) { - continue - } - panicIfInvalidKey(key) - enc.newline() - enc.wf("%s[[%s]]", enc.indentStr(key), key.maybeQuotedAll()) - enc.newline() - enc.eMapOrStruct(key, trv) - } -} - -func (enc *Encoder) eTable(key Key, rv reflect.Value) { - panicIfInvalidKey(key) - if len(key) == 1 { - // Output an extra newline between top-level tables. - // (The newline isn't written if nothing else has been written though.) - enc.newline() - } - if len(key) > 0 { - enc.wf("%s[%s]", enc.indentStr(key), key.maybeQuotedAll()) - enc.newline() - } - enc.eMapOrStruct(key, rv) -} - -func (enc *Encoder) eMapOrStruct(key Key, rv reflect.Value) { - switch rv := eindirect(rv); rv.Kind() { - case reflect.Map: - enc.eMap(key, rv) - case reflect.Struct: - enc.eStruct(key, rv) - default: - panic("eTable: unhandled reflect.Value Kind: " + rv.Kind().String()) - } -} - -func (enc *Encoder) eMap(key Key, rv reflect.Value) { - rt := rv.Type() - if rt.Key().Kind() != reflect.String { - encPanic(errNonString) - } - - // Sort keys so that we have deterministic output. And write keys directly - // underneath this key first, before writing sub-structs or sub-maps. - var mapKeysDirect, mapKeysSub []string - for _, mapKey := range rv.MapKeys() { - k := mapKey.String() - if typeIsHash(tomlTypeOfGo(rv.MapIndex(mapKey))) { - mapKeysSub = append(mapKeysSub, k) - } else { - mapKeysDirect = append(mapKeysDirect, k) - } - } - - var writeMapKeys = func(mapKeys []string) { - sort.Strings(mapKeys) - for _, mapKey := range mapKeys { - mrv := rv.MapIndex(reflect.ValueOf(mapKey)) - if isNil(mrv) { - // Don't write anything for nil fields. - continue - } - enc.encode(key.add(mapKey), mrv) - } - } - writeMapKeys(mapKeysDirect) - writeMapKeys(mapKeysSub) -} - -func (enc *Encoder) eStruct(key Key, rv reflect.Value) { - // Write keys for fields directly under this key first, because if we write - // a field that creates a new table, then all keys under it will be in that - // table (not the one we're writing here). - rt := rv.Type() - var fieldsDirect, fieldsSub [][]int - var addFields func(rt reflect.Type, rv reflect.Value, start []int) - addFields = func(rt reflect.Type, rv reflect.Value, start []int) { - for i := 0; i < rt.NumField(); i++ { - f := rt.Field(i) - // skip unexported fields - if f.PkgPath != "" && !f.Anonymous { - continue - } - frv := rv.Field(i) - if f.Anonymous { - t := f.Type - switch t.Kind() { - case reflect.Struct: - // Treat anonymous struct fields with - // tag names as though they are not - // anonymous, like encoding/json does. - if getOptions(f.Tag).name == "" { - addFields(t, frv, f.Index) - continue - } - case reflect.Ptr: - if t.Elem().Kind() == reflect.Struct && - getOptions(f.Tag).name == "" { - if !frv.IsNil() { - addFields(t.Elem(), frv.Elem(), f.Index) - } - continue - } - // Fall through to the normal field encoding logic below - // for non-struct anonymous fields. - } - } - - if typeIsHash(tomlTypeOfGo(frv)) { - fieldsSub = append(fieldsSub, append(start, f.Index...)) - } else { - fieldsDirect = append(fieldsDirect, append(start, f.Index...)) - } - } - } - addFields(rt, rv, nil) - - var writeFields = func(fields [][]int) { - for _, fieldIndex := range fields { - sft := rt.FieldByIndex(fieldIndex) - sf := rv.FieldByIndex(fieldIndex) - if isNil(sf) { - // Don't write anything for nil fields. - continue - } - - opts := getOptions(sft.Tag) - if opts.skip { - continue - } - keyName := sft.Name - if opts.name != "" { - keyName = opts.name - } - if opts.omitempty && isEmpty(sf) { - continue - } - if opts.omitzero && isZero(sf) { - continue - } - - enc.encode(key.add(keyName), sf) - } - } - writeFields(fieldsDirect) - writeFields(fieldsSub) -} - -// tomlTypeName returns the TOML type name of the Go value's type. It is -// used to determine whether the types of array elements are mixed (which is -// forbidden). If the Go value is nil, then it is illegal for it to be an array -// element, and valueIsNil is returned as true. - -// Returns the TOML type of a Go value. The type may be `nil`, which means -// no concrete TOML type could be found. -func tomlTypeOfGo(rv reflect.Value) tomlType { - if isNil(rv) || !rv.IsValid() { - return nil - } - switch rv.Kind() { - case reflect.Bool: - return tomlBool - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, - reflect.Int64, - reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, - reflect.Uint64: - return tomlInteger - case reflect.Float32, reflect.Float64: - return tomlFloat - case reflect.Array, reflect.Slice: - if typeEqual(tomlHash, tomlArrayType(rv)) { - return tomlArrayHash - } - return tomlArray - case reflect.Ptr, reflect.Interface: - return tomlTypeOfGo(rv.Elem()) - case reflect.String: - return tomlString - case reflect.Map: - return tomlHash - case reflect.Struct: - switch rv.Interface().(type) { - case time.Time: - return tomlDatetime - case TextMarshaler: - return tomlString - default: - return tomlHash - } - default: - panic("unexpected reflect.Kind: " + rv.Kind().String()) - } -} - -// tomlArrayType returns the element type of a TOML array. The type returned -// may be nil if it cannot be determined (e.g., a nil slice or a zero length -// slize). This function may also panic if it finds a type that cannot be -// expressed in TOML (such as nil elements, heterogeneous arrays or directly -// nested arrays of tables). -func tomlArrayType(rv reflect.Value) tomlType { - if isNil(rv) || !rv.IsValid() || rv.Len() == 0 { - return nil - } - firstType := tomlTypeOfGo(rv.Index(0)) - if firstType == nil { - encPanic(errArrayNilElement) - } - - rvlen := rv.Len() - for i := 1; i < rvlen; i++ { - elem := rv.Index(i) - switch elemType := tomlTypeOfGo(elem); { - case elemType == nil: - encPanic(errArrayNilElement) - case !typeEqual(firstType, elemType): - encPanic(errArrayMixedElementTypes) - } - } - // If we have a nested array, then we must make sure that the nested - // array contains ONLY primitives. - // This checks arbitrarily nested arrays. - if typeEqual(firstType, tomlArray) || typeEqual(firstType, tomlArrayHash) { - nest := tomlArrayType(eindirect(rv.Index(0))) - if typeEqual(nest, tomlHash) || typeEqual(nest, tomlArrayHash) { - encPanic(errArrayNoTable) - } - } - return firstType -} - -type tagOptions struct { - skip bool // "-" - name string - omitempty bool - omitzero bool -} - -func getOptions(tag reflect.StructTag) tagOptions { - t := tag.Get("toml") - if t == "-" { - return tagOptions{skip: true} - } - var opts tagOptions - parts := strings.Split(t, ",") - opts.name = parts[0] - for _, s := range parts[1:] { - switch s { - case "omitempty": - opts.omitempty = true - case "omitzero": - opts.omitzero = true - } - } - return opts -} - -func isZero(rv reflect.Value) bool { - switch rv.Kind() { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return rv.Int() == 0 - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - return rv.Uint() == 0 - case reflect.Float32, reflect.Float64: - return rv.Float() == 0.0 - } - return false -} - -func isEmpty(rv reflect.Value) bool { - switch rv.Kind() { - case reflect.Array, reflect.Slice, reflect.Map, reflect.String: - return rv.Len() == 0 - case reflect.Bool: - return !rv.Bool() - } - return false -} - -func (enc *Encoder) newline() { - if enc.hasWritten { - enc.wf("\n") - } -} - -func (enc *Encoder) keyEqElement(key Key, val reflect.Value) { - if len(key) == 0 { - encPanic(errNoKey) - } - panicIfInvalidKey(key) - enc.wf("%s%s = ", enc.indentStr(key), key.maybeQuoted(len(key)-1)) - enc.eElement(val) - enc.newline() -} - -func (enc *Encoder) wf(format string, v ...interface{}) { - if _, err := fmt.Fprintf(enc.w, format, v...); err != nil { - encPanic(err) - } - enc.hasWritten = true -} - -func (enc *Encoder) indentStr(key Key) string { - return strings.Repeat(enc.Indent, len(key)-1) -} - -func encPanic(err error) { - panic(tomlEncodeError{err}) -} - -func eindirect(v reflect.Value) reflect.Value { - switch v.Kind() { - case reflect.Ptr, reflect.Interface: - return eindirect(v.Elem()) - default: - return v - } -} - -func isNil(rv reflect.Value) bool { - switch rv.Kind() { - case reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice: - return rv.IsNil() - default: - return false - } -} - -func panicIfInvalidKey(key Key) { - for _, k := range key { - if len(k) == 0 { - encPanic(e("Key '%s' is not a valid table name. Key names "+ - "cannot be empty.", key.maybeQuotedAll())) - } - } -} - -func isValidKeyName(s string) bool { - return len(s) != 0 -} diff --git a/vendor/github.com/BurntSushi/toml/encoding_types.go b/vendor/github.com/BurntSushi/toml/encoding_types.go deleted file mode 100644 index d36e1dd..0000000 --- a/vendor/github.com/BurntSushi/toml/encoding_types.go +++ /dev/null @@ -1,19 +0,0 @@ -// +build go1.2 - -package toml - -// In order to support Go 1.1, we define our own TextMarshaler and -// TextUnmarshaler types. For Go 1.2+, we just alias them with the -// standard library interfaces. - -import ( - "encoding" -) - -// TextMarshaler is a synonym for encoding.TextMarshaler. It is defined here -// so that Go 1.1 can be supported. -type TextMarshaler encoding.TextMarshaler - -// TextUnmarshaler is a synonym for encoding.TextUnmarshaler. It is defined -// here so that Go 1.1 can be supported. -type TextUnmarshaler encoding.TextUnmarshaler diff --git a/vendor/github.com/BurntSushi/toml/encoding_types_1.1.go b/vendor/github.com/BurntSushi/toml/encoding_types_1.1.go deleted file mode 100644 index e8d503d..0000000 --- a/vendor/github.com/BurntSushi/toml/encoding_types_1.1.go +++ /dev/null @@ -1,18 +0,0 @@ -// +build !go1.2 - -package toml - -// These interfaces were introduced in Go 1.2, so we add them manually when -// compiling for Go 1.1. - -// TextMarshaler is a synonym for encoding.TextMarshaler. It is defined here -// so that Go 1.1 can be supported. -type TextMarshaler interface { - MarshalText() (text []byte, err error) -} - -// TextUnmarshaler is a synonym for encoding.TextUnmarshaler. It is defined -// here so that Go 1.1 can be supported. -type TextUnmarshaler interface { - UnmarshalText(text []byte) error -} diff --git a/vendor/github.com/BurntSushi/toml/lex.go b/vendor/github.com/BurntSushi/toml/lex.go deleted file mode 100644 index e0a742a..0000000 --- a/vendor/github.com/BurntSushi/toml/lex.go +++ /dev/null @@ -1,953 +0,0 @@ -package toml - -import ( - "fmt" - "strings" - "unicode" - "unicode/utf8" -) - -type itemType int - -const ( - itemError itemType = iota - itemNIL // used in the parser to indicate no type - itemEOF - itemText - itemString - itemRawString - itemMultilineString - itemRawMultilineString - itemBool - itemInteger - itemFloat - itemDatetime - itemArray // the start of an array - itemArrayEnd - itemTableStart - itemTableEnd - itemArrayTableStart - itemArrayTableEnd - itemKeyStart - itemCommentStart - itemInlineTableStart - itemInlineTableEnd -) - -const ( - eof = 0 - comma = ',' - tableStart = '[' - tableEnd = ']' - arrayTableStart = '[' - arrayTableEnd = ']' - tableSep = '.' - keySep = '=' - arrayStart = '[' - arrayEnd = ']' - commentStart = '#' - stringStart = '"' - stringEnd = '"' - rawStringStart = '\'' - rawStringEnd = '\'' - inlineTableStart = '{' - inlineTableEnd = '}' -) - -type stateFn func(lx *lexer) stateFn - -type lexer struct { - input string - start int - pos int - line int - state stateFn - items chan item - - // Allow for backing up up to three runes. - // This is necessary because TOML contains 3-rune tokens (""" and '''). - prevWidths [3]int - nprev int // how many of prevWidths are in use - // If we emit an eof, we can still back up, but it is not OK to call - // next again. - atEOF bool - - // A stack of state functions used to maintain context. - // The idea is to reuse parts of the state machine in various places. - // For example, values can appear at the top level or within arbitrarily - // nested arrays. The last state on the stack is used after a value has - // been lexed. Similarly for comments. - stack []stateFn -} - -type item struct { - typ itemType - val string - line int -} - -func (lx *lexer) nextItem() item { - for { - select { - case item := <-lx.items: - return item - default: - lx.state = lx.state(lx) - } - } -} - -func lex(input string) *lexer { - lx := &lexer{ - input: input, - state: lexTop, - line: 1, - items: make(chan item, 10), - stack: make([]stateFn, 0, 10), - } - return lx -} - -func (lx *lexer) push(state stateFn) { - lx.stack = append(lx.stack, state) -} - -func (lx *lexer) pop() stateFn { - if len(lx.stack) == 0 { - return lx.errorf("BUG in lexer: no states to pop") - } - last := lx.stack[len(lx.stack)-1] - lx.stack = lx.stack[0 : len(lx.stack)-1] - return last -} - -func (lx *lexer) current() string { - return lx.input[lx.start:lx.pos] -} - -func (lx *lexer) emit(typ itemType) { - lx.items <- item{typ, lx.current(), lx.line} - lx.start = lx.pos -} - -func (lx *lexer) emitTrim(typ itemType) { - lx.items <- item{typ, strings.TrimSpace(lx.current()), lx.line} - lx.start = lx.pos -} - -func (lx *lexer) next() (r rune) { - if lx.atEOF { - panic("next called after EOF") - } - if lx.pos >= len(lx.input) { - lx.atEOF = true - return eof - } - - if lx.input[lx.pos] == '\n' { - lx.line++ - } - lx.prevWidths[2] = lx.prevWidths[1] - lx.prevWidths[1] = lx.prevWidths[0] - if lx.nprev < 3 { - lx.nprev++ - } - r, w := utf8.DecodeRuneInString(lx.input[lx.pos:]) - lx.prevWidths[0] = w - lx.pos += w - return r -} - -// ignore skips over the pending input before this point. -func (lx *lexer) ignore() { - lx.start = lx.pos -} - -// backup steps back one rune. Can be called only twice between calls to next. -func (lx *lexer) backup() { - if lx.atEOF { - lx.atEOF = false - return - } - if lx.nprev < 1 { - panic("backed up too far") - } - w := lx.prevWidths[0] - lx.prevWidths[0] = lx.prevWidths[1] - lx.prevWidths[1] = lx.prevWidths[2] - lx.nprev-- - lx.pos -= w - if lx.pos < len(lx.input) && lx.input[lx.pos] == '\n' { - lx.line-- - } -} - -// accept consumes the next rune if it's equal to `valid`. -func (lx *lexer) accept(valid rune) bool { - if lx.next() == valid { - return true - } - lx.backup() - return false -} - -// peek returns but does not consume the next rune in the input. -func (lx *lexer) peek() rune { - r := lx.next() - lx.backup() - return r -} - -// skip ignores all input that matches the given predicate. -func (lx *lexer) skip(pred func(rune) bool) { - for { - r := lx.next() - if pred(r) { - continue - } - lx.backup() - lx.ignore() - return - } -} - -// errorf stops all lexing by emitting an error and returning `nil`. -// Note that any value that is a character is escaped if it's a special -// character (newlines, tabs, etc.). -func (lx *lexer) errorf(format string, values ...interface{}) stateFn { - lx.items <- item{ - itemError, - fmt.Sprintf(format, values...), - lx.line, - } - return nil -} - -// lexTop consumes elements at the top level of TOML data. -func lexTop(lx *lexer) stateFn { - r := lx.next() - if isWhitespace(r) || isNL(r) { - return lexSkip(lx, lexTop) - } - switch r { - case commentStart: - lx.push(lexTop) - return lexCommentStart - case tableStart: - return lexTableStart - case eof: - if lx.pos > lx.start { - return lx.errorf("unexpected EOF") - } - lx.emit(itemEOF) - return nil - } - - // At this point, the only valid item can be a key, so we back up - // and let the key lexer do the rest. - lx.backup() - lx.push(lexTopEnd) - return lexKeyStart -} - -// lexTopEnd is entered whenever a top-level item has been consumed. (A value -// or a table.) It must see only whitespace, and will turn back to lexTop -// upon a newline. If it sees EOF, it will quit the lexer successfully. -func lexTopEnd(lx *lexer) stateFn { - r := lx.next() - switch { - case r == commentStart: - // a comment will read to a newline for us. - lx.push(lexTop) - return lexCommentStart - case isWhitespace(r): - return lexTopEnd - case isNL(r): - lx.ignore() - return lexTop - case r == eof: - lx.emit(itemEOF) - return nil - } - return lx.errorf("expected a top-level item to end with a newline, "+ - "comment, or EOF, but got %q instead", r) -} - -// lexTable lexes the beginning of a table. Namely, it makes sure that -// it starts with a character other than '.' and ']'. -// It assumes that '[' has already been consumed. -// It also handles the case that this is an item in an array of tables. -// e.g., '[[name]]'. -func lexTableStart(lx *lexer) stateFn { - if lx.peek() == arrayTableStart { - lx.next() - lx.emit(itemArrayTableStart) - lx.push(lexArrayTableEnd) - } else { - lx.emit(itemTableStart) - lx.push(lexTableEnd) - } - return lexTableNameStart -} - -func lexTableEnd(lx *lexer) stateFn { - lx.emit(itemTableEnd) - return lexTopEnd -} - -func lexArrayTableEnd(lx *lexer) stateFn { - if r := lx.next(); r != arrayTableEnd { - return lx.errorf("expected end of table array name delimiter %q, "+ - "but got %q instead", arrayTableEnd, r) - } - lx.emit(itemArrayTableEnd) - return lexTopEnd -} - -func lexTableNameStart(lx *lexer) stateFn { - lx.skip(isWhitespace) - switch r := lx.peek(); { - case r == tableEnd || r == eof: - return lx.errorf("unexpected end of table name " + - "(table names cannot be empty)") - case r == tableSep: - return lx.errorf("unexpected table separator " + - "(table names cannot be empty)") - case r == stringStart || r == rawStringStart: - lx.ignore() - lx.push(lexTableNameEnd) - return lexValue // reuse string lexing - default: - return lexBareTableName - } -} - -// lexBareTableName lexes the name of a table. It assumes that at least one -// valid character for the table has already been read. -func lexBareTableName(lx *lexer) stateFn { - r := lx.next() - if isBareKeyChar(r) { - return lexBareTableName - } - lx.backup() - lx.emit(itemText) - return lexTableNameEnd -} - -// lexTableNameEnd reads the end of a piece of a table name, optionally -// consuming whitespace. -func lexTableNameEnd(lx *lexer) stateFn { - lx.skip(isWhitespace) - switch r := lx.next(); { - case isWhitespace(r): - return lexTableNameEnd - case r == tableSep: - lx.ignore() - return lexTableNameStart - case r == tableEnd: - return lx.pop() - default: - return lx.errorf("expected '.' or ']' to end table name, "+ - "but got %q instead", r) - } -} - -// lexKeyStart consumes a key name up until the first non-whitespace character. -// lexKeyStart will ignore whitespace. -func lexKeyStart(lx *lexer) stateFn { - r := lx.peek() - switch { - case r == keySep: - return lx.errorf("unexpected key separator %q", keySep) - case isWhitespace(r) || isNL(r): - lx.next() - return lexSkip(lx, lexKeyStart) - case r == stringStart || r == rawStringStart: - lx.ignore() - lx.emit(itemKeyStart) - lx.push(lexKeyEnd) - return lexValue // reuse string lexing - default: - lx.ignore() - lx.emit(itemKeyStart) - return lexBareKey - } -} - -// lexBareKey consumes the text of a bare key. Assumes that the first character -// (which is not whitespace) has not yet been consumed. -func lexBareKey(lx *lexer) stateFn { - switch r := lx.next(); { - case isBareKeyChar(r): - return lexBareKey - case isWhitespace(r): - lx.backup() - lx.emit(itemText) - return lexKeyEnd - case r == keySep: - lx.backup() - lx.emit(itemText) - return lexKeyEnd - default: - return lx.errorf("bare keys cannot contain %q", r) - } -} - -// lexKeyEnd consumes the end of a key and trims whitespace (up to the key -// separator). -func lexKeyEnd(lx *lexer) stateFn { - switch r := lx.next(); { - case r == keySep: - return lexSkip(lx, lexValue) - case isWhitespace(r): - return lexSkip(lx, lexKeyEnd) - default: - return lx.errorf("expected key separator %q, but got %q instead", - keySep, r) - } -} - -// lexValue starts the consumption of a value anywhere a value is expected. -// lexValue will ignore whitespace. -// After a value is lexed, the last state on the next is popped and returned. -func lexValue(lx *lexer) stateFn { - // We allow whitespace to precede a value, but NOT newlines. - // In array syntax, the array states are responsible for ignoring newlines. - r := lx.next() - switch { - case isWhitespace(r): - return lexSkip(lx, lexValue) - case isDigit(r): - lx.backup() // avoid an extra state and use the same as above - return lexNumberOrDateStart - } - switch r { - case arrayStart: - lx.ignore() - lx.emit(itemArray) - return lexArrayValue - case inlineTableStart: - lx.ignore() - lx.emit(itemInlineTableStart) - return lexInlineTableValue - case stringStart: - if lx.accept(stringStart) { - if lx.accept(stringStart) { - lx.ignore() // Ignore """ - return lexMultilineString - } - lx.backup() - } - lx.ignore() // ignore the '"' - return lexString - case rawStringStart: - if lx.accept(rawStringStart) { - if lx.accept(rawStringStart) { - lx.ignore() // Ignore """ - return lexMultilineRawString - } - lx.backup() - } - lx.ignore() // ignore the "'" - return lexRawString - case '+', '-': - return lexNumberStart - case '.': // special error case, be kind to users - return lx.errorf("floats must start with a digit, not '.'") - } - if unicode.IsLetter(r) { - // Be permissive here; lexBool will give a nice error if the - // user wrote something like - // x = foo - // (i.e. not 'true' or 'false' but is something else word-like.) - lx.backup() - return lexBool - } - return lx.errorf("expected value but found %q instead", r) -} - -// lexArrayValue consumes one value in an array. It assumes that '[' or ',' -// have already been consumed. All whitespace and newlines are ignored. -func lexArrayValue(lx *lexer) stateFn { - r := lx.next() - switch { - case isWhitespace(r) || isNL(r): - return lexSkip(lx, lexArrayValue) - case r == commentStart: - lx.push(lexArrayValue) - return lexCommentStart - case r == comma: - return lx.errorf("unexpected comma") - case r == arrayEnd: - // NOTE(caleb): The spec isn't clear about whether you can have - // a trailing comma or not, so we'll allow it. - return lexArrayEnd - } - - lx.backup() - lx.push(lexArrayValueEnd) - return lexValue -} - -// lexArrayValueEnd consumes everything between the end of an array value and -// the next value (or the end of the array): it ignores whitespace and newlines -// and expects either a ',' or a ']'. -func lexArrayValueEnd(lx *lexer) stateFn { - r := lx.next() - switch { - case isWhitespace(r) || isNL(r): - return lexSkip(lx, lexArrayValueEnd) - case r == commentStart: - lx.push(lexArrayValueEnd) - return lexCommentStart - case r == comma: - lx.ignore() - return lexArrayValue // move on to the next value - case r == arrayEnd: - return lexArrayEnd - } - return lx.errorf( - "expected a comma or array terminator %q, but got %q instead", - arrayEnd, r, - ) -} - -// lexArrayEnd finishes the lexing of an array. -// It assumes that a ']' has just been consumed. -func lexArrayEnd(lx *lexer) stateFn { - lx.ignore() - lx.emit(itemArrayEnd) - return lx.pop() -} - -// lexInlineTableValue consumes one key/value pair in an inline table. -// It assumes that '{' or ',' have already been consumed. Whitespace is ignored. -func lexInlineTableValue(lx *lexer) stateFn { - r := lx.next() - switch { - case isWhitespace(r): - return lexSkip(lx, lexInlineTableValue) - case isNL(r): - return lx.errorf("newlines not allowed within inline tables") - case r == commentStart: - lx.push(lexInlineTableValue) - return lexCommentStart - case r == comma: - return lx.errorf("unexpected comma") - case r == inlineTableEnd: - return lexInlineTableEnd - } - lx.backup() - lx.push(lexInlineTableValueEnd) - return lexKeyStart -} - -// lexInlineTableValueEnd consumes everything between the end of an inline table -// key/value pair and the next pair (or the end of the table): -// it ignores whitespace and expects either a ',' or a '}'. -func lexInlineTableValueEnd(lx *lexer) stateFn { - r := lx.next() - switch { - case isWhitespace(r): - return lexSkip(lx, lexInlineTableValueEnd) - case isNL(r): - return lx.errorf("newlines not allowed within inline tables") - case r == commentStart: - lx.push(lexInlineTableValueEnd) - return lexCommentStart - case r == comma: - lx.ignore() - return lexInlineTableValue - case r == inlineTableEnd: - return lexInlineTableEnd - } - return lx.errorf("expected a comma or an inline table terminator %q, "+ - "but got %q instead", inlineTableEnd, r) -} - -// lexInlineTableEnd finishes the lexing of an inline table. -// It assumes that a '}' has just been consumed. -func lexInlineTableEnd(lx *lexer) stateFn { - lx.ignore() - lx.emit(itemInlineTableEnd) - return lx.pop() -} - -// lexString consumes the inner contents of a string. It assumes that the -// beginning '"' has already been consumed and ignored. -func lexString(lx *lexer) stateFn { - r := lx.next() - switch { - case r == eof: - return lx.errorf("unexpected EOF") - case isNL(r): - return lx.errorf("strings cannot contain newlines") - case r == '\\': - lx.push(lexString) - return lexStringEscape - case r == stringEnd: - lx.backup() - lx.emit(itemString) - lx.next() - lx.ignore() - return lx.pop() - } - return lexString -} - -// lexMultilineString consumes the inner contents of a string. It assumes that -// the beginning '"""' has already been consumed and ignored. -func lexMultilineString(lx *lexer) stateFn { - switch lx.next() { - case eof: - return lx.errorf("unexpected EOF") - case '\\': - return lexMultilineStringEscape - case stringEnd: - if lx.accept(stringEnd) { - if lx.accept(stringEnd) { - lx.backup() - lx.backup() - lx.backup() - lx.emit(itemMultilineString) - lx.next() - lx.next() - lx.next() - lx.ignore() - return lx.pop() - } - lx.backup() - } - } - return lexMultilineString -} - -// lexRawString consumes a raw string. Nothing can be escaped in such a string. -// It assumes that the beginning "'" has already been consumed and ignored. -func lexRawString(lx *lexer) stateFn { - r := lx.next() - switch { - case r == eof: - return lx.errorf("unexpected EOF") - case isNL(r): - return lx.errorf("strings cannot contain newlines") - case r == rawStringEnd: - lx.backup() - lx.emit(itemRawString) - lx.next() - lx.ignore() - return lx.pop() - } - return lexRawString -} - -// lexMultilineRawString consumes a raw string. Nothing can be escaped in such -// a string. It assumes that the beginning "'''" has already been consumed and -// ignored. -func lexMultilineRawString(lx *lexer) stateFn { - switch lx.next() { - case eof: - return lx.errorf("unexpected EOF") - case rawStringEnd: - if lx.accept(rawStringEnd) { - if lx.accept(rawStringEnd) { - lx.backup() - lx.backup() - lx.backup() - lx.emit(itemRawMultilineString) - lx.next() - lx.next() - lx.next() - lx.ignore() - return lx.pop() - } - lx.backup() - } - } - return lexMultilineRawString -} - -// lexMultilineStringEscape consumes an escaped character. It assumes that the -// preceding '\\' has already been consumed. -func lexMultilineStringEscape(lx *lexer) stateFn { - // Handle the special case first: - if isNL(lx.next()) { - return lexMultilineString - } - lx.backup() - lx.push(lexMultilineString) - return lexStringEscape(lx) -} - -func lexStringEscape(lx *lexer) stateFn { - r := lx.next() - switch r { - case 'b': - fallthrough - case 't': - fallthrough - case 'n': - fallthrough - case 'f': - fallthrough - case 'r': - fallthrough - case '"': - fallthrough - case '\\': - return lx.pop() - case 'u': - return lexShortUnicodeEscape - case 'U': - return lexLongUnicodeEscape - } - return lx.errorf("invalid escape character %q; only the following "+ - "escape characters are allowed: "+ - `\b, \t, \n, \f, \r, \", \\, \uXXXX, and \UXXXXXXXX`, r) -} - -func lexShortUnicodeEscape(lx *lexer) stateFn { - var r rune - for i := 0; i < 4; i++ { - r = lx.next() - if !isHexadecimal(r) { - return lx.errorf(`expected four hexadecimal digits after '\u', `+ - "but got %q instead", lx.current()) - } - } - return lx.pop() -} - -func lexLongUnicodeEscape(lx *lexer) stateFn { - var r rune - for i := 0; i < 8; i++ { - r = lx.next() - if !isHexadecimal(r) { - return lx.errorf(`expected eight hexadecimal digits after '\U', `+ - "but got %q instead", lx.current()) - } - } - return lx.pop() -} - -// lexNumberOrDateStart consumes either an integer, a float, or datetime. -func lexNumberOrDateStart(lx *lexer) stateFn { - r := lx.next() - if isDigit(r) { - return lexNumberOrDate - } - switch r { - case '_': - return lexNumber - case 'e', 'E': - return lexFloat - case '.': - return lx.errorf("floats must start with a digit, not '.'") - } - return lx.errorf("expected a digit but got %q", r) -} - -// lexNumberOrDate consumes either an integer, float or datetime. -func lexNumberOrDate(lx *lexer) stateFn { - r := lx.next() - if isDigit(r) { - return lexNumberOrDate - } - switch r { - case '-': - return lexDatetime - case '_': - return lexNumber - case '.', 'e', 'E': - return lexFloat - } - - lx.backup() - lx.emit(itemInteger) - return lx.pop() -} - -// lexDatetime consumes a Datetime, to a first approximation. -// The parser validates that it matches one of the accepted formats. -func lexDatetime(lx *lexer) stateFn { - r := lx.next() - if isDigit(r) { - return lexDatetime - } - switch r { - case '-', 'T', ':', '.', 'Z', '+': - return lexDatetime - } - - lx.backup() - lx.emit(itemDatetime) - return lx.pop() -} - -// lexNumberStart consumes either an integer or a float. It assumes that a sign -// has already been read, but that *no* digits have been consumed. -// lexNumberStart will move to the appropriate integer or float states. -func lexNumberStart(lx *lexer) stateFn { - // We MUST see a digit. Even floats have to start with a digit. - r := lx.next() - if !isDigit(r) { - if r == '.' { - return lx.errorf("floats must start with a digit, not '.'") - } - return lx.errorf("expected a digit but got %q", r) - } - return lexNumber -} - -// lexNumber consumes an integer or a float after seeing the first digit. -func lexNumber(lx *lexer) stateFn { - r := lx.next() - if isDigit(r) { - return lexNumber - } - switch r { - case '_': - return lexNumber - case '.', 'e', 'E': - return lexFloat - } - - lx.backup() - lx.emit(itemInteger) - return lx.pop() -} - -// lexFloat consumes the elements of a float. It allows any sequence of -// float-like characters, so floats emitted by the lexer are only a first -// approximation and must be validated by the parser. -func lexFloat(lx *lexer) stateFn { - r := lx.next() - if isDigit(r) { - return lexFloat - } - switch r { - case '_', '.', '-', '+', 'e', 'E': - return lexFloat - } - - lx.backup() - lx.emit(itemFloat) - return lx.pop() -} - -// lexBool consumes a bool string: 'true' or 'false. -func lexBool(lx *lexer) stateFn { - var rs []rune - for { - r := lx.next() - if !unicode.IsLetter(r) { - lx.backup() - break - } - rs = append(rs, r) - } - s := string(rs) - switch s { - case "true", "false": - lx.emit(itemBool) - return lx.pop() - } - return lx.errorf("expected value but found %q instead", s) -} - -// lexCommentStart begins the lexing of a comment. It will emit -// itemCommentStart and consume no characters, passing control to lexComment. -func lexCommentStart(lx *lexer) stateFn { - lx.ignore() - lx.emit(itemCommentStart) - return lexComment -} - -// lexComment lexes an entire comment. It assumes that '#' has been consumed. -// It will consume *up to* the first newline character, and pass control -// back to the last state on the stack. -func lexComment(lx *lexer) stateFn { - r := lx.peek() - if isNL(r) || r == eof { - lx.emit(itemText) - return lx.pop() - } - lx.next() - return lexComment -} - -// lexSkip ignores all slurped input and moves on to the next state. -func lexSkip(lx *lexer, nextState stateFn) stateFn { - return func(lx *lexer) stateFn { - lx.ignore() - return nextState - } -} - -// isWhitespace returns true if `r` is a whitespace character according -// to the spec. -func isWhitespace(r rune) bool { - return r == '\t' || r == ' ' -} - -func isNL(r rune) bool { - return r == '\n' || r == '\r' -} - -func isDigit(r rune) bool { - return r >= '0' && r <= '9' -} - -func isHexadecimal(r rune) bool { - return (r >= '0' && r <= '9') || - (r >= 'a' && r <= 'f') || - (r >= 'A' && r <= 'F') -} - -func isBareKeyChar(r rune) bool { - return (r >= 'A' && r <= 'Z') || - (r >= 'a' && r <= 'z') || - (r >= '0' && r <= '9') || - r == '_' || - r == '-' -} - -func (itype itemType) String() string { - switch itype { - case itemError: - return "Error" - case itemNIL: - return "NIL" - case itemEOF: - return "EOF" - case itemText: - return "Text" - case itemString, itemRawString, itemMultilineString, itemRawMultilineString: - return "String" - case itemBool: - return "Bool" - case itemInteger: - return "Integer" - case itemFloat: - return "Float" - case itemDatetime: - return "DateTime" - case itemTableStart: - return "TableStart" - case itemTableEnd: - return "TableEnd" - case itemKeyStart: - return "KeyStart" - case itemArray: - return "Array" - case itemArrayEnd: - return "ArrayEnd" - case itemCommentStart: - return "CommentStart" - } - panic(fmt.Sprintf("BUG: Unknown type '%d'.", int(itype))) -} - -func (item item) String() string { - return fmt.Sprintf("(%s, %s)", item.typ.String(), item.val) -} diff --git a/vendor/github.com/BurntSushi/toml/parse.go b/vendor/github.com/BurntSushi/toml/parse.go deleted file mode 100644 index 50869ef..0000000 --- a/vendor/github.com/BurntSushi/toml/parse.go +++ /dev/null @@ -1,592 +0,0 @@ -package toml - -import ( - "fmt" - "strconv" - "strings" - "time" - "unicode" - "unicode/utf8" -) - -type parser struct { - mapping map[string]interface{} - types map[string]tomlType - lx *lexer - - // A list of keys in the order that they appear in the TOML data. - ordered []Key - - // the full key for the current hash in scope - context Key - - // the base key name for everything except hashes - currentKey string - - // rough approximation of line number - approxLine int - - // A map of 'key.group.names' to whether they were created implicitly. - implicits map[string]bool -} - -type parseError string - -func (pe parseError) Error() string { - return string(pe) -} - -func parse(data string) (p *parser, err error) { - defer func() { - if r := recover(); r != nil { - var ok bool - if err, ok = r.(parseError); ok { - return - } - panic(r) - } - }() - - p = &parser{ - mapping: make(map[string]interface{}), - types: make(map[string]tomlType), - lx: lex(data), - ordered: make([]Key, 0), - implicits: make(map[string]bool), - } - for { - item := p.next() - if item.typ == itemEOF { - break - } - p.topLevel(item) - } - - return p, nil -} - -func (p *parser) panicf(format string, v ...interface{}) { - msg := fmt.Sprintf("Near line %d (last key parsed '%s'): %s", - p.approxLine, p.current(), fmt.Sprintf(format, v...)) - panic(parseError(msg)) -} - -func (p *parser) next() item { - it := p.lx.nextItem() - if it.typ == itemError { - p.panicf("%s", it.val) - } - return it -} - -func (p *parser) bug(format string, v ...interface{}) { - panic(fmt.Sprintf("BUG: "+format+"\n\n", v...)) -} - -func (p *parser) expect(typ itemType) item { - it := p.next() - p.assertEqual(typ, it.typ) - return it -} - -func (p *parser) assertEqual(expected, got itemType) { - if expected != got { - p.bug("Expected '%s' but got '%s'.", expected, got) - } -} - -func (p *parser) topLevel(item item) { - switch item.typ { - case itemCommentStart: - p.approxLine = item.line - p.expect(itemText) - case itemTableStart: - kg := p.next() - p.approxLine = kg.line - - var key Key - for ; kg.typ != itemTableEnd && kg.typ != itemEOF; kg = p.next() { - key = append(key, p.keyString(kg)) - } - p.assertEqual(itemTableEnd, kg.typ) - - p.establishContext(key, false) - p.setType("", tomlHash) - p.ordered = append(p.ordered, key) - case itemArrayTableStart: - kg := p.next() - p.approxLine = kg.line - - var key Key - for ; kg.typ != itemArrayTableEnd && kg.typ != itemEOF; kg = p.next() { - key = append(key, p.keyString(kg)) - } - p.assertEqual(itemArrayTableEnd, kg.typ) - - p.establishContext(key, true) - p.setType("", tomlArrayHash) - p.ordered = append(p.ordered, key) - case itemKeyStart: - kname := p.next() - p.approxLine = kname.line - p.currentKey = p.keyString(kname) - - val, typ := p.value(p.next()) - p.setValue(p.currentKey, val) - p.setType(p.currentKey, typ) - p.ordered = append(p.ordered, p.context.add(p.currentKey)) - p.currentKey = "" - default: - p.bug("Unexpected type at top level: %s", item.typ) - } -} - -// Gets a string for a key (or part of a key in a table name). -func (p *parser) keyString(it item) string { - switch it.typ { - case itemText: - return it.val - case itemString, itemMultilineString, - itemRawString, itemRawMultilineString: - s, _ := p.value(it) - return s.(string) - default: - p.bug("Unexpected key type: %s", it.typ) - panic("unreachable") - } -} - -// value translates an expected value from the lexer into a Go value wrapped -// as an empty interface. -func (p *parser) value(it item) (interface{}, tomlType) { - switch it.typ { - case itemString: - return p.replaceEscapes(it.val), p.typeOfPrimitive(it) - case itemMultilineString: - trimmed := stripFirstNewline(stripEscapedWhitespace(it.val)) - return p.replaceEscapes(trimmed), p.typeOfPrimitive(it) - case itemRawString: - return it.val, p.typeOfPrimitive(it) - case itemRawMultilineString: - return stripFirstNewline(it.val), p.typeOfPrimitive(it) - case itemBool: - switch it.val { - case "true": - return true, p.typeOfPrimitive(it) - case "false": - return false, p.typeOfPrimitive(it) - } - p.bug("Expected boolean value, but got '%s'.", it.val) - case itemInteger: - if !numUnderscoresOK(it.val) { - p.panicf("Invalid integer %q: underscores must be surrounded by digits", - it.val) - } - val := strings.Replace(it.val, "_", "", -1) - num, err := strconv.ParseInt(val, 10, 64) - if err != nil { - // Distinguish integer values. Normally, it'd be a bug if the lexer - // provides an invalid integer, but it's possible that the number is - // out of range of valid values (which the lexer cannot determine). - // So mark the former as a bug but the latter as a legitimate user - // error. - if e, ok := err.(*strconv.NumError); ok && - e.Err == strconv.ErrRange { - - p.panicf("Integer '%s' is out of the range of 64-bit "+ - "signed integers.", it.val) - } else { - p.bug("Expected integer value, but got '%s'.", it.val) - } - } - return num, p.typeOfPrimitive(it) - case itemFloat: - parts := strings.FieldsFunc(it.val, func(r rune) bool { - switch r { - case '.', 'e', 'E': - return true - } - return false - }) - for _, part := range parts { - if !numUnderscoresOK(part) { - p.panicf("Invalid float %q: underscores must be "+ - "surrounded by digits", it.val) - } - } - if !numPeriodsOK(it.val) { - // As a special case, numbers like '123.' or '1.e2', - // which are valid as far as Go/strconv are concerned, - // must be rejected because TOML says that a fractional - // part consists of '.' followed by 1+ digits. - p.panicf("Invalid float %q: '.' must be followed "+ - "by one or more digits", it.val) - } - val := strings.Replace(it.val, "_", "", -1) - num, err := strconv.ParseFloat(val, 64) - if err != nil { - if e, ok := err.(*strconv.NumError); ok && - e.Err == strconv.ErrRange { - - p.panicf("Float '%s' is out of the range of 64-bit "+ - "IEEE-754 floating-point numbers.", it.val) - } else { - p.panicf("Invalid float value: %q", it.val) - } - } - return num, p.typeOfPrimitive(it) - case itemDatetime: - var t time.Time - var ok bool - var err error - for _, format := range []string{ - "2006-01-02T15:04:05Z07:00", - "2006-01-02T15:04:05", - "2006-01-02", - } { - t, err = time.ParseInLocation(format, it.val, time.Local) - if err == nil { - ok = true - break - } - } - if !ok { - p.panicf("Invalid TOML Datetime: %q.", it.val) - } - return t, p.typeOfPrimitive(it) - case itemArray: - array := make([]interface{}, 0) - types := make([]tomlType, 0) - - for it = p.next(); it.typ != itemArrayEnd; it = p.next() { - if it.typ == itemCommentStart { - p.expect(itemText) - continue - } - - val, typ := p.value(it) - array = append(array, val) - types = append(types, typ) - } - return array, p.typeOfArray(types) - case itemInlineTableStart: - var ( - hash = make(map[string]interface{}) - outerContext = p.context - outerKey = p.currentKey - ) - - p.context = append(p.context, p.currentKey) - p.currentKey = "" - for it := p.next(); it.typ != itemInlineTableEnd; it = p.next() { - if it.typ != itemKeyStart { - p.bug("Expected key start but instead found %q, around line %d", - it.val, p.approxLine) - } - if it.typ == itemCommentStart { - p.expect(itemText) - continue - } - - // retrieve key - k := p.next() - p.approxLine = k.line - kname := p.keyString(k) - - // retrieve value - p.currentKey = kname - val, typ := p.value(p.next()) - // make sure we keep metadata up to date - p.setType(kname, typ) - p.ordered = append(p.ordered, p.context.add(p.currentKey)) - hash[kname] = val - } - p.context = outerContext - p.currentKey = outerKey - return hash, tomlHash - } - p.bug("Unexpected value type: %s", it.typ) - panic("unreachable") -} - -// numUnderscoresOK checks whether each underscore in s is surrounded by -// characters that are not underscores. -func numUnderscoresOK(s string) bool { - accept := false - for _, r := range s { - if r == '_' { - if !accept { - return false - } - accept = false - continue - } - accept = true - } - return accept -} - -// numPeriodsOK checks whether every period in s is followed by a digit. -func numPeriodsOK(s string) bool { - period := false - for _, r := range s { - if period && !isDigit(r) { - return false - } - period = r == '.' - } - return !period -} - -// establishContext sets the current context of the parser, -// where the context is either a hash or an array of hashes. Which one is -// set depends on the value of the `array` parameter. -// -// Establishing the context also makes sure that the key isn't a duplicate, and -// will create implicit hashes automatically. -func (p *parser) establishContext(key Key, array bool) { - var ok bool - - // Always start at the top level and drill down for our context. - hashContext := p.mapping - keyContext := make(Key, 0) - - // We only need implicit hashes for key[0:-1] - for _, k := range key[0 : len(key)-1] { - _, ok = hashContext[k] - keyContext = append(keyContext, k) - - // No key? Make an implicit hash and move on. - if !ok { - p.addImplicit(keyContext) - hashContext[k] = make(map[string]interface{}) - } - - // If the hash context is actually an array of tables, then set - // the hash context to the last element in that array. - // - // Otherwise, it better be a table, since this MUST be a key group (by - // virtue of it not being the last element in a key). - switch t := hashContext[k].(type) { - case []map[string]interface{}: - hashContext = t[len(t)-1] - case map[string]interface{}: - hashContext = t - default: - p.panicf("Key '%s' was already created as a hash.", keyContext) - } - } - - p.context = keyContext - if array { - // If this is the first element for this array, then allocate a new - // list of tables for it. - k := key[len(key)-1] - if _, ok := hashContext[k]; !ok { - hashContext[k] = make([]map[string]interface{}, 0, 5) - } - - // Add a new table. But make sure the key hasn't already been used - // for something else. - if hash, ok := hashContext[k].([]map[string]interface{}); ok { - hashContext[k] = append(hash, make(map[string]interface{})) - } else { - p.panicf("Key '%s' was already created and cannot be used as "+ - "an array.", keyContext) - } - } else { - p.setValue(key[len(key)-1], make(map[string]interface{})) - } - p.context = append(p.context, key[len(key)-1]) -} - -// setValue sets the given key to the given value in the current context. -// It will make sure that the key hasn't already been defined, account for -// implicit key groups. -func (p *parser) setValue(key string, value interface{}) { - var tmpHash interface{} - var ok bool - - hash := p.mapping - keyContext := make(Key, 0) - for _, k := range p.context { - keyContext = append(keyContext, k) - if tmpHash, ok = hash[k]; !ok { - p.bug("Context for key '%s' has not been established.", keyContext) - } - switch t := tmpHash.(type) { - case []map[string]interface{}: - // The context is a table of hashes. Pick the most recent table - // defined as the current hash. - hash = t[len(t)-1] - case map[string]interface{}: - hash = t - default: - p.bug("Expected hash to have type 'map[string]interface{}', but "+ - "it has '%T' instead.", tmpHash) - } - } - keyContext = append(keyContext, key) - - if _, ok := hash[key]; ok { - // Typically, if the given key has already been set, then we have - // to raise an error since duplicate keys are disallowed. However, - // it's possible that a key was previously defined implicitly. In this - // case, it is allowed to be redefined concretely. (See the - // `tests/valid/implicit-and-explicit-after.toml` test in `toml-test`.) - // - // But we have to make sure to stop marking it as an implicit. (So that - // another redefinition provokes an error.) - // - // Note that since it has already been defined (as a hash), we don't - // want to overwrite it. So our business is done. - if p.isImplicit(keyContext) { - p.removeImplicit(keyContext) - return - } - - // Otherwise, we have a concrete key trying to override a previous - // key, which is *always* wrong. - p.panicf("Key '%s' has already been defined.", keyContext) - } - hash[key] = value -} - -// setType sets the type of a particular value at a given key. -// It should be called immediately AFTER setValue. -// -// Note that if `key` is empty, then the type given will be applied to the -// current context (which is either a table or an array of tables). -func (p *parser) setType(key string, typ tomlType) { - keyContext := make(Key, 0, len(p.context)+1) - for _, k := range p.context { - keyContext = append(keyContext, k) - } - if len(key) > 0 { // allow type setting for hashes - keyContext = append(keyContext, key) - } - p.types[keyContext.String()] = typ -} - -// addImplicit sets the given Key as having been created implicitly. -func (p *parser) addImplicit(key Key) { - p.implicits[key.String()] = true -} - -// removeImplicit stops tagging the given key as having been implicitly -// created. -func (p *parser) removeImplicit(key Key) { - p.implicits[key.String()] = false -} - -// isImplicit returns true if the key group pointed to by the key was created -// implicitly. -func (p *parser) isImplicit(key Key) bool { - return p.implicits[key.String()] -} - -// current returns the full key name of the current context. -func (p *parser) current() string { - if len(p.currentKey) == 0 { - return p.context.String() - } - if len(p.context) == 0 { - return p.currentKey - } - return fmt.Sprintf("%s.%s", p.context, p.currentKey) -} - -func stripFirstNewline(s string) string { - if len(s) == 0 || s[0] != '\n' { - return s - } - return s[1:] -} - -func stripEscapedWhitespace(s string) string { - esc := strings.Split(s, "\\\n") - if len(esc) > 1 { - for i := 1; i < len(esc); i++ { - esc[i] = strings.TrimLeftFunc(esc[i], unicode.IsSpace) - } - } - return strings.Join(esc, "") -} - -func (p *parser) replaceEscapes(str string) string { - var replaced []rune - s := []byte(str) - r := 0 - for r < len(s) { - if s[r] != '\\' { - c, size := utf8.DecodeRune(s[r:]) - r += size - replaced = append(replaced, c) - continue - } - r += 1 - if r >= len(s) { - p.bug("Escape sequence at end of string.") - return "" - } - switch s[r] { - default: - p.bug("Expected valid escape code after \\, but got %q.", s[r]) - return "" - case 'b': - replaced = append(replaced, rune(0x0008)) - r += 1 - case 't': - replaced = append(replaced, rune(0x0009)) - r += 1 - case 'n': - replaced = append(replaced, rune(0x000A)) - r += 1 - case 'f': - replaced = append(replaced, rune(0x000C)) - r += 1 - case 'r': - replaced = append(replaced, rune(0x000D)) - r += 1 - case '"': - replaced = append(replaced, rune(0x0022)) - r += 1 - case '\\': - replaced = append(replaced, rune(0x005C)) - r += 1 - case 'u': - // At this point, we know we have a Unicode escape of the form - // `uXXXX` at [r, r+5). (Because the lexer guarantees this - // for us.) - escaped := p.asciiEscapeToUnicode(s[r+1 : r+5]) - replaced = append(replaced, escaped) - r += 5 - case 'U': - // At this point, we know we have a Unicode escape of the form - // `uXXXX` at [r, r+9). (Because the lexer guarantees this - // for us.) - escaped := p.asciiEscapeToUnicode(s[r+1 : r+9]) - replaced = append(replaced, escaped) - r += 9 - } - } - return string(replaced) -} - -func (p *parser) asciiEscapeToUnicode(bs []byte) rune { - s := string(bs) - hex, err := strconv.ParseUint(strings.ToLower(s), 16, 32) - if err != nil { - p.bug("Could not parse '%s' as a hexadecimal number, but the "+ - "lexer claims it's OK: %s", s, err) - } - if !utf8.ValidRune(rune(hex)) { - p.panicf("Escaped character '\\u%s' is not valid UTF-8.", s) - } - return rune(hex) -} - -func isStringType(ty itemType) bool { - return ty == itemString || ty == itemMultilineString || - ty == itemRawString || ty == itemRawMultilineString -} diff --git a/vendor/github.com/BurntSushi/toml/type_check.go b/vendor/github.com/BurntSushi/toml/type_check.go deleted file mode 100644 index c73f8af..0000000 --- a/vendor/github.com/BurntSushi/toml/type_check.go +++ /dev/null @@ -1,91 +0,0 @@ -package toml - -// tomlType represents any Go type that corresponds to a TOML type. -// While the first draft of the TOML spec has a simplistic type system that -// probably doesn't need this level of sophistication, we seem to be militating -// toward adding real composite types. -type tomlType interface { - typeString() string -} - -// typeEqual accepts any two types and returns true if they are equal. -func typeEqual(t1, t2 tomlType) bool { - if t1 == nil || t2 == nil { - return false - } - return t1.typeString() == t2.typeString() -} - -func typeIsHash(t tomlType) bool { - return typeEqual(t, tomlHash) || typeEqual(t, tomlArrayHash) -} - -type tomlBaseType string - -func (btype tomlBaseType) typeString() string { - return string(btype) -} - -func (btype tomlBaseType) String() string { - return btype.typeString() -} - -var ( - tomlInteger tomlBaseType = "Integer" - tomlFloat tomlBaseType = "Float" - tomlDatetime tomlBaseType = "Datetime" - tomlString tomlBaseType = "String" - tomlBool tomlBaseType = "Bool" - tomlArray tomlBaseType = "Array" - tomlHash tomlBaseType = "Hash" - tomlArrayHash tomlBaseType = "ArrayHash" -) - -// typeOfPrimitive returns a tomlType of any primitive value in TOML. -// Primitive values are: Integer, Float, Datetime, String and Bool. -// -// Passing a lexer item other than the following will cause a BUG message -// to occur: itemString, itemBool, itemInteger, itemFloat, itemDatetime. -func (p *parser) typeOfPrimitive(lexItem item) tomlType { - switch lexItem.typ { - case itemInteger: - return tomlInteger - case itemFloat: - return tomlFloat - case itemDatetime: - return tomlDatetime - case itemString: - return tomlString - case itemMultilineString: - return tomlString - case itemRawString: - return tomlString - case itemRawMultilineString: - return tomlString - case itemBool: - return tomlBool - } - p.bug("Cannot infer primitive type of lex item '%s'.", lexItem) - panic("unreachable") -} - -// typeOfArray returns a tomlType for an array given a list of types of its -// values. -// -// In the current spec, if an array is homogeneous, then its type is always -// "Array". If the array is not homogeneous, an error is generated. -func (p *parser) typeOfArray(types []tomlType) tomlType { - // Empty arrays are cool. - if len(types) == 0 { - return tomlArray - } - - theType := types[0] - for _, t := range types[1:] { - if !typeEqual(theType, t) { - p.panicf("Array contains values of type '%s' and '%s', but "+ - "arrays must be homogeneous.", theType, t) - } - } - return tomlArray -} diff --git a/vendor/github.com/BurntSushi/toml/type_fields.go b/vendor/github.com/BurntSushi/toml/type_fields.go deleted file mode 100644 index 608997c..0000000 --- a/vendor/github.com/BurntSushi/toml/type_fields.go +++ /dev/null @@ -1,242 +0,0 @@ -package toml - -// Struct field handling is adapted from code in encoding/json: -// -// Copyright 2010 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the Go distribution. - -import ( - "reflect" - "sort" - "sync" -) - -// A field represents a single field found in a struct. -type field struct { - name string // the name of the field (`toml` tag included) - tag bool // whether field has a `toml` tag - index []int // represents the depth of an anonymous field - typ reflect.Type // the type of the field -} - -// byName sorts field by name, breaking ties with depth, -// then breaking ties with "name came from toml tag", then -// breaking ties with index sequence. -type byName []field - -func (x byName) Len() int { return len(x) } - -func (x byName) Swap(i, j int) { x[i], x[j] = x[j], x[i] } - -func (x byName) Less(i, j int) bool { - if x[i].name != x[j].name { - return x[i].name < x[j].name - } - if len(x[i].index) != len(x[j].index) { - return len(x[i].index) < len(x[j].index) - } - if x[i].tag != x[j].tag { - return x[i].tag - } - return byIndex(x).Less(i, j) -} - -// byIndex sorts field by index sequence. -type byIndex []field - -func (x byIndex) Len() int { return len(x) } - -func (x byIndex) Swap(i, j int) { x[i], x[j] = x[j], x[i] } - -func (x byIndex) Less(i, j int) bool { - for k, xik := range x[i].index { - if k >= len(x[j].index) { - return false - } - if xik != x[j].index[k] { - return xik < x[j].index[k] - } - } - return len(x[i].index) < len(x[j].index) -} - -// typeFields returns a list of fields that TOML should recognize for the given -// type. The algorithm is breadth-first search over the set of structs to -// include - the top struct and then any reachable anonymous structs. -func typeFields(t reflect.Type) []field { - // Anonymous fields to explore at the current level and the next. - current := []field{} - next := []field{{typ: t}} - - // Count of queued names for current level and the next. - count := map[reflect.Type]int{} - nextCount := map[reflect.Type]int{} - - // Types already visited at an earlier level. - visited := map[reflect.Type]bool{} - - // Fields found. - var fields []field - - for len(next) > 0 { - current, next = next, current[:0] - count, nextCount = nextCount, map[reflect.Type]int{} - - for _, f := range current { - if visited[f.typ] { - continue - } - visited[f.typ] = true - - // Scan f.typ for fields to include. - for i := 0; i < f.typ.NumField(); i++ { - sf := f.typ.Field(i) - if sf.PkgPath != "" && !sf.Anonymous { // unexported - continue - } - opts := getOptions(sf.Tag) - if opts.skip { - continue - } - index := make([]int, len(f.index)+1) - copy(index, f.index) - index[len(f.index)] = i - - ft := sf.Type - if ft.Name() == "" && ft.Kind() == reflect.Ptr { - // Follow pointer. - ft = ft.Elem() - } - - // Record found field and index sequence. - if opts.name != "" || !sf.Anonymous || ft.Kind() != reflect.Struct { - tagged := opts.name != "" - name := opts.name - if name == "" { - name = sf.Name - } - fields = append(fields, field{name, tagged, index, ft}) - if count[f.typ] > 1 { - // If there were multiple instances, add a second, - // so that the annihilation code will see a duplicate. - // It only cares about the distinction between 1 or 2, - // so don't bother generating any more copies. - fields = append(fields, fields[len(fields)-1]) - } - continue - } - - // Record new anonymous struct to explore in next round. - nextCount[ft]++ - if nextCount[ft] == 1 { - f := field{name: ft.Name(), index: index, typ: ft} - next = append(next, f) - } - } - } - } - - sort.Sort(byName(fields)) - - // Delete all fields that are hidden by the Go rules for embedded fields, - // except that fields with TOML tags are promoted. - - // The fields are sorted in primary order of name, secondary order - // of field index length. Loop over names; for each name, delete - // hidden fields by choosing the one dominant field that survives. - out := fields[:0] - for advance, i := 0, 0; i < len(fields); i += advance { - // One iteration per name. - // Find the sequence of fields with the name of this first field. - fi := fields[i] - name := fi.name - for advance = 1; i+advance < len(fields); advance++ { - fj := fields[i+advance] - if fj.name != name { - break - } - } - if advance == 1 { // Only one field with this name - out = append(out, fi) - continue - } - dominant, ok := dominantField(fields[i : i+advance]) - if ok { - out = append(out, dominant) - } - } - - fields = out - sort.Sort(byIndex(fields)) - - return fields -} - -// dominantField looks through the fields, all of which are known to -// have the same name, to find the single field that dominates the -// others using Go's embedding rules, modified by the presence of -// TOML tags. If there are multiple top-level fields, the boolean -// will be false: This condition is an error in Go and we skip all -// the fields. -func dominantField(fields []field) (field, bool) { - // The fields are sorted in increasing index-length order. The winner - // must therefore be one with the shortest index length. Drop all - // longer entries, which is easy: just truncate the slice. - length := len(fields[0].index) - tagged := -1 // Index of first tagged field. - for i, f := range fields { - if len(f.index) > length { - fields = fields[:i] - break - } - if f.tag { - if tagged >= 0 { - // Multiple tagged fields at the same level: conflict. - // Return no field. - return field{}, false - } - tagged = i - } - } - if tagged >= 0 { - return fields[tagged], true - } - // All remaining fields have the same length. If there's more than one, - // we have a conflict (two fields named "X" at the same level) and we - // return no field. - if len(fields) > 1 { - return field{}, false - } - return fields[0], true -} - -var fieldCache struct { - sync.RWMutex - m map[reflect.Type][]field -} - -// cachedTypeFields is like typeFields but uses a cache to avoid repeated work. -func cachedTypeFields(t reflect.Type) []field { - fieldCache.RLock() - f := fieldCache.m[t] - fieldCache.RUnlock() - if f != nil { - return f - } - - // Compute fields without lock. - // Might duplicate effort but won't hold other computations back. - f = typeFields(t) - if f == nil { - f = []field{} - } - - fieldCache.Lock() - if fieldCache.m == nil { - fieldCache.m = map[reflect.Type][]field{} - } - fieldCache.m[t] = f - fieldCache.Unlock() - return f -} diff --git a/vendor/github.com/anishathalye/porcupine/LICENSE.md b/vendor/github.com/anishathalye/porcupine/LICENSE.md deleted file mode 100644 index 6e24d72..0000000 --- a/vendor/github.com/anishathalye/porcupine/LICENSE.md +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) -===================== - -**Copyright (c) 2017-2018 Anish Athalye (me@anishathalye.com)** - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/vendor/github.com/anishathalye/porcupine/bitset.go b/vendor/github.com/anishathalye/porcupine/bitset.go deleted file mode 100644 index acfa537..0000000 --- a/vendor/github.com/anishathalye/porcupine/bitset.go +++ /dev/null @@ -1,74 +0,0 @@ -package porcupine - -type bitset []uint64 - -// data layout: -// bits 0-63 are in data[0], the next are in data[1], etc. - -func newBitset(bits uint) bitset { - extra := uint(0) - if bits%64 != 0 { - extra = 1 - } - chunks := bits/64 + extra - return bitset(make([]uint64, chunks)) -} - -func (b bitset) clone() bitset { - dataCopy := make([]uint64, len(b)) - copy(dataCopy, b) - return bitset(dataCopy) -} - -func bitsetIndex(pos uint) (uint, uint) { - return pos / 64, pos % 64 -} - -func (b bitset) set(pos uint) bitset { - major, minor := bitsetIndex(pos) - b[major] |= (1 << minor) - return b -} - -func (b bitset) clear(pos uint) bitset { - major, minor := bitsetIndex(pos) - b[major] &^= (1 << minor) - return b -} - -func (b bitset) get(pos uint) bool { - major, minor := bitsetIndex(pos) - return b[major]&(1<> 1) - v = (v & 0x3333333333333333) + ((v & 0xCCCCCCCCCCCCCCCC) >> 2) - v = (v & 0x0F0F0F0F0F0F0F0F) + ((v & 0xF0F0F0F0F0F0F0F0) >> 4) - v *= 0x0101010101010101 - total += uint((v >> 56) & 0xFF) - } - return total -} - -func (b bitset) hash() uint64 { - hash := uint64(b.popcnt()) - for _, v := range b { - hash ^= v - } - return hash -} - -func (b bitset) equals(b2 bitset) bool { - if len(b) != len(b2) { - return false - } - for i := range b { - if b[i] != b2[i] { - return false - } - } - return true -} diff --git a/vendor/github.com/anishathalye/porcupine/model.go b/vendor/github.com/anishathalye/porcupine/model.go deleted file mode 100644 index 0e57c5d..0000000 --- a/vendor/github.com/anishathalye/porcupine/model.go +++ /dev/null @@ -1,51 +0,0 @@ -package porcupine - -type Operation struct { - Input interface{} - Call int64 // invocation time - Output interface{} - Return int64 // response time -} - -type EventKind bool - -const ( - CallEvent EventKind = false - ReturnEvent EventKind = true -) - -type Event struct { - Kind EventKind - Value interface{} - Id uint -} - -type Model struct { - // Partition functions, such that a history is linearizable if an only - // if each partition is linearizable. If you don't want to implement - // this, you can always use the `NoPartition` functions implemented - // below. - Partition func(history []Operation) [][]Operation - PartitionEvent func(history []Event) [][]Event - // Initial state of the system. - Init func() interface{} - // Step function for the system. Returns whether or not the system - // could take this step with the given inputs and outputs and also - // returns the new state. This should not mutate the existing state. - Step func(state interface{}, input interface{}, output interface{}) (bool, interface{}) - // Equality on states. If you are using a simple data type for states, - // you can use the `ShallowEqual` function implemented below. - Equal func(state1, state2 interface{}) bool -} - -func NoPartition(history []Operation) [][]Operation { - return [][]Operation{history} -} - -func NoPartitionEvent(history []Event) [][]Event { - return [][]Event{history} -} - -func ShallowEqual(state1, state2 interface{}) bool { - return state1 == state2 -} diff --git a/vendor/github.com/anishathalye/porcupine/porcupine.go b/vendor/github.com/anishathalye/porcupine/porcupine.go deleted file mode 100644 index 34a9680..0000000 --- a/vendor/github.com/anishathalye/porcupine/porcupine.go +++ /dev/null @@ -1,313 +0,0 @@ -package porcupine - -import ( - "sort" - "sync/atomic" - "time" -) - -type entryKind bool - -const ( - callEntry entryKind = false - returnEntry = true -) - -type entry struct { - kind entryKind - value interface{} - id uint - time int64 -} - -type byTime []entry - -func (a byTime) Len() int { - return len(a) -} - -func (a byTime) Swap(i, j int) { - a[i], a[j] = a[j], a[i] -} - -func (a byTime) Less(i, j int) bool { - return a[i].time < a[j].time -} - -func makeEntries(history []Operation) []entry { - var entries []entry = nil - id := uint(0) - for _, elem := range history { - entries = append(entries, entry{ - callEntry, elem.Input, id, elem.Call}) - entries = append(entries, entry{ - returnEntry, elem.Output, id, elem.Return}) - id++ - } - sort.Sort(byTime(entries)) - return entries -} - -type node struct { - value interface{} - match *node // call if match is nil, otherwise return - id uint - next *node - prev *node -} - -func insertBefore(n *node, mark *node) *node { - if mark != nil { - beforeMark := mark.prev - mark.prev = n - n.next = mark - if beforeMark != nil { - n.prev = beforeMark - beforeMark.next = n - } - } - return n -} - -func length(n *node) uint { - l := uint(0) - for n != nil { - n = n.next - l++ - } - return l -} - -func renumber(events []Event) []Event { - var e []Event - m := make(map[uint]uint) // renumbering - id := uint(0) - for _, v := range events { - if r, ok := m[v.Id]; ok { - e = append(e, Event{v.Kind, v.Value, r}) - } else { - e = append(e, Event{v.Kind, v.Value, id}) - m[v.Id] = id - id++ - } - } - return e -} - -func convertEntries(events []Event) []entry { - var entries []entry - for _, elem := range events { - kind := callEntry - if elem.Kind == ReturnEvent { - kind = returnEntry - } - entries = append(entries, entry{kind, elem.Value, elem.Id, -1}) - } - return entries -} - -func makeLinkedEntries(entries []entry) *node { - var root *node = nil - match := make(map[uint]*node) - for i := len(entries) - 1; i >= 0; i-- { - elem := entries[i] - if elem.kind == returnEntry { - entry := &node{value: elem.value, match: nil, id: elem.id} - match[elem.id] = entry - insertBefore(entry, root) - root = entry - } else { - entry := &node{value: elem.value, match: match[elem.id], id: elem.id} - insertBefore(entry, root) - root = entry - } - } - return root -} - -type cacheEntry struct { - linearized bitset - state interface{} -} - -func cacheContains(model Model, cache map[uint64][]cacheEntry, entry cacheEntry) bool { - for _, elem := range cache[entry.linearized.hash()] { - if entry.linearized.equals(elem.linearized) && model.Equal(entry.state, elem.state) { - return true - } - } - return false -} - -type callsEntry struct { - entry *node - state interface{} -} - -func lift(entry *node) { - entry.prev.next = entry.next - entry.next.prev = entry.prev - match := entry.match - match.prev.next = match.next - if match.next != nil { - match.next.prev = match.prev - } -} - -func unlift(entry *node) { - match := entry.match - match.prev.next = match - if match.next != nil { - match.next.prev = match - } - entry.prev.next = entry - entry.next.prev = entry -} - -func checkSingle(model Model, subhistory *node, kill *int32) bool { - n := length(subhistory) / 2 - linearized := newBitset(n) - cache := make(map[uint64][]cacheEntry) // map from hash to cache entry - var calls []callsEntry - - state := model.Init() - headEntry := insertBefore(&node{value: nil, match: nil, id: ^uint(0)}, subhistory) - entry := subhistory - for headEntry.next != nil { - if atomic.LoadInt32(kill) != 0 { - return false - } - if entry.match != nil { - matching := entry.match // the return entry - ok, newState := model.Step(state, entry.value, matching.value) - if ok { - newLinearized := linearized.clone().set(entry.id) - newCacheEntry := cacheEntry{newLinearized, newState} - if !cacheContains(model, cache, newCacheEntry) { - hash := newLinearized.hash() - cache[hash] = append(cache[hash], newCacheEntry) - calls = append(calls, callsEntry{entry, state}) - state = newState - linearized.set(entry.id) - lift(entry) - entry = headEntry.next - } else { - entry = entry.next - } - } else { - entry = entry.next - } - } else { - if len(calls) == 0 { - return false - } - callsTop := calls[len(calls)-1] - entry = callsTop.entry - state = callsTop.state - linearized.clear(entry.id) - calls = calls[:len(calls)-1] - unlift(entry) - entry = entry.next - } - } - return true -} - -func fillDefault(model Model) Model { - if model.Partition == nil { - model.Partition = NoPartition - } - if model.PartitionEvent == nil { - model.PartitionEvent = NoPartitionEvent - } - if model.Equal == nil { - model.Equal = ShallowEqual - } - return model -} - -func CheckOperations(model Model, history []Operation) bool { - return CheckOperationsTimeout(model, history, 0) -} - -// timeout = 0 means no timeout -// if this operation times out, then a false positive is possible -func CheckOperationsTimeout(model Model, history []Operation, timeout time.Duration) bool { - model = fillDefault(model) - partitions := model.Partition(history) - ok := true - results := make(chan bool) - kill := int32(0) - for _, subhistory := range partitions { - l := makeLinkedEntries(makeEntries(subhistory)) - go func() { - results <- checkSingle(model, l, &kill) - }() - } - var timeoutChan <-chan time.Time - if timeout > 0 { - timeoutChan = time.After(timeout) - } - count := 0 -loop: - for { - select { - case result := <-results: - ok = ok && result - if !ok { - atomic.StoreInt32(&kill, 1) - break loop - } - count++ - if count >= len(partitions) { - break loop - } - case <-timeoutChan: - break loop // if we time out, we might get a false positive - } - } - return ok -} - -func CheckEvents(model Model, history []Event) bool { - return CheckEventsTimeout(model, history, 0) -} - -// timeout = 0 means no timeout -// if this operation times out, then a false positive is possible -func CheckEventsTimeout(model Model, history []Event, timeout time.Duration) bool { - model = fillDefault(model) - partitions := model.PartitionEvent(history) - ok := true - results := make(chan bool) - kill := int32(0) - for _, subhistory := range partitions { - l := makeLinkedEntries(convertEntries(renumber(subhistory))) - go func() { - results <- checkSingle(model, l, &kill) - }() - } - var timeoutChan <-chan time.Time - if timeout > 0 { - timeoutChan = time.After(timeout) - } - count := 0 -loop: - for { - select { - case result := <-results: - ok = ok && result - if !ok { - atomic.StoreInt32(&kill, 1) - break loop - } - count++ - if count >= len(partitions) { - break loop - } - case <-timeoutChan: - break loop // if we time out, we might get a false positive - } - } - return ok -} diff --git a/vendor/github.com/beorn7/perks/LICENSE b/vendor/github.com/beorn7/perks/LICENSE deleted file mode 100644 index 339177b..0000000 --- a/vendor/github.com/beorn7/perks/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (C) 2013 Blake Mizerany - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/github.com/beorn7/perks/quantile/stream.go b/vendor/github.com/beorn7/perks/quantile/stream.go deleted file mode 100644 index d7d14f8..0000000 --- a/vendor/github.com/beorn7/perks/quantile/stream.go +++ /dev/null @@ -1,316 +0,0 @@ -// Package quantile computes approximate quantiles over an unbounded data -// stream within low memory and CPU bounds. -// -// A small amount of accuracy is traded to achieve the above properties. -// -// Multiple streams can be merged before calling Query to generate a single set -// of results. This is meaningful when the streams represent the same type of -// data. See Merge and Samples. -// -// For more detailed information about the algorithm used, see: -// -// Effective Computation of Biased Quantiles over Data Streams -// -// http://www.cs.rutgers.edu/~muthu/bquant.pdf -package quantile - -import ( - "math" - "sort" -) - -// Sample holds an observed value and meta information for compression. JSON -// tags have been added for convenience. -type Sample struct { - Value float64 `json:",string"` - Width float64 `json:",string"` - Delta float64 `json:",string"` -} - -// Samples represents a slice of samples. It implements sort.Interface. -type Samples []Sample - -func (a Samples) Len() int { return len(a) } -func (a Samples) Less(i, j int) bool { return a[i].Value < a[j].Value } -func (a Samples) Swap(i, j int) { a[i], a[j] = a[j], a[i] } - -type invariant func(s *stream, r float64) float64 - -// NewLowBiased returns an initialized Stream for low-biased quantiles -// (e.g. 0.01, 0.1, 0.5) where the needed quantiles are not known a priori, but -// error guarantees can still be given even for the lower ranks of the data -// distribution. -// -// The provided epsilon is a relative error, i.e. the true quantile of a value -// returned by a query is guaranteed to be within (1±Epsilon)*Quantile. -// -// See http://www.cs.rutgers.edu/~muthu/bquant.pdf for time, space, and error -// properties. -func NewLowBiased(epsilon float64) *Stream { - ƒ := func(s *stream, r float64) float64 { - return 2 * epsilon * r - } - return newStream(ƒ) -} - -// NewHighBiased returns an initialized Stream for high-biased quantiles -// (e.g. 0.01, 0.1, 0.5) where the needed quantiles are not known a priori, but -// error guarantees can still be given even for the higher ranks of the data -// distribution. -// -// The provided epsilon is a relative error, i.e. the true quantile of a value -// returned by a query is guaranteed to be within 1-(1±Epsilon)*(1-Quantile). -// -// See http://www.cs.rutgers.edu/~muthu/bquant.pdf for time, space, and error -// properties. -func NewHighBiased(epsilon float64) *Stream { - ƒ := func(s *stream, r float64) float64 { - return 2 * epsilon * (s.n - r) - } - return newStream(ƒ) -} - -// NewTargeted returns an initialized Stream concerned with a particular set of -// quantile values that are supplied a priori. Knowing these a priori reduces -// space and computation time. The targets map maps the desired quantiles to -// their absolute errors, i.e. the true quantile of a value returned by a query -// is guaranteed to be within (Quantile±Epsilon). -// -// See http://www.cs.rutgers.edu/~muthu/bquant.pdf for time, space, and error properties. -func NewTargeted(targetMap map[float64]float64) *Stream { - // Convert map to slice to avoid slow iterations on a map. - // ƒ is called on the hot path, so converting the map to a slice - // beforehand results in significant CPU savings. - targets := targetMapToSlice(targetMap) - - ƒ := func(s *stream, r float64) float64 { - var m = math.MaxFloat64 - var f float64 - for _, t := range targets { - if t.quantile*s.n <= r { - f = (2 * t.epsilon * r) / t.quantile - } else { - f = (2 * t.epsilon * (s.n - r)) / (1 - t.quantile) - } - if f < m { - m = f - } - } - return m - } - return newStream(ƒ) -} - -type target struct { - quantile float64 - epsilon float64 -} - -func targetMapToSlice(targetMap map[float64]float64) []target { - targets := make([]target, 0, len(targetMap)) - - for quantile, epsilon := range targetMap { - t := target{ - quantile: quantile, - epsilon: epsilon, - } - targets = append(targets, t) - } - - return targets -} - -// Stream computes quantiles for a stream of float64s. It is not thread-safe by -// design. Take care when using across multiple goroutines. -type Stream struct { - *stream - b Samples - sorted bool -} - -func newStream(ƒ invariant) *Stream { - x := &stream{ƒ: ƒ} - return &Stream{x, make(Samples, 0, 500), true} -} - -// Insert inserts v into the stream. -func (s *Stream) Insert(v float64) { - s.insert(Sample{Value: v, Width: 1}) -} - -func (s *Stream) insert(sample Sample) { - s.b = append(s.b, sample) - s.sorted = false - if len(s.b) == cap(s.b) { - s.flush() - } -} - -// Query returns the computed qth percentiles value. If s was created with -// NewTargeted, and q is not in the set of quantiles provided a priori, Query -// will return an unspecified result. -func (s *Stream) Query(q float64) float64 { - if !s.flushed() { - // Fast path when there hasn't been enough data for a flush; - // this also yields better accuracy for small sets of data. - l := len(s.b) - if l == 0 { - return 0 - } - i := int(math.Ceil(float64(l) * q)) - if i > 0 { - i -= 1 - } - s.maybeSort() - return s.b[i].Value - } - s.flush() - return s.stream.query(q) -} - -// Merge merges samples into the underlying streams samples. This is handy when -// merging multiple streams from separate threads, database shards, etc. -// -// ATTENTION: This method is broken and does not yield correct results. The -// underlying algorithm is not capable of merging streams correctly. -func (s *Stream) Merge(samples Samples) { - sort.Sort(samples) - s.stream.merge(samples) -} - -// Reset reinitializes and clears the list reusing the samples buffer memory. -func (s *Stream) Reset() { - s.stream.reset() - s.b = s.b[:0] -} - -// Samples returns stream samples held by s. -func (s *Stream) Samples() Samples { - if !s.flushed() { - return s.b - } - s.flush() - return s.stream.samples() -} - -// Count returns the total number of samples observed in the stream -// since initialization. -func (s *Stream) Count() int { - return len(s.b) + s.stream.count() -} - -func (s *Stream) flush() { - s.maybeSort() - s.stream.merge(s.b) - s.b = s.b[:0] -} - -func (s *Stream) maybeSort() { - if !s.sorted { - s.sorted = true - sort.Sort(s.b) - } -} - -func (s *Stream) flushed() bool { - return len(s.stream.l) > 0 -} - -type stream struct { - n float64 - l []Sample - ƒ invariant -} - -func (s *stream) reset() { - s.l = s.l[:0] - s.n = 0 -} - -func (s *stream) insert(v float64) { - s.merge(Samples{{v, 1, 0}}) -} - -func (s *stream) merge(samples Samples) { - // TODO(beorn7): This tries to merge not only individual samples, but - // whole summaries. The paper doesn't mention merging summaries at - // all. Unittests show that the merging is inaccurate. Find out how to - // do merges properly. - var r float64 - i := 0 - for _, sample := range samples { - for ; i < len(s.l); i++ { - c := s.l[i] - if c.Value > sample.Value { - // Insert at position i. - s.l = append(s.l, Sample{}) - copy(s.l[i+1:], s.l[i:]) - s.l[i] = Sample{ - sample.Value, - sample.Width, - math.Max(sample.Delta, math.Floor(s.ƒ(s, r))-1), - // TODO(beorn7): How to calculate delta correctly? - } - i++ - goto inserted - } - r += c.Width - } - s.l = append(s.l, Sample{sample.Value, sample.Width, 0}) - i++ - inserted: - s.n += sample.Width - r += sample.Width - } - s.compress() -} - -func (s *stream) count() int { - return int(s.n) -} - -func (s *stream) query(q float64) float64 { - t := math.Ceil(q * s.n) - t += math.Ceil(s.ƒ(s, t) / 2) - p := s.l[0] - var r float64 - for _, c := range s.l[1:] { - r += p.Width - if r+c.Width+c.Delta > t { - return p.Value - } - p = c - } - return p.Value -} - -func (s *stream) compress() { - if len(s.l) < 2 { - return - } - x := s.l[len(s.l)-1] - xi := len(s.l) - 1 - r := s.n - 1 - x.Width - - for i := len(s.l) - 2; i >= 0; i-- { - c := s.l[i] - if c.Width+x.Width+x.Delta <= s.ƒ(s, r) { - x.Width += c.Width - s.l[xi] = x - // Remove element at i. - copy(s.l[i:], s.l[i+1:]) - s.l = s.l[:len(s.l)-1] - xi -= 1 - } else { - x = c - xi = i - } - r -= c.Width - } -} - -func (s *stream) samples() Samples { - samples := make(Samples, len(s.l)) - copy(samples, s.l) - return samples -} diff --git a/vendor/github.com/codahale/hdrhistogram/LICENSE b/vendor/github.com/codahale/hdrhistogram/LICENSE deleted file mode 100644 index f9835c2..0000000 --- a/vendor/github.com/codahale/hdrhistogram/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Coda Hale - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/github.com/codahale/hdrhistogram/hdr.go b/vendor/github.com/codahale/hdrhistogram/hdr.go deleted file mode 100644 index c978429..0000000 --- a/vendor/github.com/codahale/hdrhistogram/hdr.go +++ /dev/null @@ -1,564 +0,0 @@ -// Package hdrhistogram provides an implementation of Gil Tene's HDR Histogram -// data structure. The HDR Histogram allows for fast and accurate analysis of -// the extreme ranges of data with non-normal distributions, like latency. -package hdrhistogram - -import ( - "fmt" - "math" -) - -// A Bracket is a part of a cumulative distribution. -type Bracket struct { - Quantile float64 - Count, ValueAt int64 -} - -// A Snapshot is an exported view of a Histogram, useful for serializing them. -// A Histogram can be constructed from it by passing it to Import. -type Snapshot struct { - LowestTrackableValue int64 - HighestTrackableValue int64 - SignificantFigures int64 - Counts []int64 -} - -// A Histogram is a lossy data structure used to record the distribution of -// non-normally distributed data (like latency) with a high degree of accuracy -// and a bounded degree of precision. -type Histogram struct { - lowestTrackableValue int64 - highestTrackableValue int64 - unitMagnitude int64 - significantFigures int64 - subBucketHalfCountMagnitude int32 - subBucketHalfCount int32 - subBucketMask int64 - subBucketCount int32 - bucketCount int32 - countsLen int32 - totalCount int64 - counts []int64 -} - -// New returns a new Histogram instance capable of tracking values in the given -// range and with the given amount of precision. -func New(minValue, maxValue int64, sigfigs int) *Histogram { - if sigfigs < 1 || 5 < sigfigs { - panic(fmt.Errorf("sigfigs must be [1,5] (was %d)", sigfigs)) - } - - largestValueWithSingleUnitResolution := 2 * math.Pow10(sigfigs) - subBucketCountMagnitude := int32(math.Ceil(math.Log2(float64(largestValueWithSingleUnitResolution)))) - - subBucketHalfCountMagnitude := subBucketCountMagnitude - if subBucketHalfCountMagnitude < 1 { - subBucketHalfCountMagnitude = 1 - } - subBucketHalfCountMagnitude-- - - unitMagnitude := int32(math.Floor(math.Log2(float64(minValue)))) - if unitMagnitude < 0 { - unitMagnitude = 0 - } - - subBucketCount := int32(math.Pow(2, float64(subBucketHalfCountMagnitude)+1)) - - subBucketHalfCount := subBucketCount / 2 - subBucketMask := int64(subBucketCount-1) << uint(unitMagnitude) - - // determine exponent range needed to support the trackable value with no - // overflow: - smallestUntrackableValue := int64(subBucketCount) << uint(unitMagnitude) - bucketsNeeded := int32(1) - for smallestUntrackableValue < maxValue { - smallestUntrackableValue <<= 1 - bucketsNeeded++ - } - - bucketCount := bucketsNeeded - countsLen := (bucketCount + 1) * (subBucketCount / 2) - - return &Histogram{ - lowestTrackableValue: minValue, - highestTrackableValue: maxValue, - unitMagnitude: int64(unitMagnitude), - significantFigures: int64(sigfigs), - subBucketHalfCountMagnitude: subBucketHalfCountMagnitude, - subBucketHalfCount: subBucketHalfCount, - subBucketMask: subBucketMask, - subBucketCount: subBucketCount, - bucketCount: bucketCount, - countsLen: countsLen, - totalCount: 0, - counts: make([]int64, countsLen), - } -} - -// ByteSize returns an estimate of the amount of memory allocated to the -// histogram in bytes. -// -// N.B.: This does not take into account the overhead for slices, which are -// small, constant, and specific to the compiler version. -func (h *Histogram) ByteSize() int { - return 6*8 + 5*4 + len(h.counts)*8 -} - -// Merge merges the data stored in the given histogram with the receiver, -// returning the number of recorded values which had to be dropped. -func (h *Histogram) Merge(from *Histogram) (dropped int64) { - i := from.rIterator() - for i.next() { - v := i.valueFromIdx - c := i.countAtIdx - - if h.RecordValues(v, c) != nil { - dropped += c - } - } - - return -} - -// TotalCount returns total number of values recorded. -func (h *Histogram) TotalCount() int64 { - return h.totalCount -} - -// Max returns the approximate maximum recorded value. -func (h *Histogram) Max() int64 { - var max int64 - i := h.iterator() - for i.next() { - if i.countAtIdx != 0 { - max = i.highestEquivalentValue - } - } - return h.highestEquivalentValue(max) -} - -// Min returns the approximate minimum recorded value. -func (h *Histogram) Min() int64 { - var min int64 - i := h.iterator() - for i.next() { - if i.countAtIdx != 0 && min == 0 { - min = i.highestEquivalentValue - break - } - } - return h.lowestEquivalentValue(min) -} - -// Mean returns the approximate arithmetic mean of the recorded values. -func (h *Histogram) Mean() float64 { - if h.totalCount == 0 { - return 0 - } - var total int64 - i := h.iterator() - for i.next() { - if i.countAtIdx != 0 { - total += i.countAtIdx * h.medianEquivalentValue(i.valueFromIdx) - } - } - return float64(total) / float64(h.totalCount) -} - -// StdDev returns the approximate standard deviation of the recorded values. -func (h *Histogram) StdDev() float64 { - if h.totalCount == 0 { - return 0 - } - - mean := h.Mean() - geometricDevTotal := 0.0 - - i := h.iterator() - for i.next() { - if i.countAtIdx != 0 { - dev := float64(h.medianEquivalentValue(i.valueFromIdx)) - mean - geometricDevTotal += (dev * dev) * float64(i.countAtIdx) - } - } - - return math.Sqrt(geometricDevTotal / float64(h.totalCount)) -} - -// Reset deletes all recorded values and restores the histogram to its original -// state. -func (h *Histogram) Reset() { - h.totalCount = 0 - for i := range h.counts { - h.counts[i] = 0 - } -} - -// RecordValue records the given value, returning an error if the value is out -// of range. -func (h *Histogram) RecordValue(v int64) error { - return h.RecordValues(v, 1) -} - -// RecordCorrectedValue records the given value, correcting for stalls in the -// recording process. This only works for processes which are recording values -// at an expected interval (e.g., doing jitter analysis). Processes which are -// recording ad-hoc values (e.g., latency for incoming requests) can't take -// advantage of this. -func (h *Histogram) RecordCorrectedValue(v, expectedInterval int64) error { - if err := h.RecordValue(v); err != nil { - return err - } - - if expectedInterval <= 0 || v <= expectedInterval { - return nil - } - - missingValue := v - expectedInterval - for missingValue >= expectedInterval { - if err := h.RecordValue(missingValue); err != nil { - return err - } - missingValue -= expectedInterval - } - - return nil -} - -// RecordValues records n occurrences of the given value, returning an error if -// the value is out of range. -func (h *Histogram) RecordValues(v, n int64) error { - idx := h.countsIndexFor(v) - if idx < 0 || int(h.countsLen) <= idx { - return fmt.Errorf("value %d is too large to be recorded", v) - } - h.counts[idx] += n - h.totalCount += n - - return nil -} - -// ValueAtQuantile returns the recorded value at the given quantile (0..100). -func (h *Histogram) ValueAtQuantile(q float64) int64 { - if q > 100 { - q = 100 - } - - total := int64(0) - countAtPercentile := int64(((q / 100) * float64(h.totalCount)) + 0.5) - - i := h.iterator() - for i.next() { - total += i.countAtIdx - if total >= countAtPercentile { - return h.highestEquivalentValue(i.valueFromIdx) - } - } - - return 0 -} - -// CumulativeDistribution returns an ordered list of brackets of the -// distribution of recorded values. -func (h *Histogram) CumulativeDistribution() []Bracket { - var result []Bracket - - i := h.pIterator(1) - for i.next() { - result = append(result, Bracket{ - Quantile: i.percentile, - Count: i.countToIdx, - ValueAt: i.highestEquivalentValue, - }) - } - - return result -} - -// SignificantFigures returns the significant figures used to create the -// histogram -func (h *Histogram) SignificantFigures() int64 { - return h.significantFigures -} - -// LowestTrackableValue returns the lower bound on values that will be added -// to the histogram -func (h *Histogram) LowestTrackableValue() int64 { - return h.lowestTrackableValue -} - -// HighestTrackableValue returns the upper bound on values that will be added -// to the histogram -func (h *Histogram) HighestTrackableValue() int64 { - return h.highestTrackableValue -} - -// Histogram bar for plotting -type Bar struct { - From, To, Count int64 -} - -// Pretty print as csv for easy plotting -func (b Bar) String() string { - return fmt.Sprintf("%v, %v, %v\n", b.From, b.To, b.Count) -} - -// Distribution returns an ordered list of bars of the -// distribution of recorded values, counts can be normalized to a probability -func (h *Histogram) Distribution() (result []Bar) { - i := h.iterator() - for i.next() { - result = append(result, Bar{ - Count: i.countAtIdx, - From: h.lowestEquivalentValue(i.valueFromIdx), - To: i.highestEquivalentValue, - }) - } - - return result -} - -// Equals returns true if the two Histograms are equivalent, false if not. -func (h *Histogram) Equals(other *Histogram) bool { - switch { - case - h.lowestTrackableValue != other.lowestTrackableValue, - h.highestTrackableValue != other.highestTrackableValue, - h.unitMagnitude != other.unitMagnitude, - h.significantFigures != other.significantFigures, - h.subBucketHalfCountMagnitude != other.subBucketHalfCountMagnitude, - h.subBucketHalfCount != other.subBucketHalfCount, - h.subBucketMask != other.subBucketMask, - h.subBucketCount != other.subBucketCount, - h.bucketCount != other.bucketCount, - h.countsLen != other.countsLen, - h.totalCount != other.totalCount: - return false - default: - for i, c := range h.counts { - if c != other.counts[i] { - return false - } - } - } - return true -} - -// Export returns a snapshot view of the Histogram. This can be later passed to -// Import to construct a new Histogram with the same state. -func (h *Histogram) Export() *Snapshot { - return &Snapshot{ - LowestTrackableValue: h.lowestTrackableValue, - HighestTrackableValue: h.highestTrackableValue, - SignificantFigures: h.significantFigures, - Counts: append([]int64(nil), h.counts...), // copy - } -} - -// Import returns a new Histogram populated from the Snapshot data (which the -// caller must stop accessing). -func Import(s *Snapshot) *Histogram { - h := New(s.LowestTrackableValue, s.HighestTrackableValue, int(s.SignificantFigures)) - h.counts = s.Counts - totalCount := int64(0) - for i := int32(0); i < h.countsLen; i++ { - countAtIndex := h.counts[i] - if countAtIndex > 0 { - totalCount += countAtIndex - } - } - h.totalCount = totalCount - return h -} - -func (h *Histogram) iterator() *iterator { - return &iterator{ - h: h, - subBucketIdx: -1, - } -} - -func (h *Histogram) rIterator() *rIterator { - return &rIterator{ - iterator: iterator{ - h: h, - subBucketIdx: -1, - }, - } -} - -func (h *Histogram) pIterator(ticksPerHalfDistance int32) *pIterator { - return &pIterator{ - iterator: iterator{ - h: h, - subBucketIdx: -1, - }, - ticksPerHalfDistance: ticksPerHalfDistance, - } -} - -func (h *Histogram) sizeOfEquivalentValueRange(v int64) int64 { - bucketIdx := h.getBucketIndex(v) - subBucketIdx := h.getSubBucketIdx(v, bucketIdx) - adjustedBucket := bucketIdx - if subBucketIdx >= h.subBucketCount { - adjustedBucket++ - } - return int64(1) << uint(h.unitMagnitude+int64(adjustedBucket)) -} - -func (h *Histogram) valueFromIndex(bucketIdx, subBucketIdx int32) int64 { - return int64(subBucketIdx) << uint(int64(bucketIdx)+h.unitMagnitude) -} - -func (h *Histogram) lowestEquivalentValue(v int64) int64 { - bucketIdx := h.getBucketIndex(v) - subBucketIdx := h.getSubBucketIdx(v, bucketIdx) - return h.valueFromIndex(bucketIdx, subBucketIdx) -} - -func (h *Histogram) nextNonEquivalentValue(v int64) int64 { - return h.lowestEquivalentValue(v) + h.sizeOfEquivalentValueRange(v) -} - -func (h *Histogram) highestEquivalentValue(v int64) int64 { - return h.nextNonEquivalentValue(v) - 1 -} - -func (h *Histogram) medianEquivalentValue(v int64) int64 { - return h.lowestEquivalentValue(v) + (h.sizeOfEquivalentValueRange(v) >> 1) -} - -func (h *Histogram) getCountAtIndex(bucketIdx, subBucketIdx int32) int64 { - return h.counts[h.countsIndex(bucketIdx, subBucketIdx)] -} - -func (h *Histogram) countsIndex(bucketIdx, subBucketIdx int32) int32 { - bucketBaseIdx := (bucketIdx + 1) << uint(h.subBucketHalfCountMagnitude) - offsetInBucket := subBucketIdx - h.subBucketHalfCount - return bucketBaseIdx + offsetInBucket -} - -func (h *Histogram) getBucketIndex(v int64) int32 { - pow2Ceiling := bitLen(v | h.subBucketMask) - return int32(pow2Ceiling - int64(h.unitMagnitude) - - int64(h.subBucketHalfCountMagnitude+1)) -} - -func (h *Histogram) getSubBucketIdx(v int64, idx int32) int32 { - return int32(v >> uint(int64(idx)+int64(h.unitMagnitude))) -} - -func (h *Histogram) countsIndexFor(v int64) int { - bucketIdx := h.getBucketIndex(v) - subBucketIdx := h.getSubBucketIdx(v, bucketIdx) - return int(h.countsIndex(bucketIdx, subBucketIdx)) -} - -type iterator struct { - h *Histogram - bucketIdx, subBucketIdx int32 - countAtIdx, countToIdx, valueFromIdx int64 - highestEquivalentValue int64 -} - -func (i *iterator) next() bool { - if i.countToIdx >= i.h.totalCount { - return false - } - - // increment bucket - i.subBucketIdx++ - if i.subBucketIdx >= i.h.subBucketCount { - i.subBucketIdx = i.h.subBucketHalfCount - i.bucketIdx++ - } - - if i.bucketIdx >= i.h.bucketCount { - return false - } - - i.countAtIdx = i.h.getCountAtIndex(i.bucketIdx, i.subBucketIdx) - i.countToIdx += i.countAtIdx - i.valueFromIdx = i.h.valueFromIndex(i.bucketIdx, i.subBucketIdx) - i.highestEquivalentValue = i.h.highestEquivalentValue(i.valueFromIdx) - - return true -} - -type rIterator struct { - iterator - countAddedThisStep int64 -} - -func (r *rIterator) next() bool { - for r.iterator.next() { - if r.countAtIdx != 0 { - r.countAddedThisStep = r.countAtIdx - return true - } - } - return false -} - -type pIterator struct { - iterator - seenLastValue bool - ticksPerHalfDistance int32 - percentileToIteratorTo float64 - percentile float64 -} - -func (p *pIterator) next() bool { - if !(p.countToIdx < p.h.totalCount) { - if p.seenLastValue { - return false - } - - p.seenLastValue = true - p.percentile = 100 - - return true - } - - if p.subBucketIdx == -1 && !p.iterator.next() { - return false - } - - var done = false - for !done { - currentPercentile := (100.0 * float64(p.countToIdx)) / float64(p.h.totalCount) - if p.countAtIdx != 0 && p.percentileToIteratorTo <= currentPercentile { - p.percentile = p.percentileToIteratorTo - halfDistance := math.Trunc(math.Pow(2, math.Trunc(math.Log2(100.0/(100.0-p.percentileToIteratorTo)))+1)) - percentileReportingTicks := float64(p.ticksPerHalfDistance) * halfDistance - p.percentileToIteratorTo += 100.0 / percentileReportingTicks - return true - } - done = !p.iterator.next() - } - - return true -} - -func bitLen(x int64) (n int64) { - for ; x >= 0x8000; x >>= 16 { - n += 16 - } - if x >= 0x80 { - x >>= 8 - n += 8 - } - if x >= 0x8 { - x >>= 4 - n += 4 - } - if x >= 0x2 { - x >>= 2 - n += 2 - } - if x >= 0x1 { - n++ - } - return -} diff --git a/vendor/github.com/codahale/hdrhistogram/window.go b/vendor/github.com/codahale/hdrhistogram/window.go deleted file mode 100644 index dc43612..0000000 --- a/vendor/github.com/codahale/hdrhistogram/window.go +++ /dev/null @@ -1,45 +0,0 @@ -package hdrhistogram - -// A WindowedHistogram combines histograms to provide windowed statistics. -type WindowedHistogram struct { - idx int - h []Histogram - m *Histogram - - Current *Histogram -} - -// NewWindowed creates a new WindowedHistogram with N underlying histograms with -// the given parameters. -func NewWindowed(n int, minValue, maxValue int64, sigfigs int) *WindowedHistogram { - w := WindowedHistogram{ - idx: -1, - h: make([]Histogram, n), - m: New(minValue, maxValue, sigfigs), - } - - for i := range w.h { - w.h[i] = *New(minValue, maxValue, sigfigs) - } - w.Rotate() - - return &w -} - -// Merge returns a histogram which includes the recorded values from all the -// sections of the window. -func (w *WindowedHistogram) Merge() *Histogram { - w.m.Reset() - for _, h := range w.h { - w.m.Merge(&h) - } - return w.m -} - -// Rotate resets the oldest histogram and rotates it to be used as the current -// histogram. -func (w *WindowedHistogram) Rotate() { - w.idx++ - w.Current = &w.h[w.idx%len(w.h)] - w.Current.Reset() -} diff --git a/vendor/github.com/coreos/etcd/Documentation/README.md b/vendor/github.com/coreos/etcd/Documentation/README.md deleted file mode 120000 index 8828313..0000000 --- a/vendor/github.com/coreos/etcd/Documentation/README.md +++ /dev/null @@ -1 +0,0 @@ -docs.md \ No newline at end of file diff --git a/vendor/github.com/coreos/etcd/LICENSE b/vendor/github.com/coreos/etcd/LICENSE deleted file mode 100644 index d645695..0000000 --- a/vendor/github.com/coreos/etcd/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/coreos/etcd/NOTICE b/vendor/github.com/coreos/etcd/NOTICE deleted file mode 100644 index b39ddfa..0000000 --- a/vendor/github.com/coreos/etcd/NOTICE +++ /dev/null @@ -1,5 +0,0 @@ -CoreOS Project -Copyright 2014 CoreOS, Inc - -This product includes software developed at CoreOS, Inc. -(http://www.coreos.com/). diff --git a/vendor/github.com/coreos/etcd/auth/authpb/auth.pb.go b/vendor/github.com/coreos/etcd/auth/authpb/auth.pb.go deleted file mode 100644 index 009ebda..0000000 --- a/vendor/github.com/coreos/etcd/auth/authpb/auth.pb.go +++ /dev/null @@ -1,824 +0,0 @@ -// Code generated by protoc-gen-gogo. -// source: auth.proto -// DO NOT EDIT! - -/* - Package authpb is a generated protocol buffer package. - - It is generated from these files: - auth.proto - - It has these top-level messages: - User - Permission - Role -*/ -package authpb - -import ( - "fmt" - - proto "github.com/golang/protobuf/proto" - - math "math" - - io "io" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -type Permission_Type int32 - -const ( - READ Permission_Type = 0 - WRITE Permission_Type = 1 - READWRITE Permission_Type = 2 -) - -var Permission_Type_name = map[int32]string{ - 0: "READ", - 1: "WRITE", - 2: "READWRITE", -} -var Permission_Type_value = map[string]int32{ - "READ": 0, - "WRITE": 1, - "READWRITE": 2, -} - -func (x Permission_Type) String() string { - return proto.EnumName(Permission_Type_name, int32(x)) -} -func (Permission_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptorAuth, []int{1, 0} } - -// User is a single entry in the bucket authUsers -type User struct { - Name []byte `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Password []byte `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` - Roles []string `protobuf:"bytes,3,rep,name=roles" json:"roles,omitempty"` -} - -func (m *User) Reset() { *m = User{} } -func (m *User) String() string { return proto.CompactTextString(m) } -func (*User) ProtoMessage() {} -func (*User) Descriptor() ([]byte, []int) { return fileDescriptorAuth, []int{0} } - -// Permission is a single entity -type Permission struct { - PermType Permission_Type `protobuf:"varint,1,opt,name=permType,proto3,enum=authpb.Permission_Type" json:"permType,omitempty"` - Key []byte `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` - RangeEnd []byte `protobuf:"bytes,3,opt,name=range_end,json=rangeEnd,proto3" json:"range_end,omitempty"` -} - -func (m *Permission) Reset() { *m = Permission{} } -func (m *Permission) String() string { return proto.CompactTextString(m) } -func (*Permission) ProtoMessage() {} -func (*Permission) Descriptor() ([]byte, []int) { return fileDescriptorAuth, []int{1} } - -// Role is a single entry in the bucket authRoles -type Role struct { - Name []byte `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - KeyPermission []*Permission `protobuf:"bytes,2,rep,name=keyPermission" json:"keyPermission,omitempty"` -} - -func (m *Role) Reset() { *m = Role{} } -func (m *Role) String() string { return proto.CompactTextString(m) } -func (*Role) ProtoMessage() {} -func (*Role) Descriptor() ([]byte, []int) { return fileDescriptorAuth, []int{2} } - -func init() { - proto.RegisterType((*User)(nil), "authpb.User") - proto.RegisterType((*Permission)(nil), "authpb.Permission") - proto.RegisterType((*Role)(nil), "authpb.Role") - proto.RegisterEnum("authpb.Permission_Type", Permission_Type_name, Permission_Type_value) -} -func (m *User) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *User) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintAuth(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if len(m.Password) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintAuth(dAtA, i, uint64(len(m.Password))) - i += copy(dAtA[i:], m.Password) - } - if len(m.Roles) > 0 { - for _, s := range m.Roles { - dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - return i, nil -} - -func (m *Permission) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Permission) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.PermType != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintAuth(dAtA, i, uint64(m.PermType)) - } - if len(m.Key) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintAuth(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - } - if len(m.RangeEnd) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintAuth(dAtA, i, uint64(len(m.RangeEnd))) - i += copy(dAtA[i:], m.RangeEnd) - } - return i, nil -} - -func (m *Role) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Role) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintAuth(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if len(m.KeyPermission) > 0 { - for _, msg := range m.KeyPermission { - dAtA[i] = 0x12 - i++ - i = encodeVarintAuth(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func encodeFixed64Auth(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Auth(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintAuth(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *User) Size() (n int) { - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovAuth(uint64(l)) - } - l = len(m.Password) - if l > 0 { - n += 1 + l + sovAuth(uint64(l)) - } - if len(m.Roles) > 0 { - for _, s := range m.Roles { - l = len(s) - n += 1 + l + sovAuth(uint64(l)) - } - } - return n -} - -func (m *Permission) Size() (n int) { - var l int - _ = l - if m.PermType != 0 { - n += 1 + sovAuth(uint64(m.PermType)) - } - l = len(m.Key) - if l > 0 { - n += 1 + l + sovAuth(uint64(l)) - } - l = len(m.RangeEnd) - if l > 0 { - n += 1 + l + sovAuth(uint64(l)) - } - return n -} - -func (m *Role) Size() (n int) { - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovAuth(uint64(l)) - } - if len(m.KeyPermission) > 0 { - for _, e := range m.KeyPermission { - l = e.Size() - n += 1 + l + sovAuth(uint64(l)) - } - } - return n -} - -func sovAuth(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozAuth(x uint64) (n int) { - return sovAuth(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *User) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAuth - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: User: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: User: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAuth - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthAuth - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = append(m.Name[:0], dAtA[iNdEx:postIndex]...) - if m.Name == nil { - m.Name = []byte{} - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Password", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAuth - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthAuth - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Password = append(m.Password[:0], dAtA[iNdEx:postIndex]...) - if m.Password == nil { - m.Password = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Roles", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAuth - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthAuth - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Roles = append(m.Roles, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAuth(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAuth - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Permission) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAuth - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Permission: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Permission: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PermType", wireType) - } - m.PermType = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAuth - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PermType |= (Permission_Type(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAuth - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthAuth - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...) - if m.Key == nil { - m.Key = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RangeEnd", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAuth - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthAuth - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RangeEnd = append(m.RangeEnd[:0], dAtA[iNdEx:postIndex]...) - if m.RangeEnd == nil { - m.RangeEnd = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAuth(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAuth - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Role) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAuth - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Role: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Role: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAuth - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthAuth - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = append(m.Name[:0], dAtA[iNdEx:postIndex]...) - if m.Name == nil { - m.Name = []byte{} - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field KeyPermission", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAuth - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAuth - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.KeyPermission = append(m.KeyPermission, &Permission{}) - if err := m.KeyPermission[len(m.KeyPermission)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAuth(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAuth - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipAuth(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowAuth - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowAuth - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowAuth - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - iNdEx += length - if length < 0 { - return 0, ErrInvalidLengthAuth - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowAuth - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipAuth(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthAuth = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowAuth = fmt.Errorf("proto: integer overflow") -) - -func init() { proto.RegisterFile("auth.proto", fileDescriptorAuth) } - -var fileDescriptorAuth = []byte{ - // 288 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0xc1, 0x4a, 0xc3, 0x30, - 0x1c, 0xc6, 0x9b, 0xb6, 0x1b, 0xed, 0x5f, 0x27, 0x25, 0x0c, 0x0c, 0x13, 0x42, 0xe9, 0xa9, 0x78, - 0xa8, 0xb0, 0x5d, 0xbc, 0x2a, 0xf6, 0x20, 0x78, 0x90, 0x50, 0xf1, 0x28, 0x1d, 0x0d, 0x75, 0x6c, - 0x6d, 0x4a, 0x32, 0x91, 0xbe, 0x89, 0x07, 0x1f, 0x68, 0xc7, 0x3d, 0x82, 0xab, 0x2f, 0x22, 0x4d, - 0x64, 0x43, 0xdc, 0xed, 0xfb, 0xbe, 0xff, 0x97, 0xe4, 0x97, 0x3f, 0x40, 0xfe, 0xb6, 0x7e, 0x4d, - 0x1a, 0x29, 0xd6, 0x02, 0x0f, 0x7b, 0xdd, 0xcc, 0x27, 0xe3, 0x52, 0x94, 0x42, 0x47, 0x57, 0xbd, - 0x32, 0xd3, 0xe8, 0x01, 0xdc, 0x27, 0xc5, 0x25, 0xc6, 0xe0, 0xd6, 0x79, 0xc5, 0x09, 0x0a, 0x51, - 0x7c, 0xca, 0xb4, 0xc6, 0x13, 0xf0, 0x9a, 0x5c, 0xa9, 0x77, 0x21, 0x0b, 0x62, 0xeb, 0x7c, 0xef, - 0xf1, 0x18, 0x06, 0x52, 0xac, 0xb8, 0x22, 0x4e, 0xe8, 0xc4, 0x3e, 0x33, 0x26, 0xfa, 0x44, 0x00, - 0x8f, 0x5c, 0x56, 0x0b, 0xa5, 0x16, 0xa2, 0xc6, 0x33, 0xf0, 0x1a, 0x2e, 0xab, 0xac, 0x6d, 0xcc, - 0xc5, 0x67, 0xd3, 0xf3, 0xc4, 0xd0, 0x24, 0x87, 0x56, 0xd2, 0x8f, 0xd9, 0xbe, 0x88, 0x03, 0x70, - 0x96, 0xbc, 0xfd, 0x7d, 0xb0, 0x97, 0xf8, 0x02, 0x7c, 0x99, 0xd7, 0x25, 0x7f, 0xe1, 0x75, 0x41, - 0x1c, 0x03, 0xa2, 0x83, 0xb4, 0x2e, 0xa2, 0x4b, 0x70, 0xf5, 0x31, 0x0f, 0x5c, 0x96, 0xde, 0xdc, - 0x05, 0x16, 0xf6, 0x61, 0xf0, 0xcc, 0xee, 0xb3, 0x34, 0x40, 0x78, 0x04, 0x7e, 0x1f, 0x1a, 0x6b, - 0x47, 0x19, 0xb8, 0x4c, 0xac, 0xf8, 0xd1, 0xcf, 0x5e, 0xc3, 0x68, 0xc9, 0xdb, 0x03, 0x16, 0xb1, - 0x43, 0x27, 0x3e, 0x99, 0xe2, 0xff, 0xc0, 0xec, 0x6f, 0xf1, 0x96, 0x6c, 0x76, 0xd4, 0xda, 0xee, - 0xa8, 0xb5, 0xe9, 0x28, 0xda, 0x76, 0x14, 0x7d, 0x75, 0x14, 0x7d, 0x7c, 0x53, 0x6b, 0x3e, 0xd4, - 0x3b, 0x9e, 0xfd, 0x04, 0x00, 0x00, 0xff, 0xff, 0xcc, 0x76, 0x8d, 0x4f, 0x8f, 0x01, 0x00, 0x00, -} diff --git a/vendor/github.com/coreos/etcd/clientv3/auth.go b/vendor/github.com/coreos/etcd/clientv3/auth.go deleted file mode 100644 index a64b8ca..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/auth.go +++ /dev/null @@ -1,233 +0,0 @@ -// Copyright 2016 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package clientv3 - -import ( - "fmt" - "strings" - - "github.com/coreos/etcd/auth/authpb" - pb "github.com/coreos/etcd/etcdserver/etcdserverpb" - - "golang.org/x/net/context" - "google.golang.org/grpc" -) - -type ( - AuthEnableResponse pb.AuthEnableResponse - AuthDisableResponse pb.AuthDisableResponse - AuthenticateResponse pb.AuthenticateResponse - AuthUserAddResponse pb.AuthUserAddResponse - AuthUserDeleteResponse pb.AuthUserDeleteResponse - AuthUserChangePasswordResponse pb.AuthUserChangePasswordResponse - AuthUserGrantRoleResponse pb.AuthUserGrantRoleResponse - AuthUserGetResponse pb.AuthUserGetResponse - AuthUserRevokeRoleResponse pb.AuthUserRevokeRoleResponse - AuthRoleAddResponse pb.AuthRoleAddResponse - AuthRoleGrantPermissionResponse pb.AuthRoleGrantPermissionResponse - AuthRoleGetResponse pb.AuthRoleGetResponse - AuthRoleRevokePermissionResponse pb.AuthRoleRevokePermissionResponse - AuthRoleDeleteResponse pb.AuthRoleDeleteResponse - AuthUserListResponse pb.AuthUserListResponse - AuthRoleListResponse pb.AuthRoleListResponse - - PermissionType authpb.Permission_Type - Permission authpb.Permission -) - -const ( - PermRead = authpb.READ - PermWrite = authpb.WRITE - PermReadWrite = authpb.READWRITE -) - -type Auth interface { - // AuthEnable enables auth of an etcd cluster. - AuthEnable(ctx context.Context) (*AuthEnableResponse, error) - - // AuthDisable disables auth of an etcd cluster. - AuthDisable(ctx context.Context) (*AuthDisableResponse, error) - - // UserAdd adds a new user to an etcd cluster. - UserAdd(ctx context.Context, name string, password string) (*AuthUserAddResponse, error) - - // UserDelete deletes a user from an etcd cluster. - UserDelete(ctx context.Context, name string) (*AuthUserDeleteResponse, error) - - // UserChangePassword changes a password of a user. - UserChangePassword(ctx context.Context, name string, password string) (*AuthUserChangePasswordResponse, error) - - // UserGrantRole grants a role to a user. - UserGrantRole(ctx context.Context, user string, role string) (*AuthUserGrantRoleResponse, error) - - // UserGet gets a detailed information of a user. - UserGet(ctx context.Context, name string) (*AuthUserGetResponse, error) - - // UserList gets a list of all users. - UserList(ctx context.Context) (*AuthUserListResponse, error) - - // UserRevokeRole revokes a role of a user. - UserRevokeRole(ctx context.Context, name string, role string) (*AuthUserRevokeRoleResponse, error) - - // RoleAdd adds a new role to an etcd cluster. - RoleAdd(ctx context.Context, name string) (*AuthRoleAddResponse, error) - - // RoleGrantPermission grants a permission to a role. - RoleGrantPermission(ctx context.Context, name string, key, rangeEnd string, permType PermissionType) (*AuthRoleGrantPermissionResponse, error) - - // RoleGet gets a detailed information of a role. - RoleGet(ctx context.Context, role string) (*AuthRoleGetResponse, error) - - // RoleList gets a list of all roles. - RoleList(ctx context.Context) (*AuthRoleListResponse, error) - - // RoleRevokePermission revokes a permission from a role. - RoleRevokePermission(ctx context.Context, role string, key, rangeEnd string) (*AuthRoleRevokePermissionResponse, error) - - // RoleDelete deletes a role. - RoleDelete(ctx context.Context, role string) (*AuthRoleDeleteResponse, error) -} - -type auth struct { - remote pb.AuthClient - callOpts []grpc.CallOption -} - -func NewAuth(c *Client) Auth { - api := &auth{remote: RetryAuthClient(c)} - if c != nil { - api.callOpts = c.callOpts - } - return api -} - -func (auth *auth) AuthEnable(ctx context.Context) (*AuthEnableResponse, error) { - resp, err := auth.remote.AuthEnable(ctx, &pb.AuthEnableRequest{}, auth.callOpts...) - return (*AuthEnableResponse)(resp), toErr(ctx, err) -} - -func (auth *auth) AuthDisable(ctx context.Context) (*AuthDisableResponse, error) { - resp, err := auth.remote.AuthDisable(ctx, &pb.AuthDisableRequest{}, auth.callOpts...) - return (*AuthDisableResponse)(resp), toErr(ctx, err) -} - -func (auth *auth) UserAdd(ctx context.Context, name string, password string) (*AuthUserAddResponse, error) { - resp, err := auth.remote.UserAdd(ctx, &pb.AuthUserAddRequest{Name: name, Password: password}, auth.callOpts...) - return (*AuthUserAddResponse)(resp), toErr(ctx, err) -} - -func (auth *auth) UserDelete(ctx context.Context, name string) (*AuthUserDeleteResponse, error) { - resp, err := auth.remote.UserDelete(ctx, &pb.AuthUserDeleteRequest{Name: name}, auth.callOpts...) - return (*AuthUserDeleteResponse)(resp), toErr(ctx, err) -} - -func (auth *auth) UserChangePassword(ctx context.Context, name string, password string) (*AuthUserChangePasswordResponse, error) { - resp, err := auth.remote.UserChangePassword(ctx, &pb.AuthUserChangePasswordRequest{Name: name, Password: password}, auth.callOpts...) - return (*AuthUserChangePasswordResponse)(resp), toErr(ctx, err) -} - -func (auth *auth) UserGrantRole(ctx context.Context, user string, role string) (*AuthUserGrantRoleResponse, error) { - resp, err := auth.remote.UserGrantRole(ctx, &pb.AuthUserGrantRoleRequest{User: user, Role: role}, auth.callOpts...) - return (*AuthUserGrantRoleResponse)(resp), toErr(ctx, err) -} - -func (auth *auth) UserGet(ctx context.Context, name string) (*AuthUserGetResponse, error) { - resp, err := auth.remote.UserGet(ctx, &pb.AuthUserGetRequest{Name: name}, auth.callOpts...) - return (*AuthUserGetResponse)(resp), toErr(ctx, err) -} - -func (auth *auth) UserList(ctx context.Context) (*AuthUserListResponse, error) { - resp, err := auth.remote.UserList(ctx, &pb.AuthUserListRequest{}, auth.callOpts...) - return (*AuthUserListResponse)(resp), toErr(ctx, err) -} - -func (auth *auth) UserRevokeRole(ctx context.Context, name string, role string) (*AuthUserRevokeRoleResponse, error) { - resp, err := auth.remote.UserRevokeRole(ctx, &pb.AuthUserRevokeRoleRequest{Name: name, Role: role}, auth.callOpts...) - return (*AuthUserRevokeRoleResponse)(resp), toErr(ctx, err) -} - -func (auth *auth) RoleAdd(ctx context.Context, name string) (*AuthRoleAddResponse, error) { - resp, err := auth.remote.RoleAdd(ctx, &pb.AuthRoleAddRequest{Name: name}, auth.callOpts...) - return (*AuthRoleAddResponse)(resp), toErr(ctx, err) -} - -func (auth *auth) RoleGrantPermission(ctx context.Context, name string, key, rangeEnd string, permType PermissionType) (*AuthRoleGrantPermissionResponse, error) { - perm := &authpb.Permission{ - Key: []byte(key), - RangeEnd: []byte(rangeEnd), - PermType: authpb.Permission_Type(permType), - } - resp, err := auth.remote.RoleGrantPermission(ctx, &pb.AuthRoleGrantPermissionRequest{Name: name, Perm: perm}, auth.callOpts...) - return (*AuthRoleGrantPermissionResponse)(resp), toErr(ctx, err) -} - -func (auth *auth) RoleGet(ctx context.Context, role string) (*AuthRoleGetResponse, error) { - resp, err := auth.remote.RoleGet(ctx, &pb.AuthRoleGetRequest{Role: role}, auth.callOpts...) - return (*AuthRoleGetResponse)(resp), toErr(ctx, err) -} - -func (auth *auth) RoleList(ctx context.Context) (*AuthRoleListResponse, error) { - resp, err := auth.remote.RoleList(ctx, &pb.AuthRoleListRequest{}, auth.callOpts...) - return (*AuthRoleListResponse)(resp), toErr(ctx, err) -} - -func (auth *auth) RoleRevokePermission(ctx context.Context, role string, key, rangeEnd string) (*AuthRoleRevokePermissionResponse, error) { - resp, err := auth.remote.RoleRevokePermission(ctx, &pb.AuthRoleRevokePermissionRequest{Role: role, Key: key, RangeEnd: rangeEnd}, auth.callOpts...) - return (*AuthRoleRevokePermissionResponse)(resp), toErr(ctx, err) -} - -func (auth *auth) RoleDelete(ctx context.Context, role string) (*AuthRoleDeleteResponse, error) { - resp, err := auth.remote.RoleDelete(ctx, &pb.AuthRoleDeleteRequest{Role: role}, auth.callOpts...) - return (*AuthRoleDeleteResponse)(resp), toErr(ctx, err) -} - -func StrToPermissionType(s string) (PermissionType, error) { - val, ok := authpb.Permission_Type_value[strings.ToUpper(s)] - if ok { - return PermissionType(val), nil - } - return PermissionType(-1), fmt.Errorf("invalid permission type: %s", s) -} - -type authenticator struct { - conn *grpc.ClientConn // conn in-use - remote pb.AuthClient - callOpts []grpc.CallOption -} - -func (auth *authenticator) authenticate(ctx context.Context, name string, password string) (*AuthenticateResponse, error) { - resp, err := auth.remote.Authenticate(ctx, &pb.AuthenticateRequest{Name: name, Password: password}, auth.callOpts...) - return (*AuthenticateResponse)(resp), toErr(ctx, err) -} - -func (auth *authenticator) close() { - auth.conn.Close() -} - -func newAuthenticator(endpoint string, opts []grpc.DialOption, c *Client) (*authenticator, error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return nil, err - } - - api := &authenticator{ - conn: conn, - remote: pb.NewAuthClient(conn), - } - if c != nil { - api.callOpts = c.callOpts - } - return api, nil -} diff --git a/vendor/github.com/coreos/etcd/clientv3/client.go b/vendor/github.com/coreos/etcd/clientv3/client.go deleted file mode 100644 index 2bdd928..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/client.go +++ /dev/null @@ -1,562 +0,0 @@ -// Copyright 2016 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package clientv3 - -import ( - "crypto/tls" - "errors" - "fmt" - "net" - "net/url" - "strconv" - "strings" - "sync" - "time" - - "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes" - - "golang.org/x/net/context" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/credentials" - "google.golang.org/grpc/keepalive" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" -) - -var ( - ErrNoAvailableEndpoints = errors.New("etcdclient: no available endpoints") - ErrOldCluster = errors.New("etcdclient: old cluster version") -) - -// Client provides and manages an etcd v3 client session. -type Client struct { - Cluster - KV - Lease - Watcher - Auth - Maintenance - - conn *grpc.ClientConn - dialerrc chan error - - cfg Config - creds *credentials.TransportCredentials - balancer *healthBalancer - mu *sync.Mutex - - ctx context.Context - cancel context.CancelFunc - - // Username is a user name for authentication. - Username string - // Password is a password for authentication. - Password string - // tokenCred is an instance of WithPerRPCCredentials()'s argument - tokenCred *authTokenCredential - - callOpts []grpc.CallOption -} - -// New creates a new etcdv3 client from a given configuration. -func New(cfg Config) (*Client, error) { - if len(cfg.Endpoints) == 0 { - return nil, ErrNoAvailableEndpoints - } - - return newClient(&cfg) -} - -// NewCtxClient creates a client with a context but no underlying grpc -// connection. This is useful for embedded cases that override the -// service interface implementations and do not need connection management. -func NewCtxClient(ctx context.Context) *Client { - cctx, cancel := context.WithCancel(ctx) - return &Client{ctx: cctx, cancel: cancel} -} - -// NewFromURL creates a new etcdv3 client from a URL. -func NewFromURL(url string) (*Client, error) { - return New(Config{Endpoints: []string{url}}) -} - -// Close shuts down the client's etcd connections. -func (c *Client) Close() error { - c.cancel() - c.Watcher.Close() - c.Lease.Close() - if c.conn != nil { - return toErr(c.ctx, c.conn.Close()) - } - return c.ctx.Err() -} - -// Ctx is a context for "out of band" messages (e.g., for sending -// "clean up" message when another context is canceled). It is -// canceled on client Close(). -func (c *Client) Ctx() context.Context { return c.ctx } - -// Endpoints lists the registered endpoints for the client. -func (c *Client) Endpoints() (eps []string) { - // copy the slice; protect original endpoints from being changed - eps = make([]string, len(c.cfg.Endpoints)) - copy(eps, c.cfg.Endpoints) - return -} - -// SetEndpoints updates client's endpoints. -func (c *Client) SetEndpoints(eps ...string) { - c.mu.Lock() - c.cfg.Endpoints = eps - c.mu.Unlock() - c.balancer.updateAddrs(eps...) - - // updating notifyCh can trigger new connections, - // need update addrs if all connections are down - // or addrs does not include pinAddr. - c.balancer.mu.RLock() - update := !hasAddr(c.balancer.addrs, c.balancer.pinAddr) - c.balancer.mu.RUnlock() - if update { - select { - case c.balancer.updateAddrsC <- notifyNext: - case <-c.balancer.stopc: - } - } -} - -// Sync synchronizes client's endpoints with the known endpoints from the etcd membership. -func (c *Client) Sync(ctx context.Context) error { - mresp, err := c.MemberList(ctx) - if err != nil { - return err - } - var eps []string - for _, m := range mresp.Members { - eps = append(eps, m.ClientURLs...) - } - c.SetEndpoints(eps...) - return nil -} - -func (c *Client) autoSync() { - if c.cfg.AutoSyncInterval == time.Duration(0) { - return - } - - for { - select { - case <-c.ctx.Done(): - return - case <-time.After(c.cfg.AutoSyncInterval): - ctx, cancel := context.WithTimeout(c.ctx, 5*time.Second) - err := c.Sync(ctx) - cancel() - if err != nil && err != c.ctx.Err() { - logger.Println("Auto sync endpoints failed:", err) - } - } - } -} - -type authTokenCredential struct { - token string - tokenMu *sync.RWMutex -} - -func (cred authTokenCredential) RequireTransportSecurity() bool { - return false -} - -func (cred authTokenCredential) GetRequestMetadata(ctx context.Context, s ...string) (map[string]string, error) { - cred.tokenMu.RLock() - defer cred.tokenMu.RUnlock() - return map[string]string{ - "token": cred.token, - }, nil -} - -func parseEndpoint(endpoint string) (proto string, host string, scheme string) { - proto = "tcp" - host = endpoint - url, uerr := url.Parse(endpoint) - if uerr != nil || !strings.Contains(endpoint, "://") { - return proto, host, scheme - } - scheme = url.Scheme - - // strip scheme:// prefix since grpc dials by host - host = url.Host - switch url.Scheme { - case "http", "https": - case "unix", "unixs": - proto = "unix" - host = url.Host + url.Path - default: - proto, host = "", "" - } - return proto, host, scheme -} - -func (c *Client) processCreds(scheme string) (creds *credentials.TransportCredentials) { - creds = c.creds - switch scheme { - case "unix": - case "http": - creds = nil - case "https", "unixs": - if creds != nil { - break - } - tlsconfig := &tls.Config{} - emptyCreds := credentials.NewTLS(tlsconfig) - creds = &emptyCreds - default: - creds = nil - } - return creds -} - -// dialSetupOpts gives the dial opts prior to any authentication -func (c *Client) dialSetupOpts(endpoint string, dopts ...grpc.DialOption) (opts []grpc.DialOption) { - if c.cfg.DialTimeout > 0 { - opts = []grpc.DialOption{grpc.WithTimeout(c.cfg.DialTimeout)} - } - if c.cfg.DialKeepAliveTime > 0 { - params := keepalive.ClientParameters{ - Time: c.cfg.DialKeepAliveTime, - Timeout: c.cfg.DialKeepAliveTimeout, - } - opts = append(opts, grpc.WithKeepaliveParams(params)) - } - opts = append(opts, dopts...) - - f := func(host string, t time.Duration) (net.Conn, error) { - proto, host, _ := parseEndpoint(c.balancer.endpoint(host)) - if host == "" && endpoint != "" { - // dialing an endpoint not in the balancer; use - // endpoint passed into dial - proto, host, _ = parseEndpoint(endpoint) - } - if proto == "" { - return nil, fmt.Errorf("unknown scheme for %q", host) - } - select { - case <-c.ctx.Done(): - return nil, c.ctx.Err() - default: - } - dialer := &net.Dialer{Timeout: t} - conn, err := dialer.DialContext(c.ctx, proto, host) - if err != nil { - select { - case c.dialerrc <- err: - default: - } - } - return conn, err - } - opts = append(opts, grpc.WithDialer(f)) - - creds := c.creds - if _, _, scheme := parseEndpoint(endpoint); len(scheme) != 0 { - creds = c.processCreds(scheme) - } - if creds != nil { - opts = append(opts, grpc.WithTransportCredentials(*creds)) - } else { - opts = append(opts, grpc.WithInsecure()) - } - - return opts -} - -// Dial connects to a single endpoint using the client's config. -func (c *Client) Dial(endpoint string) (*grpc.ClientConn, error) { - return c.dial(endpoint) -} - -func (c *Client) getToken(ctx context.Context) error { - var err error // return last error in a case of fail - var auth *authenticator - - for i := 0; i < len(c.cfg.Endpoints); i++ { - endpoint := c.cfg.Endpoints[i] - host := getHost(endpoint) - // use dial options without dopts to avoid reusing the client balancer - auth, err = newAuthenticator(host, c.dialSetupOpts(endpoint), c) - if err != nil { - continue - } - defer auth.close() - - var resp *AuthenticateResponse - resp, err = auth.authenticate(ctx, c.Username, c.Password) - if err != nil { - continue - } - - c.tokenCred.tokenMu.Lock() - c.tokenCred.token = resp.Token - c.tokenCred.tokenMu.Unlock() - - return nil - } - - return err -} - -func (c *Client) dial(endpoint string, dopts ...grpc.DialOption) (*grpc.ClientConn, error) { - opts := c.dialSetupOpts(endpoint, dopts...) - host := getHost(endpoint) - if c.Username != "" && c.Password != "" { - c.tokenCred = &authTokenCredential{ - tokenMu: &sync.RWMutex{}, - } - - ctx := c.ctx - if c.cfg.DialTimeout > 0 { - cctx, cancel := context.WithTimeout(ctx, c.cfg.DialTimeout) - defer cancel() - ctx = cctx - } - - err := c.getToken(ctx) - if err != nil { - if toErr(ctx, err) != rpctypes.ErrAuthNotEnabled { - if err == ctx.Err() && ctx.Err() != c.ctx.Err() { - err = context.DeadlineExceeded - } - return nil, err - } - } else { - opts = append(opts, grpc.WithPerRPCCredentials(c.tokenCred)) - } - } - - opts = append(opts, c.cfg.DialOptions...) - - conn, err := grpc.DialContext(c.ctx, host, opts...) - if err != nil { - return nil, err - } - return conn, nil -} - -// WithRequireLeader requires client requests to only succeed -// when the cluster has a leader. -func WithRequireLeader(ctx context.Context) context.Context { - md := metadata.Pairs(rpctypes.MetadataRequireLeaderKey, rpctypes.MetadataHasLeader) - return metadata.NewOutgoingContext(ctx, md) -} - -func newClient(cfg *Config) (*Client, error) { - if cfg == nil { - cfg = &Config{} - } - var creds *credentials.TransportCredentials - if cfg.TLS != nil { - c := credentials.NewTLS(cfg.TLS) - creds = &c - } - - // use a temporary skeleton client to bootstrap first connection - baseCtx := context.TODO() - if cfg.Context != nil { - baseCtx = cfg.Context - } - - ctx, cancel := context.WithCancel(baseCtx) - client := &Client{ - conn: nil, - dialerrc: make(chan error, 1), - cfg: *cfg, - creds: creds, - ctx: ctx, - cancel: cancel, - mu: new(sync.Mutex), - callOpts: defaultCallOpts, - } - if cfg.Username != "" && cfg.Password != "" { - client.Username = cfg.Username - client.Password = cfg.Password - } - if cfg.MaxCallSendMsgSize > 0 || cfg.MaxCallRecvMsgSize > 0 { - if cfg.MaxCallRecvMsgSize > 0 && cfg.MaxCallSendMsgSize > cfg.MaxCallRecvMsgSize { - return nil, fmt.Errorf("gRPC message recv limit (%d bytes) must be greater than send limit (%d bytes)", cfg.MaxCallRecvMsgSize, cfg.MaxCallSendMsgSize) - } - callOpts := []grpc.CallOption{ - defaultFailFast, - defaultMaxCallSendMsgSize, - defaultMaxCallRecvMsgSize, - } - if cfg.MaxCallSendMsgSize > 0 { - callOpts[1] = grpc.MaxCallSendMsgSize(cfg.MaxCallSendMsgSize) - } - if cfg.MaxCallRecvMsgSize > 0 { - callOpts[2] = grpc.MaxCallRecvMsgSize(cfg.MaxCallRecvMsgSize) - } - client.callOpts = callOpts - } - - client.balancer = newHealthBalancer(cfg.Endpoints, cfg.DialTimeout, func(ep string) (bool, error) { - return grpcHealthCheck(client, ep) - }) - - // use Endpoints[0] so that for https:// without any tls config given, then - // grpc will assume the certificate server name is the endpoint host. - conn, err := client.dial(cfg.Endpoints[0], grpc.WithBalancer(client.balancer)) - if err != nil { - client.cancel() - client.balancer.Close() - return nil, err - } - client.conn = conn - - // wait for a connection - if cfg.DialTimeout > 0 { - hasConn := false - waitc := time.After(cfg.DialTimeout) - select { - case <-client.balancer.ready(): - hasConn = true - case <-ctx.Done(): - case <-waitc: - } - if !hasConn { - err := context.DeadlineExceeded - select { - case err = <-client.dialerrc: - default: - } - client.cancel() - client.balancer.Close() - conn.Close() - return nil, err - } - } - - client.Cluster = NewCluster(client) - client.KV = NewKV(client) - client.Lease = NewLease(client) - client.Watcher = NewWatcher(client) - client.Auth = NewAuth(client) - client.Maintenance = NewMaintenance(client) - - if cfg.RejectOldCluster { - if err := client.checkVersion(); err != nil { - client.Close() - return nil, err - } - } - - go client.autoSync() - return client, nil -} - -func (c *Client) checkVersion() (err error) { - var wg sync.WaitGroup - errc := make(chan error, len(c.cfg.Endpoints)) - ctx, cancel := context.WithCancel(c.ctx) - if c.cfg.DialTimeout > 0 { - ctx, cancel = context.WithTimeout(ctx, c.cfg.DialTimeout) - } - wg.Add(len(c.cfg.Endpoints)) - for _, ep := range c.cfg.Endpoints { - // if cluster is current, any endpoint gives a recent version - go func(e string) { - defer wg.Done() - resp, rerr := c.Status(ctx, e) - if rerr != nil { - errc <- rerr - return - } - vs := strings.Split(resp.Version, ".") - maj, min := 0, 0 - if len(vs) >= 2 { - maj, _ = strconv.Atoi(vs[0]) - min, rerr = strconv.Atoi(vs[1]) - } - if maj < 3 || (maj == 3 && min < 2) { - rerr = ErrOldCluster - } - errc <- rerr - }(ep) - } - // wait for success - for i := 0; i < len(c.cfg.Endpoints); i++ { - if err = <-errc; err == nil { - break - } - } - cancel() - wg.Wait() - return err -} - -// ActiveConnection returns the current in-use connection -func (c *Client) ActiveConnection() *grpc.ClientConn { return c.conn } - -// isHaltErr returns true if the given error and context indicate no forward -// progress can be made, even after reconnecting. -func isHaltErr(ctx context.Context, err error) bool { - if ctx != nil && ctx.Err() != nil { - return true - } - if err == nil { - return false - } - ev, _ := status.FromError(err) - // Unavailable codes mean the system will be right back. - // (e.g., can't connect, lost leader) - // Treat Internal codes as if something failed, leaving the - // system in an inconsistent state, but retrying could make progress. - // (e.g., failed in middle of send, corrupted frame) - // TODO: are permanent Internal errors possible from grpc? - return ev.Code() != codes.Unavailable && ev.Code() != codes.Internal -} - -func toErr(ctx context.Context, err error) error { - if err == nil { - return nil - } - err = rpctypes.Error(err) - if _, ok := err.(rpctypes.EtcdError); ok { - return err - } - ev, _ := status.FromError(err) - code := ev.Code() - switch code { - case codes.DeadlineExceeded: - fallthrough - case codes.Canceled: - if ctx.Err() != nil { - err = ctx.Err() - } - case codes.Unavailable: - case codes.FailedPrecondition: - err = grpc.ErrClientConnClosing - } - return err -} - -func canceledByCaller(stopCtx context.Context, err error) bool { - if stopCtx.Err() == nil || err == nil { - return false - } - - return err == context.Canceled || err == context.DeadlineExceeded -} diff --git a/vendor/github.com/coreos/etcd/clientv3/cluster.go b/vendor/github.com/coreos/etcd/clientv3/cluster.go deleted file mode 100644 index 93637dd..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/cluster.go +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright 2016 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package clientv3 - -import ( - pb "github.com/coreos/etcd/etcdserver/etcdserverpb" - "github.com/coreos/etcd/pkg/types" - - "golang.org/x/net/context" - "google.golang.org/grpc" -) - -type ( - Member pb.Member - MemberListResponse pb.MemberListResponse - MemberAddResponse pb.MemberAddResponse - MemberRemoveResponse pb.MemberRemoveResponse - MemberUpdateResponse pb.MemberUpdateResponse -) - -type Cluster interface { - // MemberList lists the current cluster membership. - MemberList(ctx context.Context) (*MemberListResponse, error) - - // MemberAdd adds a new member into the cluster. - MemberAdd(ctx context.Context, peerAddrs []string) (*MemberAddResponse, error) - - // MemberRemove removes an existing member from the cluster. - MemberRemove(ctx context.Context, id uint64) (*MemberRemoveResponse, error) - - // MemberUpdate updates the peer addresses of the member. - MemberUpdate(ctx context.Context, id uint64, peerAddrs []string) (*MemberUpdateResponse, error) -} - -type cluster struct { - remote pb.ClusterClient - callOpts []grpc.CallOption -} - -func NewCluster(c *Client) Cluster { - api := &cluster{remote: RetryClusterClient(c)} - if c != nil { - api.callOpts = c.callOpts - } - return api -} - -func NewClusterFromClusterClient(remote pb.ClusterClient, c *Client) Cluster { - api := &cluster{remote: remote} - if c != nil { - api.callOpts = c.callOpts - } - return api -} - -func (c *cluster) MemberAdd(ctx context.Context, peerAddrs []string) (*MemberAddResponse, error) { - // fail-fast before panic in rafthttp - if _, err := types.NewURLs(peerAddrs); err != nil { - return nil, err - } - - r := &pb.MemberAddRequest{PeerURLs: peerAddrs} - resp, err := c.remote.MemberAdd(ctx, r, c.callOpts...) - if err != nil { - return nil, toErr(ctx, err) - } - return (*MemberAddResponse)(resp), nil -} - -func (c *cluster) MemberRemove(ctx context.Context, id uint64) (*MemberRemoveResponse, error) { - r := &pb.MemberRemoveRequest{ID: id} - resp, err := c.remote.MemberRemove(ctx, r, c.callOpts...) - if err != nil { - return nil, toErr(ctx, err) - } - return (*MemberRemoveResponse)(resp), nil -} - -func (c *cluster) MemberUpdate(ctx context.Context, id uint64, peerAddrs []string) (*MemberUpdateResponse, error) { - // fail-fast before panic in rafthttp - if _, err := types.NewURLs(peerAddrs); err != nil { - return nil, err - } - - // it is safe to retry on update. - r := &pb.MemberUpdateRequest{ID: id, PeerURLs: peerAddrs} - resp, err := c.remote.MemberUpdate(ctx, r, c.callOpts...) - if err == nil { - return (*MemberUpdateResponse)(resp), nil - } - return nil, toErr(ctx, err) -} - -func (c *cluster) MemberList(ctx context.Context) (*MemberListResponse, error) { - // it is safe to retry on list. - resp, err := c.remote.MemberList(ctx, &pb.MemberListRequest{}, c.callOpts...) - if err == nil { - return (*MemberListResponse)(resp), nil - } - return nil, toErr(ctx, err) -} diff --git a/vendor/github.com/coreos/etcd/clientv3/compact_op.go b/vendor/github.com/coreos/etcd/clientv3/compact_op.go deleted file mode 100644 index 41e80c1..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/compact_op.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2016 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package clientv3 - -import ( - pb "github.com/coreos/etcd/etcdserver/etcdserverpb" -) - -// CompactOp represents a compact operation. -type CompactOp struct { - revision int64 - physical bool -} - -// CompactOption configures compact operation. -type CompactOption func(*CompactOp) - -func (op *CompactOp) applyCompactOpts(opts []CompactOption) { - for _, opt := range opts { - opt(op) - } -} - -// OpCompact wraps slice CompactOption to create a CompactOp. -func OpCompact(rev int64, opts ...CompactOption) CompactOp { - ret := CompactOp{revision: rev} - ret.applyCompactOpts(opts) - return ret -} - -func (op CompactOp) toRequest() *pb.CompactionRequest { - return &pb.CompactionRequest{Revision: op.revision, Physical: op.physical} -} - -// WithCompactPhysical makes Compact wait until all compacted entries are -// removed from the etcd server's storage. -func WithCompactPhysical() CompactOption { - return func(op *CompactOp) { op.physical = true } -} diff --git a/vendor/github.com/coreos/etcd/clientv3/compare.go b/vendor/github.com/coreos/etcd/clientv3/compare.go deleted file mode 100644 index 68a25fd..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/compare.go +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright 2016 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package clientv3 - -import ( - pb "github.com/coreos/etcd/etcdserver/etcdserverpb" -) - -type CompareTarget int -type CompareResult int - -const ( - CompareVersion CompareTarget = iota - CompareCreated - CompareModified - CompareValue -) - -type Cmp pb.Compare - -func Compare(cmp Cmp, result string, v interface{}) Cmp { - var r pb.Compare_CompareResult - - switch result { - case "=": - r = pb.Compare_EQUAL - case "!=": - r = pb.Compare_NOT_EQUAL - case ">": - r = pb.Compare_GREATER - case "<": - r = pb.Compare_LESS - default: - panic("Unknown result op") - } - - cmp.Result = r - switch cmp.Target { - case pb.Compare_VALUE: - val, ok := v.(string) - if !ok { - panic("bad compare value") - } - cmp.TargetUnion = &pb.Compare_Value{Value: []byte(val)} - case pb.Compare_VERSION: - cmp.TargetUnion = &pb.Compare_Version{Version: mustInt64(v)} - case pb.Compare_CREATE: - cmp.TargetUnion = &pb.Compare_CreateRevision{CreateRevision: mustInt64(v)} - case pb.Compare_MOD: - cmp.TargetUnion = &pb.Compare_ModRevision{ModRevision: mustInt64(v)} - default: - panic("Unknown compare type") - } - return cmp -} - -func Value(key string) Cmp { - return Cmp{Key: []byte(key), Target: pb.Compare_VALUE} -} - -func Version(key string) Cmp { - return Cmp{Key: []byte(key), Target: pb.Compare_VERSION} -} - -func CreateRevision(key string) Cmp { - return Cmp{Key: []byte(key), Target: pb.Compare_CREATE} -} - -func ModRevision(key string) Cmp { - return Cmp{Key: []byte(key), Target: pb.Compare_MOD} -} - -// KeyBytes returns the byte slice holding with the comparison key. -func (cmp *Cmp) KeyBytes() []byte { return cmp.Key } - -// WithKeyBytes sets the byte slice for the comparison key. -func (cmp *Cmp) WithKeyBytes(key []byte) { cmp.Key = key } - -// ValueBytes returns the byte slice holding the comparison value, if any. -func (cmp *Cmp) ValueBytes() []byte { - if tu, ok := cmp.TargetUnion.(*pb.Compare_Value); ok { - return tu.Value - } - return nil -} - -// WithValueBytes sets the byte slice for the comparison's value. -func (cmp *Cmp) WithValueBytes(v []byte) { cmp.TargetUnion.(*pb.Compare_Value).Value = v } - -// mustInt64 panics if val isn't an int or int64. It returns an int64 otherwise. -func mustInt64(val interface{}) int64 { - if v, ok := val.(int64); ok { - return v - } - if v, ok := val.(int); ok { - return int64(v) - } - panic("bad value") -} - -// mustInt64orLeaseID panics if val isn't a LeaseID, int or int64. It returns an -// int64 otherwise. -func mustInt64orLeaseID(val interface{}) int64 { - if v, ok := val.(LeaseID); ok { - return int64(v) - } - return mustInt64(val) -} diff --git a/vendor/github.com/coreos/etcd/clientv3/concurrency/doc.go b/vendor/github.com/coreos/etcd/clientv3/concurrency/doc.go deleted file mode 100644 index dcdbf51..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/concurrency/doc.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2016 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package concurrency implements concurrency operations on top of -// etcd such as distributed locks, barriers, and elections. -package concurrency diff --git a/vendor/github.com/coreos/etcd/clientv3/concurrency/election.go b/vendor/github.com/coreos/etcd/clientv3/concurrency/election.go deleted file mode 100644 index c092bde..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/concurrency/election.go +++ /dev/null @@ -1,246 +0,0 @@ -// Copyright 2016 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package concurrency - -import ( - "errors" - "fmt" - - v3 "github.com/coreos/etcd/clientv3" - pb "github.com/coreos/etcd/etcdserver/etcdserverpb" - "github.com/coreos/etcd/mvcc/mvccpb" - - "golang.org/x/net/context" -) - -var ( - ErrElectionNotLeader = errors.New("election: not leader") - ErrElectionNoLeader = errors.New("election: no leader") -) - -type Election struct { - session *Session - - keyPrefix string - - leaderKey string - leaderRev int64 - leaderSession *Session - hdr *pb.ResponseHeader -} - -// NewElection returns a new election on a given key prefix. -func NewElection(s *Session, pfx string) *Election { - return &Election{session: s, keyPrefix: pfx + "/"} -} - -// ResumeElection initializes an election with a known leader. -func ResumeElection(s *Session, pfx string, leaderKey string, leaderRev int64) *Election { - return &Election{ - session: s, - leaderKey: leaderKey, - leaderRev: leaderRev, - leaderSession: s, - } -} - -// Campaign puts a value as eligible for the election. It blocks until -// it is elected, an error occurs, or the context is cancelled. -func (e *Election) Campaign(ctx context.Context, val string) error { - s := e.session - client := e.session.Client() - - k := fmt.Sprintf("%s%x", e.keyPrefix, s.Lease()) - txn := client.Txn(ctx).If(v3.Compare(v3.CreateRevision(k), "=", 0)) - txn = txn.Then(v3.OpPut(k, val, v3.WithLease(s.Lease()))) - txn = txn.Else(v3.OpGet(k)) - resp, err := txn.Commit() - if err != nil { - return err - } - e.leaderKey, e.leaderRev, e.leaderSession = k, resp.Header.Revision, s - if !resp.Succeeded { - kv := resp.Responses[0].GetResponseRange().Kvs[0] - e.leaderRev = kv.CreateRevision - if string(kv.Value) != val { - if err = e.Proclaim(ctx, val); err != nil { - e.Resign(ctx) - return err - } - } - } - - _, err = waitDeletes(ctx, client, e.keyPrefix, e.leaderRev-1) - if err != nil { - // clean up in case of context cancel - select { - case <-ctx.Done(): - e.Resign(client.Ctx()) - default: - e.leaderSession = nil - } - return err - } - e.hdr = resp.Header - - return nil -} - -// Proclaim lets the leader announce a new value without another election. -func (e *Election) Proclaim(ctx context.Context, val string) error { - if e.leaderSession == nil { - return ErrElectionNotLeader - } - client := e.session.Client() - cmp := v3.Compare(v3.CreateRevision(e.leaderKey), "=", e.leaderRev) - txn := client.Txn(ctx).If(cmp) - txn = txn.Then(v3.OpPut(e.leaderKey, val, v3.WithLease(e.leaderSession.Lease()))) - tresp, terr := txn.Commit() - if terr != nil { - return terr - } - if !tresp.Succeeded { - e.leaderKey = "" - return ErrElectionNotLeader - } - - e.hdr = tresp.Header - return nil -} - -// Resign lets a leader start a new election. -func (e *Election) Resign(ctx context.Context) (err error) { - if e.leaderSession == nil { - return nil - } - client := e.session.Client() - cmp := v3.Compare(v3.CreateRevision(e.leaderKey), "=", e.leaderRev) - resp, err := client.Txn(ctx).If(cmp).Then(v3.OpDelete(e.leaderKey)).Commit() - if err == nil { - e.hdr = resp.Header - } - e.leaderKey = "" - e.leaderSession = nil - return err -} - -// Leader returns the leader value for the current election. -func (e *Election) Leader(ctx context.Context) (*v3.GetResponse, error) { - client := e.session.Client() - resp, err := client.Get(ctx, e.keyPrefix, v3.WithFirstCreate()...) - if err != nil { - return nil, err - } else if len(resp.Kvs) == 0 { - // no leader currently elected - return nil, ErrElectionNoLeader - } - return resp, nil -} - -// Observe returns a channel that reliably observes ordered leader proposals -// as GetResponse values on every current elected leader key. It will not -// necessarily fetch all historical leader updates, but will always post the -// most recent leader value. -// -// The channel closes when the context is canceled or the underlying watcher -// is otherwise disrupted. -func (e *Election) Observe(ctx context.Context) <-chan v3.GetResponse { - retc := make(chan v3.GetResponse) - go e.observe(ctx, retc) - return retc -} - -func (e *Election) observe(ctx context.Context, ch chan<- v3.GetResponse) { - client := e.session.Client() - - defer close(ch) - for { - resp, err := client.Get(ctx, e.keyPrefix, v3.WithFirstCreate()...) - if err != nil { - return - } - - var kv *mvccpb.KeyValue - var hdr *pb.ResponseHeader - - if len(resp.Kvs) == 0 { - cctx, cancel := context.WithCancel(ctx) - // wait for first key put on prefix - opts := []v3.OpOption{v3.WithRev(resp.Header.Revision), v3.WithPrefix()} - wch := client.Watch(cctx, e.keyPrefix, opts...) - for kv == nil { - wr, ok := <-wch - if !ok || wr.Err() != nil { - cancel() - return - } - // only accept puts; a delete will make observe() spin - for _, ev := range wr.Events { - if ev.Type == mvccpb.PUT { - hdr, kv = &wr.Header, ev.Kv - // may have multiple revs; hdr.rev = the last rev - // set to kv's rev in case batch has multiple Puts - hdr.Revision = kv.ModRevision - break - } - } - } - cancel() - } else { - hdr, kv = resp.Header, resp.Kvs[0] - } - - select { - case ch <- v3.GetResponse{Header: hdr, Kvs: []*mvccpb.KeyValue{kv}}: - case <-ctx.Done(): - return - } - - cctx, cancel := context.WithCancel(ctx) - wch := client.Watch(cctx, string(kv.Key), v3.WithRev(hdr.Revision+1)) - keyDeleted := false - for !keyDeleted { - wr, ok := <-wch - if !ok { - cancel() - return - } - for _, ev := range wr.Events { - if ev.Type == mvccpb.DELETE { - keyDeleted = true - break - } - resp.Header = &wr.Header - resp.Kvs = []*mvccpb.KeyValue{ev.Kv} - select { - case ch <- *resp: - case <-cctx.Done(): - cancel() - return - } - } - } - cancel() - } -} - -// Key returns the leader key if elected, empty string otherwise. -func (e *Election) Key() string { return e.leaderKey } - -// Rev returns the leader key's creation revision, if elected. -func (e *Election) Rev() int64 { return e.leaderRev } - -// Header is the response header from the last successful election proposal. -func (e *Election) Header() *pb.ResponseHeader { return e.hdr } diff --git a/vendor/github.com/coreos/etcd/clientv3/concurrency/key.go b/vendor/github.com/coreos/etcd/clientv3/concurrency/key.go deleted file mode 100644 index 9936737..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/concurrency/key.go +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2016 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package concurrency - -import ( - "fmt" - - v3 "github.com/coreos/etcd/clientv3" - pb "github.com/coreos/etcd/etcdserver/etcdserverpb" - "github.com/coreos/etcd/mvcc/mvccpb" - - "golang.org/x/net/context" -) - -func waitDelete(ctx context.Context, client *v3.Client, key string, rev int64) error { - cctx, cancel := context.WithCancel(ctx) - defer cancel() - - var wr v3.WatchResponse - wch := client.Watch(cctx, key, v3.WithRev(rev)) - for wr = range wch { - for _, ev := range wr.Events { - if ev.Type == mvccpb.DELETE { - return nil - } - } - } - if err := wr.Err(); err != nil { - return err - } - if err := ctx.Err(); err != nil { - return err - } - return fmt.Errorf("lost watcher waiting for delete") -} - -// waitDeletes efficiently waits until all keys matching the prefix and no greater -// than the create revision. -func waitDeletes(ctx context.Context, client *v3.Client, pfx string, maxCreateRev int64) (*pb.ResponseHeader, error) { - getOpts := append(v3.WithLastCreate(), v3.WithMaxCreateRev(maxCreateRev)) - for { - resp, err := client.Get(ctx, pfx, getOpts...) - if err != nil { - return nil, err - } - if len(resp.Kvs) == 0 { - return resp.Header, nil - } - lastKey := string(resp.Kvs[0].Key) - if err = waitDelete(ctx, client, lastKey, resp.Header.Revision); err != nil { - return nil, err - } - } -} diff --git a/vendor/github.com/coreos/etcd/clientv3/concurrency/mutex.go b/vendor/github.com/coreos/etcd/clientv3/concurrency/mutex.go deleted file mode 100644 index 736a9d3..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/concurrency/mutex.go +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2016 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package concurrency - -import ( - "fmt" - "sync" - - v3 "github.com/coreos/etcd/clientv3" - pb "github.com/coreos/etcd/etcdserver/etcdserverpb" - - "golang.org/x/net/context" -) - -// Mutex implements the sync Locker interface with etcd -type Mutex struct { - s *Session - - pfx string - myKey string - myRev int64 - hdr *pb.ResponseHeader -} - -func NewMutex(s *Session, pfx string) *Mutex { - return &Mutex{s, pfx + "/", "", -1, nil} -} - -// Lock locks the mutex with a cancelable context. If the context is canceled -// while trying to acquire the lock, the mutex tries to clean its stale lock entry. -func (m *Mutex) Lock(ctx context.Context) error { - s := m.s - client := m.s.Client() - - m.myKey = fmt.Sprintf("%s%x", m.pfx, s.Lease()) - cmp := v3.Compare(v3.CreateRevision(m.myKey), "=", 0) - // put self in lock waiters via myKey; oldest waiter holds lock - put := v3.OpPut(m.myKey, "", v3.WithLease(s.Lease())) - // reuse key in case this session already holds the lock - get := v3.OpGet(m.myKey) - // fetch current holder to complete uncontended path with only one RPC - getOwner := v3.OpGet(m.pfx, v3.WithFirstCreate()...) - resp, err := client.Txn(ctx).If(cmp).Then(put, getOwner).Else(get, getOwner).Commit() - if err != nil { - return err - } - m.myRev = resp.Header.Revision - if !resp.Succeeded { - m.myRev = resp.Responses[0].GetResponseRange().Kvs[0].CreateRevision - } - // if no key on prefix / the minimum rev is key, already hold the lock - ownerKey := resp.Responses[1].GetResponseRange().Kvs - if len(ownerKey) == 0 || ownerKey[0].CreateRevision == m.myRev { - m.hdr = resp.Header - return nil - } - - // wait for deletion revisions prior to myKey - hdr, werr := waitDeletes(ctx, client, m.pfx, m.myRev-1) - // release lock key if cancelled - select { - case <-ctx.Done(): - m.Unlock(client.Ctx()) - default: - m.hdr = hdr - } - return werr -} - -func (m *Mutex) Unlock(ctx context.Context) error { - client := m.s.Client() - if _, err := client.Delete(ctx, m.myKey); err != nil { - return err - } - m.myKey = "\x00" - m.myRev = -1 - return nil -} - -func (m *Mutex) IsOwner() v3.Cmp { - return v3.Compare(v3.CreateRevision(m.myKey), "=", m.myRev) -} - -func (m *Mutex) Key() string { return m.myKey } - -// Header is the response header received from etcd on acquiring the lock. -func (m *Mutex) Header() *pb.ResponseHeader { return m.hdr } - -type lockerMutex struct{ *Mutex } - -func (lm *lockerMutex) Lock() { - client := lm.s.Client() - if err := lm.Mutex.Lock(client.Ctx()); err != nil { - panic(err) - } -} -func (lm *lockerMutex) Unlock() { - client := lm.s.Client() - if err := lm.Mutex.Unlock(client.Ctx()); err != nil { - panic(err) - } -} - -// NewLocker creates a sync.Locker backed by an etcd mutex. -func NewLocker(s *Session, pfx string) sync.Locker { - return &lockerMutex{NewMutex(s, pfx)} -} diff --git a/vendor/github.com/coreos/etcd/clientv3/concurrency/session.go b/vendor/github.com/coreos/etcd/clientv3/concurrency/session.go deleted file mode 100644 index 55cb553..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/concurrency/session.go +++ /dev/null @@ -1,142 +0,0 @@ -// Copyright 2016 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package concurrency - -import ( - "time" - - v3 "github.com/coreos/etcd/clientv3" - - "golang.org/x/net/context" -) - -const defaultSessionTTL = 60 - -// Session represents a lease kept alive for the lifetime of a client. -// Fault-tolerant applications may use sessions to reason about liveness. -type Session struct { - client *v3.Client - opts *sessionOptions - id v3.LeaseID - - cancel context.CancelFunc - donec <-chan struct{} -} - -// NewSession gets the leased session for a client. -func NewSession(client *v3.Client, opts ...SessionOption) (*Session, error) { - ops := &sessionOptions{ttl: defaultSessionTTL, ctx: client.Ctx()} - for _, opt := range opts { - opt(ops) - } - - id := ops.leaseID - if id == v3.NoLease { - resp, err := client.Grant(ops.ctx, int64(ops.ttl)) - if err != nil { - return nil, err - } - id = v3.LeaseID(resp.ID) - } - - ctx, cancel := context.WithCancel(ops.ctx) - keepAlive, err := client.KeepAlive(ctx, id) - if err != nil || keepAlive == nil { - cancel() - return nil, err - } - - donec := make(chan struct{}) - s := &Session{client: client, opts: ops, id: id, cancel: cancel, donec: donec} - - // keep the lease alive until client error or cancelled context - go func() { - defer close(donec) - for range keepAlive { - // eat messages until keep alive channel closes - } - }() - - return s, nil -} - -// Client is the etcd client that is attached to the session. -func (s *Session) Client() *v3.Client { - return s.client -} - -// Lease is the lease ID for keys bound to the session. -func (s *Session) Lease() v3.LeaseID { return s.id } - -// Done returns a channel that closes when the lease is orphaned, expires, or -// is otherwise no longer being refreshed. -func (s *Session) Done() <-chan struct{} { return s.donec } - -// Orphan ends the refresh for the session lease. This is useful -// in case the state of the client connection is indeterminate (revoke -// would fail) or when transferring lease ownership. -func (s *Session) Orphan() { - s.cancel() - <-s.donec -} - -// Close orphans the session and revokes the session lease. -func (s *Session) Close() error { - s.Orphan() - // if revoke takes longer than the ttl, lease is expired anyway - ctx, cancel := context.WithTimeout(s.opts.ctx, time.Duration(s.opts.ttl)*time.Second) - _, err := s.client.Revoke(ctx, s.id) - cancel() - return err -} - -type sessionOptions struct { - ttl int - leaseID v3.LeaseID - ctx context.Context -} - -// SessionOption configures Session. -type SessionOption func(*sessionOptions) - -// WithTTL configures the session's TTL in seconds. -// If TTL is <= 0, the default 60 seconds TTL will be used. -func WithTTL(ttl int) SessionOption { - return func(so *sessionOptions) { - if ttl > 0 { - so.ttl = ttl - } - } -} - -// WithLease specifies the existing leaseID to be used for the session. -// This is useful in process restart scenario, for example, to reclaim -// leadership from an election prior to restart. -func WithLease(leaseID v3.LeaseID) SessionOption { - return func(so *sessionOptions) { - so.leaseID = leaseID - } -} - -// WithContext assigns a context to the session instead of defaulting to -// using the client context. This is useful for canceling NewSession and -// Close operations immediately without having to close the client. If the -// context is canceled before Close() completes, the session's lease will be -// abandoned and left to expire instead of being revoked. -func WithContext(ctx context.Context) SessionOption { - return func(so *sessionOptions) { - so.ctx = ctx - } -} diff --git a/vendor/github.com/coreos/etcd/clientv3/concurrency/stm.go b/vendor/github.com/coreos/etcd/clientv3/concurrency/stm.go deleted file mode 100644 index 6bfd70e..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/concurrency/stm.go +++ /dev/null @@ -1,388 +0,0 @@ -// Copyright 2016 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package concurrency - -import ( - "math" - - v3 "github.com/coreos/etcd/clientv3" - - "golang.org/x/net/context" -) - -// STM is an interface for software transactional memory. -type STM interface { - // Get returns the value for a key and inserts the key in the txn's read set. - // If Get fails, it aborts the transaction with an error, never returning. - Get(key ...string) string - // Put adds a value for a key to the write set. - Put(key, val string, opts ...v3.OpOption) - // Rev returns the revision of a key in the read set. - Rev(key string) int64 - // Del deletes a key. - Del(key string) - - // commit attempts to apply the txn's changes to the server. - commit() *v3.TxnResponse - reset() -} - -// Isolation is an enumeration of transactional isolation levels which -// describes how transactions should interfere and conflict. -type Isolation int - -const ( - // SerializableSnapshot provides serializable isolation and also checks - // for write conflicts. - SerializableSnapshot Isolation = iota - // Serializable reads within the same transaction attempt return data - // from the at the revision of the first read. - Serializable - // RepeatableReads reads within the same transaction attempt always - // return the same data. - RepeatableReads - // ReadCommitted reads keys from any committed revision. - ReadCommitted -) - -// stmError safely passes STM errors through panic to the STM error channel. -type stmError struct{ err error } - -type stmOptions struct { - iso Isolation - ctx context.Context - prefetch []string -} - -type stmOption func(*stmOptions) - -// WithIsolation specifies the transaction isolation level. -func WithIsolation(lvl Isolation) stmOption { - return func(so *stmOptions) { so.iso = lvl } -} - -// WithAbortContext specifies the context for permanently aborting the transaction. -func WithAbortContext(ctx context.Context) stmOption { - return func(so *stmOptions) { so.ctx = ctx } -} - -// WithPrefetch is a hint to prefetch a list of keys before trying to apply. -// If an STM transaction will unconditionally fetch a set of keys, prefetching -// those keys will save the round-trip cost from requesting each key one by one -// with Get(). -func WithPrefetch(keys ...string) stmOption { - return func(so *stmOptions) { so.prefetch = append(so.prefetch, keys...) } -} - -// NewSTM initiates a new STM instance, using serializable snapshot isolation by default. -func NewSTM(c *v3.Client, apply func(STM) error, so ...stmOption) (*v3.TxnResponse, error) { - opts := &stmOptions{ctx: c.Ctx()} - for _, f := range so { - f(opts) - } - if len(opts.prefetch) != 0 { - f := apply - apply = func(s STM) error { - s.Get(opts.prefetch...) - return f(s) - } - } - return runSTM(mkSTM(c, opts), apply) -} - -func mkSTM(c *v3.Client, opts *stmOptions) STM { - switch opts.iso { - case SerializableSnapshot: - s := &stmSerializable{ - stm: stm{client: c, ctx: opts.ctx}, - prefetch: make(map[string]*v3.GetResponse), - } - s.conflicts = func() []v3.Cmp { - return append(s.rset.cmps(), s.wset.cmps(s.rset.first()+1)...) - } - return s - case Serializable: - s := &stmSerializable{ - stm: stm{client: c, ctx: opts.ctx}, - prefetch: make(map[string]*v3.GetResponse), - } - s.conflicts = func() []v3.Cmp { return s.rset.cmps() } - return s - case RepeatableReads: - s := &stm{client: c, ctx: opts.ctx, getOpts: []v3.OpOption{v3.WithSerializable()}} - s.conflicts = func() []v3.Cmp { return s.rset.cmps() } - return s - case ReadCommitted: - s := &stm{client: c, ctx: opts.ctx, getOpts: []v3.OpOption{v3.WithSerializable()}} - s.conflicts = func() []v3.Cmp { return nil } - return s - default: - panic("unsupported stm") - } -} - -type stmResponse struct { - resp *v3.TxnResponse - err error -} - -func runSTM(s STM, apply func(STM) error) (*v3.TxnResponse, error) { - outc := make(chan stmResponse, 1) - go func() { - defer func() { - if r := recover(); r != nil { - e, ok := r.(stmError) - if !ok { - // client apply panicked - panic(r) - } - outc <- stmResponse{nil, e.err} - } - }() - var out stmResponse - for { - s.reset() - if out.err = apply(s); out.err != nil { - break - } - if out.resp = s.commit(); out.resp != nil { - break - } - } - outc <- out - }() - r := <-outc - return r.resp, r.err -} - -// stm implements repeatable-read software transactional memory over etcd -type stm struct { - client *v3.Client - ctx context.Context - // rset holds read key values and revisions - rset readSet - // wset holds overwritten keys and their values - wset writeSet - // getOpts are the opts used for gets - getOpts []v3.OpOption - // conflicts computes the current conflicts on the txn - conflicts func() []v3.Cmp -} - -type stmPut struct { - val string - op v3.Op -} - -type readSet map[string]*v3.GetResponse - -func (rs readSet) add(keys []string, txnresp *v3.TxnResponse) { - for i, resp := range txnresp.Responses { - rs[keys[i]] = (*v3.GetResponse)(resp.GetResponseRange()) - } -} - -// first returns the store revision from the first fetch -func (rs readSet) first() int64 { - ret := int64(math.MaxInt64 - 1) - for _, resp := range rs { - if rev := resp.Header.Revision; rev < ret { - ret = rev - } - } - return ret -} - -// cmps guards the txn from updates to read set -func (rs readSet) cmps() []v3.Cmp { - cmps := make([]v3.Cmp, 0, len(rs)) - for k, rk := range rs { - cmps = append(cmps, isKeyCurrent(k, rk)) - } - return cmps -} - -type writeSet map[string]stmPut - -func (ws writeSet) get(keys ...string) *stmPut { - for _, key := range keys { - if wv, ok := ws[key]; ok { - return &wv - } - } - return nil -} - -// cmps returns a cmp list testing no writes have happened past rev -func (ws writeSet) cmps(rev int64) []v3.Cmp { - cmps := make([]v3.Cmp, 0, len(ws)) - for key := range ws { - cmps = append(cmps, v3.Compare(v3.ModRevision(key), "<", rev)) - } - return cmps -} - -// puts is the list of ops for all pending writes -func (ws writeSet) puts() []v3.Op { - puts := make([]v3.Op, 0, len(ws)) - for _, v := range ws { - puts = append(puts, v.op) - } - return puts -} - -func (s *stm) Get(keys ...string) string { - if wv := s.wset.get(keys...); wv != nil { - return wv.val - } - return respToValue(s.fetch(keys...)) -} - -func (s *stm) Put(key, val string, opts ...v3.OpOption) { - s.wset[key] = stmPut{val, v3.OpPut(key, val, opts...)} -} - -func (s *stm) Del(key string) { s.wset[key] = stmPut{"", v3.OpDelete(key)} } - -func (s *stm) Rev(key string) int64 { - if resp := s.fetch(key); resp != nil && len(resp.Kvs) != 0 { - return resp.Kvs[0].ModRevision - } - return 0 -} - -func (s *stm) commit() *v3.TxnResponse { - txnresp, err := s.client.Txn(s.ctx).If(s.conflicts()...).Then(s.wset.puts()...).Commit() - if err != nil { - panic(stmError{err}) - } - if txnresp.Succeeded { - return txnresp - } - return nil -} - -func (s *stm) fetch(keys ...string) *v3.GetResponse { - if len(keys) == 0 { - return nil - } - ops := make([]v3.Op, len(keys)) - for i, key := range keys { - if resp, ok := s.rset[key]; ok { - return resp - } - ops[i] = v3.OpGet(key, s.getOpts...) - } - txnresp, err := s.client.Txn(s.ctx).Then(ops...).Commit() - if err != nil { - panic(stmError{err}) - } - s.rset.add(keys, txnresp) - return (*v3.GetResponse)(txnresp.Responses[0].GetResponseRange()) -} - -func (s *stm) reset() { - s.rset = make(map[string]*v3.GetResponse) - s.wset = make(map[string]stmPut) -} - -type stmSerializable struct { - stm - prefetch map[string]*v3.GetResponse -} - -func (s *stmSerializable) Get(keys ...string) string { - if wv := s.wset.get(keys...); wv != nil { - return wv.val - } - firstRead := len(s.rset) == 0 - for _, key := range keys { - if resp, ok := s.prefetch[key]; ok { - delete(s.prefetch, key) - s.rset[key] = resp - } - } - resp := s.stm.fetch(keys...) - if firstRead { - // txn's base revision is defined by the first read - s.getOpts = []v3.OpOption{ - v3.WithRev(resp.Header.Revision), - v3.WithSerializable(), - } - } - return respToValue(resp) -} - -func (s *stmSerializable) Rev(key string) int64 { - s.Get(key) - return s.stm.Rev(key) -} - -func (s *stmSerializable) gets() ([]string, []v3.Op) { - keys := make([]string, 0, len(s.rset)) - ops := make([]v3.Op, 0, len(s.rset)) - for k := range s.rset { - keys = append(keys, k) - ops = append(ops, v3.OpGet(k)) - } - return keys, ops -} - -func (s *stmSerializable) commit() *v3.TxnResponse { - keys, getops := s.gets() - txn := s.client.Txn(s.ctx).If(s.conflicts()...).Then(s.wset.puts()...) - // use Else to prefetch keys in case of conflict to save a round trip - txnresp, err := txn.Else(getops...).Commit() - if err != nil { - panic(stmError{err}) - } - if txnresp.Succeeded { - return txnresp - } - // load prefetch with Else data - s.rset.add(keys, txnresp) - s.prefetch = s.rset - s.getOpts = nil - return nil -} - -func isKeyCurrent(k string, r *v3.GetResponse) v3.Cmp { - if len(r.Kvs) != 0 { - return v3.Compare(v3.ModRevision(k), "=", r.Kvs[0].ModRevision) - } - return v3.Compare(v3.ModRevision(k), "=", 0) -} - -func respToValue(resp *v3.GetResponse) string { - if resp == nil || len(resp.Kvs) == 0 { - return "" - } - return string(resp.Kvs[0].Value) -} - -// NewSTMRepeatable is deprecated. -func NewSTMRepeatable(ctx context.Context, c *v3.Client, apply func(STM) error) (*v3.TxnResponse, error) { - return NewSTM(c, apply, WithAbortContext(ctx), WithIsolation(RepeatableReads)) -} - -// NewSTMSerializable is deprecated. -func NewSTMSerializable(ctx context.Context, c *v3.Client, apply func(STM) error) (*v3.TxnResponse, error) { - return NewSTM(c, apply, WithAbortContext(ctx), WithIsolation(Serializable)) -} - -// NewSTMReadCommitted is deprecated. -func NewSTMReadCommitted(ctx context.Context, c *v3.Client, apply func(STM) error) (*v3.TxnResponse, error) { - return NewSTM(c, apply, WithAbortContext(ctx), WithIsolation(ReadCommitted)) -} diff --git a/vendor/github.com/coreos/etcd/clientv3/config.go b/vendor/github.com/coreos/etcd/clientv3/config.go deleted file mode 100644 index fee12ea..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/config.go +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2016 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package clientv3 - -import ( - "crypto/tls" - "time" - - "golang.org/x/net/context" - "google.golang.org/grpc" -) - -type Config struct { - // Endpoints is a list of URLs. - Endpoints []string `json:"endpoints"` - - // AutoSyncInterval is the interval to update endpoints with its latest members. - // 0 disables auto-sync. By default auto-sync is disabled. - AutoSyncInterval time.Duration `json:"auto-sync-interval"` - - // DialTimeout is the timeout for failing to establish a connection. - DialTimeout time.Duration `json:"dial-timeout"` - - // DialKeepAliveTime is the time in seconds after which client pings the server to see if - // transport is alive. - DialKeepAliveTime time.Duration `json:"dial-keep-alive-time"` - - // DialKeepAliveTimeout is the time in seconds that the client waits for a response for the - // keep-alive probe. If the response is not received in this time, the connection is closed. - DialKeepAliveTimeout time.Duration `json:"dial-keep-alive-timeout"` - - // MaxCallSendMsgSize is the client-side request send limit in bytes. - // If 0, it defaults to 2.0 MiB (2 * 1024 * 1024). - // Make sure that "MaxCallSendMsgSize" < server-side default send/recv limit. - // ("--max-request-bytes" flag to etcd or "embed.Config.MaxRequestBytes"). - MaxCallSendMsgSize int - - // MaxCallRecvMsgSize is the client-side response receive limit. - // If 0, it defaults to "math.MaxInt32", because range response can - // easily exceed request send limits. - // Make sure that "MaxCallRecvMsgSize" >= server-side default send/recv limit. - // ("--max-request-bytes" flag to etcd or "embed.Config.MaxRequestBytes"). - MaxCallRecvMsgSize int - - // TLS holds the client secure credentials, if any. - TLS *tls.Config - - // Username is a user name for authentication. - Username string `json:"username"` - - // Password is a password for authentication. - Password string `json:"password"` - - // RejectOldCluster when set will refuse to create a client against an outdated cluster. - RejectOldCluster bool `json:"reject-old-cluster"` - - // DialOptions is a list of dial options for the grpc client (e.g., for interceptors). - DialOptions []grpc.DialOption - - // Context is the default client context; it can be used to cancel grpc dial out and - // other operations that do not have an explicit context. - Context context.Context -} diff --git a/vendor/github.com/coreos/etcd/clientv3/doc.go b/vendor/github.com/coreos/etcd/clientv3/doc.go deleted file mode 100644 index dacc5bb..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/doc.go +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2016 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package clientv3 implements the official Go etcd client for v3. -// -// Create client using `clientv3.New`: -// -// cli, err := clientv3.New(clientv3.Config{ -// Endpoints: []string{"localhost:2379", "localhost:22379", "localhost:32379"}, -// DialTimeout: 5 * time.Second, -// }) -// if err != nil { -// // handle error! -// } -// defer cli.Close() -// -// Make sure to close the client after using it. If the client is not closed, the -// connection will have leaky goroutines. -// -// To specify a client request timeout, wrap the context with context.WithTimeout: -// -// ctx, cancel := context.WithTimeout(context.Background(), timeout) -// resp, err := kvc.Put(ctx, "sample_key", "sample_value") -// cancel() -// if err != nil { -// // handle error! -// } -// // use the response -// -// The Client has internal state (watchers and leases), so Clients should be reused instead of created as needed. -// Clients are safe for concurrent use by multiple goroutines. -// -// etcd client returns 2 types of errors: -// -// 1. context error: canceled or deadline exceeded. -// 2. gRPC error: see https://github.com/coreos/etcd/blob/master/etcdserver/api/v3rpc/rpctypes/error.go -// -// Here is the example code to handle client errors: -// -// resp, err := kvc.Put(ctx, "", "") -// if err != nil { -// if err == context.Canceled { -// // ctx is canceled by another routine -// } else if err == context.DeadlineExceeded { -// // ctx is attached with a deadline and it exceeded -// } else if verr, ok := err.(*v3rpc.ErrEmptyKey); ok { -// // process (verr.Errors) -// } else { -// // bad cluster endpoints, which are not etcd servers -// } -// } -// -package clientv3 diff --git a/vendor/github.com/coreos/etcd/clientv3/health_balancer.go b/vendor/github.com/coreos/etcd/clientv3/health_balancer.go deleted file mode 100644 index 52bea90..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/health_balancer.go +++ /dev/null @@ -1,627 +0,0 @@ -// Copyright 2017 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package clientv3 - -import ( - "errors" - "net/url" - "strings" - "sync" - "time" - - "golang.org/x/net/context" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - healthpb "google.golang.org/grpc/health/grpc_health_v1" - "google.golang.org/grpc/status" -) - -const ( - minHealthRetryDuration = 3 * time.Second - unknownService = "unknown service grpc.health.v1.Health" -) - -// ErrNoAddrAvilable is returned by Get() when the balancer does not have -// any active connection to endpoints at the time. -// This error is returned only when opts.BlockingWait is true. -var ErrNoAddrAvilable = status.Error(codes.Unavailable, "there is no address available") - -type healthCheckFunc func(ep string) (bool, error) - -type notifyMsg int - -const ( - notifyReset notifyMsg = iota - notifyNext -) - -// healthBalancer does the bare minimum to expose multiple eps -// to the grpc reconnection code path -type healthBalancer struct { - // addrs are the client's endpoint addresses for grpc - addrs []grpc.Address - - // eps holds the raw endpoints from the client - eps []string - - // notifyCh notifies grpc of the set of addresses for connecting - notifyCh chan []grpc.Address - - // readyc closes once the first connection is up - readyc chan struct{} - readyOnce sync.Once - - // healthCheck checks an endpoint's health. - healthCheck healthCheckFunc - healthCheckTimeout time.Duration - - unhealthyMu sync.RWMutex - unhealthyHostPorts map[string]time.Time - - // mu protects all fields below. - mu sync.RWMutex - - // upc closes when pinAddr transitions from empty to non-empty or the balancer closes. - upc chan struct{} - - // downc closes when grpc calls down() on pinAddr - downc chan struct{} - - // stopc is closed to signal updateNotifyLoop should stop. - stopc chan struct{} - stopOnce sync.Once - wg sync.WaitGroup - - // donec closes when all goroutines are exited - donec chan struct{} - - // updateAddrsC notifies updateNotifyLoop to update addrs. - updateAddrsC chan notifyMsg - - // grpc issues TLS cert checks using the string passed into dial so - // that string must be the host. To recover the full scheme://host URL, - // have a map from hosts to the original endpoint. - hostPort2ep map[string]string - - // pinAddr is the currently pinned address; set to the empty string on - // initialization and shutdown. - pinAddr string - - closed bool -} - -func newHealthBalancer(eps []string, timeout time.Duration, hc healthCheckFunc) *healthBalancer { - notifyCh := make(chan []grpc.Address) - addrs := eps2addrs(eps) - hb := &healthBalancer{ - addrs: addrs, - eps: eps, - notifyCh: notifyCh, - readyc: make(chan struct{}), - healthCheck: hc, - unhealthyHostPorts: make(map[string]time.Time), - upc: make(chan struct{}), - stopc: make(chan struct{}), - downc: make(chan struct{}), - donec: make(chan struct{}), - updateAddrsC: make(chan notifyMsg), - hostPort2ep: getHostPort2ep(eps), - } - if timeout < minHealthRetryDuration { - timeout = minHealthRetryDuration - } - hb.healthCheckTimeout = timeout - - close(hb.downc) - go hb.updateNotifyLoop() - hb.wg.Add(1) - go func() { - defer hb.wg.Done() - hb.updateUnhealthy() - }() - return hb -} - -func (b *healthBalancer) Start(target string, config grpc.BalancerConfig) error { return nil } - -func (b *healthBalancer) ConnectNotify() <-chan struct{} { - b.mu.Lock() - defer b.mu.Unlock() - return b.upc -} - -func (b *healthBalancer) ready() <-chan struct{} { return b.readyc } - -func (b *healthBalancer) endpoint(hostPort string) string { - b.mu.RLock() - defer b.mu.RUnlock() - return b.hostPort2ep[hostPort] -} - -func (b *healthBalancer) pinned() string { - b.mu.RLock() - defer b.mu.RUnlock() - return b.pinAddr -} - -func (b *healthBalancer) hostPortError(hostPort string, err error) { - if b.endpoint(hostPort) == "" { - if logger.V(4) { - logger.Infof("clientv3/balancer: %q is stale (skip marking as unhealthy on %q)", hostPort, err.Error()) - } - return - } - - b.unhealthyMu.Lock() - b.unhealthyHostPorts[hostPort] = time.Now() - b.unhealthyMu.Unlock() - if logger.V(4) { - logger.Infof("clientv3/balancer: %q is marked unhealthy (%q)", hostPort, err.Error()) - } -} - -func (b *healthBalancer) removeUnhealthy(hostPort, msg string) { - if b.endpoint(hostPort) == "" { - if logger.V(4) { - logger.Infof("clientv3/balancer: %q was not in unhealthy (%q)", hostPort, msg) - } - return - } - - b.unhealthyMu.Lock() - delete(b.unhealthyHostPorts, hostPort) - b.unhealthyMu.Unlock() - if logger.V(4) { - logger.Infof("clientv3/balancer: %q is removed from unhealthy (%q)", hostPort, msg) - } -} - -func (b *healthBalancer) countUnhealthy() (count int) { - b.unhealthyMu.RLock() - count = len(b.unhealthyHostPorts) - b.unhealthyMu.RUnlock() - return count -} - -func (b *healthBalancer) isUnhealthy(hostPort string) (unhealthy bool) { - b.unhealthyMu.RLock() - _, unhealthy = b.unhealthyHostPorts[hostPort] - b.unhealthyMu.RUnlock() - return unhealthy -} - -func (b *healthBalancer) cleanupUnhealthy() { - b.unhealthyMu.Lock() - for k, v := range b.unhealthyHostPorts { - if time.Since(v) > b.healthCheckTimeout { - delete(b.unhealthyHostPorts, k) - if logger.V(4) { - logger.Infof("clientv3/balancer: removed %q from unhealthy after %v", k, b.healthCheckTimeout) - } - } - } - b.unhealthyMu.Unlock() -} - -func (b *healthBalancer) liveAddrs() ([]grpc.Address, map[string]struct{}) { - unhealthyCnt := b.countUnhealthy() - - b.mu.RLock() - defer b.mu.RUnlock() - - hbAddrs := b.addrs - if len(b.addrs) == 1 || unhealthyCnt == 0 || unhealthyCnt == len(b.addrs) { - liveHostPorts := make(map[string]struct{}, len(b.hostPort2ep)) - for k := range b.hostPort2ep { - liveHostPorts[k] = struct{}{} - } - return hbAddrs, liveHostPorts - } - - addrs := make([]grpc.Address, 0, len(b.addrs)-unhealthyCnt) - liveHostPorts := make(map[string]struct{}, len(addrs)) - for _, addr := range b.addrs { - if !b.isUnhealthy(addr.Addr) { - addrs = append(addrs, addr) - liveHostPorts[addr.Addr] = struct{}{} - } - } - return addrs, liveHostPorts -} - -func (b *healthBalancer) updateUnhealthy() { - for { - select { - case <-time.After(b.healthCheckTimeout): - b.cleanupUnhealthy() - pinned := b.pinned() - if pinned == "" || b.isUnhealthy(pinned) { - select { - case b.updateAddrsC <- notifyNext: - case <-b.stopc: - return - } - } - case <-b.stopc: - return - } - } -} - -func (b *healthBalancer) updateAddrs(eps ...string) { - np := getHostPort2ep(eps) - - b.mu.Lock() - defer b.mu.Unlock() - - match := len(np) == len(b.hostPort2ep) - if match { - for k, v := range np { - if b.hostPort2ep[k] != v { - match = false - break - } - } - } - if match { - // same endpoints, so no need to update address - return - } - - b.hostPort2ep = np - b.addrs, b.eps = eps2addrs(eps), eps - - b.unhealthyMu.Lock() - b.unhealthyHostPorts = make(map[string]time.Time) - b.unhealthyMu.Unlock() -} - -func (b *healthBalancer) next() { - b.mu.RLock() - downc := b.downc - b.mu.RUnlock() - select { - case b.updateAddrsC <- notifyNext: - case <-b.stopc: - } - // wait until disconnect so new RPCs are not issued on old connection - select { - case <-downc: - case <-b.stopc: - } -} - -func (b *healthBalancer) updateNotifyLoop() { - defer close(b.donec) - - for { - b.mu.RLock() - upc, downc, addr := b.upc, b.downc, b.pinAddr - b.mu.RUnlock() - // downc or upc should be closed - select { - case <-downc: - downc = nil - default: - } - select { - case <-upc: - upc = nil - default: - } - switch { - case downc == nil && upc == nil: - // stale - select { - case <-b.stopc: - return - default: - } - case downc == nil: - b.notifyAddrs(notifyReset) - select { - case <-upc: - case msg := <-b.updateAddrsC: - b.notifyAddrs(msg) - case <-b.stopc: - return - } - case upc == nil: - select { - // close connections that are not the pinned address - case b.notifyCh <- []grpc.Address{{Addr: addr}}: - case <-downc: - case <-b.stopc: - return - } - select { - case <-downc: - b.notifyAddrs(notifyReset) - case msg := <-b.updateAddrsC: - b.notifyAddrs(msg) - case <-b.stopc: - return - } - } - } -} - -func (b *healthBalancer) notifyAddrs(msg notifyMsg) { - if msg == notifyNext { - select { - case b.notifyCh <- []grpc.Address{}: - case <-b.stopc: - return - } - } - b.mu.RLock() - pinAddr := b.pinAddr - downc := b.downc - b.mu.RUnlock() - addrs, hostPorts := b.liveAddrs() - - var waitDown bool - if pinAddr != "" { - _, ok := hostPorts[pinAddr] - waitDown = !ok - } - - select { - case b.notifyCh <- addrs: - if waitDown { - select { - case <-downc: - case <-b.stopc: - } - } - case <-b.stopc: - } -} - -func (b *healthBalancer) Up(addr grpc.Address) func(error) { - if !b.mayPin(addr) { - return func(err error) {} - } - - b.mu.Lock() - defer b.mu.Unlock() - - // gRPC might call Up after it called Close. We add this check - // to "fix" it up at application layer. Otherwise, will panic - // if b.upc is already closed. - if b.closed { - return func(err error) {} - } - - // gRPC might call Up on a stale address. - // Prevent updating pinAddr with a stale address. - if !hasAddr(b.addrs, addr.Addr) { - return func(err error) {} - } - - if b.pinAddr != "" { - if logger.V(4) { - logger.Infof("clientv3/balancer: %q is up but not pinned (already pinned %q)", addr.Addr, b.pinAddr) - } - return func(err error) {} - } - - // notify waiting Get()s and pin first connected address - close(b.upc) - b.downc = make(chan struct{}) - b.pinAddr = addr.Addr - if logger.V(4) { - logger.Infof("clientv3/balancer: pin %q", addr.Addr) - } - - // notify client that a connection is up - b.readyOnce.Do(func() { close(b.readyc) }) - - return func(err error) { - // If connected to a black hole endpoint or a killed server, the gRPC ping - // timeout will induce a network I/O error, and retrying until success; - // finding healthy endpoint on retry could take several timeouts and redials. - // To avoid wasting retries, gray-list unhealthy endpoints. - b.hostPortError(addr.Addr, err) - - b.mu.Lock() - b.upc = make(chan struct{}) - close(b.downc) - b.pinAddr = "" - b.mu.Unlock() - if logger.V(4) { - logger.Infof("clientv3/balancer: unpin %q (%q)", addr.Addr, err.Error()) - } - } -} - -func (b *healthBalancer) mayPin(addr grpc.Address) bool { - if b.endpoint(addr.Addr) == "" { // stale host:port - return false - } - - b.unhealthyMu.RLock() - unhealthyCnt := len(b.unhealthyHostPorts) - failedTime, bad := b.unhealthyHostPorts[addr.Addr] - b.unhealthyMu.RUnlock() - - b.mu.RLock() - skip := len(b.addrs) == 1 || unhealthyCnt == 0 || len(b.addrs) == unhealthyCnt - b.mu.RUnlock() - if skip || !bad { - return true - } - - // prevent isolated member's endpoint from being infinitely retried, as follows: - // 1. keepalive pings detects GoAway with http2.ErrCodeEnhanceYourCalm - // 2. balancer 'Up' unpins with grpc: failed with network I/O error - // 3. grpc-healthcheck still SERVING, thus retry to pin - // instead, return before grpc-healthcheck if failed within healthcheck timeout - if elapsed := time.Since(failedTime); elapsed < b.healthCheckTimeout { - if logger.V(4) { - logger.Infof("clientv3/balancer: %q is up but not pinned (failed %v ago, require minimum %v after failure)", addr.Addr, elapsed, b.healthCheckTimeout) - } - return false - } - - if ok, _ := b.healthCheck(addr.Addr); ok { - b.removeUnhealthy(addr.Addr, "health check success") - return true - } - - b.hostPortError(addr.Addr, errors.New("health check failed")) - return false -} - -func (b *healthBalancer) Get(ctx context.Context, opts grpc.BalancerGetOptions) (grpc.Address, func(), error) { - var ( - addr string - closed bool - ) - - // If opts.BlockingWait is false (for fail-fast RPCs), it should return - // an address it has notified via Notify immediately instead of blocking. - if !opts.BlockingWait { - b.mu.RLock() - closed = b.closed - addr = b.pinAddr - b.mu.RUnlock() - if closed { - return grpc.Address{Addr: ""}, nil, grpc.ErrClientConnClosing - } - if addr == "" { - return grpc.Address{Addr: ""}, nil, ErrNoAddrAvilable - } - return grpc.Address{Addr: addr}, func() {}, nil - } - - for { - b.mu.RLock() - ch := b.upc - b.mu.RUnlock() - select { - case <-ch: - case <-b.donec: - return grpc.Address{Addr: ""}, nil, grpc.ErrClientConnClosing - case <-ctx.Done(): - return grpc.Address{Addr: ""}, nil, ctx.Err() - } - b.mu.RLock() - closed = b.closed - addr = b.pinAddr - b.mu.RUnlock() - // Close() which sets b.closed = true can be called before Get(), Get() must exit if balancer is closed. - if closed { - return grpc.Address{Addr: ""}, nil, grpc.ErrClientConnClosing - } - if addr != "" { - break - } - } - return grpc.Address{Addr: addr}, func() {}, nil -} - -func (b *healthBalancer) Notify() <-chan []grpc.Address { return b.notifyCh } - -func (b *healthBalancer) Close() error { - b.mu.Lock() - // In case gRPC calls close twice. TODO: remove the checking - // when we are sure that gRPC wont call close twice. - if b.closed { - b.mu.Unlock() - <-b.donec - return nil - } - b.closed = true - b.stopOnce.Do(func() { close(b.stopc) }) - b.pinAddr = "" - - // In the case of following scenario: - // 1. upc is not closed; no pinned address - // 2. client issues an RPC, calling invoke(), which calls Get(), enters for loop, blocks - // 3. client.conn.Close() calls balancer.Close(); closed = true - // 4. for loop in Get() never exits since ctx is the context passed in by the client and may not be canceled - // we must close upc so Get() exits from blocking on upc - select { - case <-b.upc: - default: - // terminate all waiting Get()s - close(b.upc) - } - - b.mu.Unlock() - b.wg.Wait() - - // wait for updateNotifyLoop to finish - <-b.donec - close(b.notifyCh) - - return nil -} - -func grpcHealthCheck(client *Client, ep string) (bool, error) { - conn, err := client.dial(ep) - if err != nil { - return false, err - } - defer conn.Close() - cli := healthpb.NewHealthClient(conn) - ctx, cancel := context.WithTimeout(context.Background(), time.Second) - resp, err := cli.Check(ctx, &healthpb.HealthCheckRequest{}) - cancel() - if err != nil { - if s, ok := status.FromError(err); ok && s.Code() == codes.Unavailable { - if s.Message() == unknownService { // etcd < v3.3.0 - return true, nil - } - } - return false, err - } - return resp.Status == healthpb.HealthCheckResponse_SERVING, nil -} - -func hasAddr(addrs []grpc.Address, targetAddr string) bool { - for _, addr := range addrs { - if targetAddr == addr.Addr { - return true - } - } - return false -} - -func getHost(ep string) string { - url, uerr := url.Parse(ep) - if uerr != nil || !strings.Contains(ep, "://") { - return ep - } - return url.Host -} - -func eps2addrs(eps []string) []grpc.Address { - addrs := make([]grpc.Address, len(eps)) - for i := range eps { - addrs[i].Addr = getHost(eps[i]) - } - return addrs -} - -func getHostPort2ep(eps []string) map[string]string { - hm := make(map[string]string, len(eps)) - for i := range eps { - _, host, _ := parseEndpoint(eps[i]) - hm[host] = eps[i] - } - return hm -} diff --git a/vendor/github.com/coreos/etcd/clientv3/kv.go b/vendor/github.com/coreos/etcd/clientv3/kv.go deleted file mode 100644 index 6289605..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/kv.go +++ /dev/null @@ -1,176 +0,0 @@ -// Copyright 2015 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package clientv3 - -import ( - pb "github.com/coreos/etcd/etcdserver/etcdserverpb" - - "golang.org/x/net/context" - "google.golang.org/grpc" -) - -type ( - CompactResponse pb.CompactionResponse - PutResponse pb.PutResponse - GetResponse pb.RangeResponse - DeleteResponse pb.DeleteRangeResponse - TxnResponse pb.TxnResponse -) - -type KV interface { - // Put puts a key-value pair into etcd. - // Note that key,value can be plain bytes array and string is - // an immutable representation of that bytes array. - // To get a string of bytes, do string([]byte{0x10, 0x20}). - Put(ctx context.Context, key, val string, opts ...OpOption) (*PutResponse, error) - - // Get retrieves keys. - // By default, Get will return the value for "key", if any. - // When passed WithRange(end), Get will return the keys in the range [key, end). - // When passed WithFromKey(), Get returns keys greater than or equal to key. - // When passed WithRev(rev) with rev > 0, Get retrieves keys at the given revision; - // if the required revision is compacted, the request will fail with ErrCompacted . - // When passed WithLimit(limit), the number of returned keys is bounded by limit. - // When passed WithSort(), the keys will be sorted. - Get(ctx context.Context, key string, opts ...OpOption) (*GetResponse, error) - - // Delete deletes a key, or optionally using WithRange(end), [key, end). - Delete(ctx context.Context, key string, opts ...OpOption) (*DeleteResponse, error) - - // Compact compacts etcd KV history before the given rev. - Compact(ctx context.Context, rev int64, opts ...CompactOption) (*CompactResponse, error) - - // Do applies a single Op on KV without a transaction. - // Do is useful when creating arbitrary operations to be issued at a - // later time; the user can range over the operations, calling Do to - // execute them. Get/Put/Delete, on the other hand, are best suited - // for when the operation should be issued at the time of declaration. - Do(ctx context.Context, op Op) (OpResponse, error) - - // Txn creates a transaction. - Txn(ctx context.Context) Txn -} - -type OpResponse struct { - put *PutResponse - get *GetResponse - del *DeleteResponse - txn *TxnResponse -} - -func (op OpResponse) Put() *PutResponse { return op.put } -func (op OpResponse) Get() *GetResponse { return op.get } -func (op OpResponse) Del() *DeleteResponse { return op.del } -func (op OpResponse) Txn() *TxnResponse { return op.txn } - -func (resp *PutResponse) OpResponse() OpResponse { - return OpResponse{put: resp} -} -func (resp *GetResponse) OpResponse() OpResponse { - return OpResponse{get: resp} -} -func (resp *DeleteResponse) OpResponse() OpResponse { - return OpResponse{del: resp} -} -func (resp *TxnResponse) OpResponse() OpResponse { - return OpResponse{txn: resp} -} - -type kv struct { - remote pb.KVClient - callOpts []grpc.CallOption -} - -func NewKV(c *Client) KV { - api := &kv{remote: RetryKVClient(c)} - if c != nil { - api.callOpts = c.callOpts - } - return api -} - -func NewKVFromKVClient(remote pb.KVClient, c *Client) KV { - api := &kv{remote: remote} - if c != nil { - api.callOpts = c.callOpts - } - return api -} - -func (kv *kv) Put(ctx context.Context, key, val string, opts ...OpOption) (*PutResponse, error) { - r, err := kv.Do(ctx, OpPut(key, val, opts...)) - return r.put, toErr(ctx, err) -} - -func (kv *kv) Get(ctx context.Context, key string, opts ...OpOption) (*GetResponse, error) { - r, err := kv.Do(ctx, OpGet(key, opts...)) - return r.get, toErr(ctx, err) -} - -func (kv *kv) Delete(ctx context.Context, key string, opts ...OpOption) (*DeleteResponse, error) { - r, err := kv.Do(ctx, OpDelete(key, opts...)) - return r.del, toErr(ctx, err) -} - -func (kv *kv) Compact(ctx context.Context, rev int64, opts ...CompactOption) (*CompactResponse, error) { - resp, err := kv.remote.Compact(ctx, OpCompact(rev, opts...).toRequest(), kv.callOpts...) - if err != nil { - return nil, toErr(ctx, err) - } - return (*CompactResponse)(resp), err -} - -func (kv *kv) Txn(ctx context.Context) Txn { - return &txn{ - kv: kv, - ctx: ctx, - callOpts: kv.callOpts, - } -} - -func (kv *kv) Do(ctx context.Context, op Op) (OpResponse, error) { - var err error - switch op.t { - case tRange: - var resp *pb.RangeResponse - resp, err = kv.remote.Range(ctx, op.toRangeRequest(), kv.callOpts...) - if err == nil { - return OpResponse{get: (*GetResponse)(resp)}, nil - } - case tPut: - var resp *pb.PutResponse - r := &pb.PutRequest{Key: op.key, Value: op.val, Lease: int64(op.leaseID), PrevKv: op.prevKV, IgnoreValue: op.ignoreValue, IgnoreLease: op.ignoreLease} - resp, err = kv.remote.Put(ctx, r, kv.callOpts...) - if err == nil { - return OpResponse{put: (*PutResponse)(resp)}, nil - } - case tDeleteRange: - var resp *pb.DeleteRangeResponse - r := &pb.DeleteRangeRequest{Key: op.key, RangeEnd: op.end, PrevKv: op.prevKV} - resp, err = kv.remote.DeleteRange(ctx, r, kv.callOpts...) - if err == nil { - return OpResponse{del: (*DeleteResponse)(resp)}, nil - } - case tTxn: - var resp *pb.TxnResponse - resp, err = kv.remote.Txn(ctx, op.toTxnRequest(), kv.callOpts...) - if err == nil { - return OpResponse{txn: (*TxnResponse)(resp)}, nil - } - default: - panic("Unknown op") - } - return OpResponse{}, toErr(ctx, err) -} diff --git a/vendor/github.com/coreos/etcd/clientv3/lease.go b/vendor/github.com/coreos/etcd/clientv3/lease.go deleted file mode 100644 index e74e1d6..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/lease.go +++ /dev/null @@ -1,545 +0,0 @@ -// Copyright 2016 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package clientv3 - -import ( - "sync" - "time" - - "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes" - pb "github.com/coreos/etcd/etcdserver/etcdserverpb" - - "golang.org/x/net/context" - "google.golang.org/grpc" - "google.golang.org/grpc/metadata" -) - -type ( - LeaseRevokeResponse pb.LeaseRevokeResponse - LeaseID int64 -) - -// LeaseGrantResponse wraps the protobuf message LeaseGrantResponse. -type LeaseGrantResponse struct { - *pb.ResponseHeader - ID LeaseID - TTL int64 - Error string -} - -// LeaseKeepAliveResponse wraps the protobuf message LeaseKeepAliveResponse. -type LeaseKeepAliveResponse struct { - *pb.ResponseHeader - ID LeaseID - TTL int64 -} - -// LeaseTimeToLiveResponse wraps the protobuf message LeaseTimeToLiveResponse. -type LeaseTimeToLiveResponse struct { - *pb.ResponseHeader - ID LeaseID `json:"id"` - - // TTL is the remaining TTL in seconds for the lease; the lease will expire in under TTL+1 seconds. - TTL int64 `json:"ttl"` - - // GrantedTTL is the initial granted time in seconds upon lease creation/renewal. - GrantedTTL int64 `json:"granted-ttl"` - - // Keys is the list of keys attached to this lease. - Keys [][]byte `json:"keys"` -} - -// LeaseStatus represents a lease status. -type LeaseStatus struct { - ID LeaseID `json:"id"` - // TODO: TTL int64 -} - -const ( - // defaultTTL is the assumed lease TTL used for the first keepalive - // deadline before the actual TTL is known to the client. - defaultTTL = 5 * time.Second - // a small buffer to store unsent lease responses. - leaseResponseChSize = 16 - // NoLease is a lease ID for the absence of a lease. - NoLease LeaseID = 0 - - // retryConnWait is how long to wait before retrying request due to an error - retryConnWait = 500 * time.Millisecond -) - -// ErrKeepAliveHalted is returned if client keep alive loop halts with an unexpected error. -// -// This usually means that automatic lease renewal via KeepAlive is broken, but KeepAliveOnce will still work as expected. -type ErrKeepAliveHalted struct { - Reason error -} - -func (e ErrKeepAliveHalted) Error() string { - s := "etcdclient: leases keep alive halted" - if e.Reason != nil { - s += ": " + e.Reason.Error() - } - return s -} - -type Lease interface { - // Grant creates a new lease. - Grant(ctx context.Context, ttl int64) (*LeaseGrantResponse, error) - - // Revoke revokes the given lease. - Revoke(ctx context.Context, id LeaseID) (*LeaseRevokeResponse, error) - - // TimeToLive retrieves the lease information of the given lease ID. - TimeToLive(ctx context.Context, id LeaseID, opts ...LeaseOption) (*LeaseTimeToLiveResponse, error) - - // KeepAlive keeps the given lease alive forever. - KeepAlive(ctx context.Context, id LeaseID) (<-chan *LeaseKeepAliveResponse, error) - - // KeepAliveOnce renews the lease once. In most of the cases, KeepAlive - // should be used instead of KeepAliveOnce. - KeepAliveOnce(ctx context.Context, id LeaseID) (*LeaseKeepAliveResponse, error) - - // Close releases all resources Lease keeps for efficient communication - // with the etcd server. - Close() error -} - -type lessor struct { - mu sync.Mutex // guards all fields - - // donec is closed and loopErr is set when recvKeepAliveLoop stops - donec chan struct{} - loopErr error - - remote pb.LeaseClient - - stream pb.Lease_LeaseKeepAliveClient - streamCancel context.CancelFunc - - stopCtx context.Context - stopCancel context.CancelFunc - - keepAlives map[LeaseID]*keepAlive - - // firstKeepAliveTimeout is the timeout for the first keepalive request - // before the actual TTL is known to the lease client - firstKeepAliveTimeout time.Duration - - // firstKeepAliveOnce ensures stream starts after first KeepAlive call. - firstKeepAliveOnce sync.Once - - callOpts []grpc.CallOption -} - -// keepAlive multiplexes a keepalive for a lease over multiple channels -type keepAlive struct { - chs []chan<- *LeaseKeepAliveResponse - ctxs []context.Context - // deadline is the time the keep alive channels close if no response - deadline time.Time - // nextKeepAlive is when to send the next keep alive message - nextKeepAlive time.Time - // donec is closed on lease revoke, expiration, or cancel. - donec chan struct{} -} - -func NewLease(c *Client) Lease { - return NewLeaseFromLeaseClient(RetryLeaseClient(c), c, c.cfg.DialTimeout+time.Second) -} - -func NewLeaseFromLeaseClient(remote pb.LeaseClient, c *Client, keepAliveTimeout time.Duration) Lease { - l := &lessor{ - donec: make(chan struct{}), - keepAlives: make(map[LeaseID]*keepAlive), - remote: remote, - firstKeepAliveTimeout: keepAliveTimeout, - } - if l.firstKeepAliveTimeout == time.Second { - l.firstKeepAliveTimeout = defaultTTL - } - if c != nil { - l.callOpts = c.callOpts - } - reqLeaderCtx := WithRequireLeader(context.Background()) - l.stopCtx, l.stopCancel = context.WithCancel(reqLeaderCtx) - return l -} - -func (l *lessor) Grant(ctx context.Context, ttl int64) (*LeaseGrantResponse, error) { - r := &pb.LeaseGrantRequest{TTL: ttl} - resp, err := l.remote.LeaseGrant(ctx, r, l.callOpts...) - if err == nil { - gresp := &LeaseGrantResponse{ - ResponseHeader: resp.GetHeader(), - ID: LeaseID(resp.ID), - TTL: resp.TTL, - Error: resp.Error, - } - return gresp, nil - } - return nil, toErr(ctx, err) -} - -func (l *lessor) Revoke(ctx context.Context, id LeaseID) (*LeaseRevokeResponse, error) { - r := &pb.LeaseRevokeRequest{ID: int64(id)} - resp, err := l.remote.LeaseRevoke(ctx, r, l.callOpts...) - if err == nil { - return (*LeaseRevokeResponse)(resp), nil - } - return nil, toErr(ctx, err) -} - -func (l *lessor) TimeToLive(ctx context.Context, id LeaseID, opts ...LeaseOption) (*LeaseTimeToLiveResponse, error) { - r := toLeaseTimeToLiveRequest(id, opts...) - resp, err := l.remote.LeaseTimeToLive(ctx, r, l.callOpts...) - if err == nil { - gresp := &LeaseTimeToLiveResponse{ - ResponseHeader: resp.GetHeader(), - ID: LeaseID(resp.ID), - TTL: resp.TTL, - GrantedTTL: resp.GrantedTTL, - Keys: resp.Keys, - } - return gresp, nil - } - return nil, toErr(ctx, err) -} - -func (l *lessor) KeepAlive(ctx context.Context, id LeaseID) (<-chan *LeaseKeepAliveResponse, error) { - ch := make(chan *LeaseKeepAliveResponse, leaseResponseChSize) - - l.mu.Lock() - // ensure that recvKeepAliveLoop is still running - select { - case <-l.donec: - err := l.loopErr - l.mu.Unlock() - close(ch) - return ch, ErrKeepAliveHalted{Reason: err} - default: - } - ka, ok := l.keepAlives[id] - if !ok { - // create fresh keep alive - ka = &keepAlive{ - chs: []chan<- *LeaseKeepAliveResponse{ch}, - ctxs: []context.Context{ctx}, - deadline: time.Now().Add(l.firstKeepAliveTimeout), - nextKeepAlive: time.Now(), - donec: make(chan struct{}), - } - l.keepAlives[id] = ka - } else { - // add channel and context to existing keep alive - ka.ctxs = append(ka.ctxs, ctx) - ka.chs = append(ka.chs, ch) - } - l.mu.Unlock() - - go l.keepAliveCtxCloser(id, ctx, ka.donec) - l.firstKeepAliveOnce.Do(func() { - go l.recvKeepAliveLoop() - go l.deadlineLoop() - }) - - return ch, nil -} - -func (l *lessor) KeepAliveOnce(ctx context.Context, id LeaseID) (*LeaseKeepAliveResponse, error) { - for { - resp, err := l.keepAliveOnce(ctx, id) - if err == nil { - if resp.TTL <= 0 { - err = rpctypes.ErrLeaseNotFound - } - return resp, err - } - if isHaltErr(ctx, err) { - return nil, toErr(ctx, err) - } - } -} - -func (l *lessor) Close() error { - l.stopCancel() - // close for synchronous teardown if stream goroutines never launched - l.firstKeepAliveOnce.Do(func() { close(l.donec) }) - <-l.donec - return nil -} - -func (l *lessor) keepAliveCtxCloser(id LeaseID, ctx context.Context, donec <-chan struct{}) { - select { - case <-donec: - return - case <-l.donec: - return - case <-ctx.Done(): - } - - l.mu.Lock() - defer l.mu.Unlock() - - ka, ok := l.keepAlives[id] - if !ok { - return - } - - // close channel and remove context if still associated with keep alive - for i, c := range ka.ctxs { - if c == ctx { - close(ka.chs[i]) - ka.ctxs = append(ka.ctxs[:i], ka.ctxs[i+1:]...) - ka.chs = append(ka.chs[:i], ka.chs[i+1:]...) - break - } - } - // remove if no one more listeners - if len(ka.chs) == 0 { - delete(l.keepAlives, id) - } -} - -// closeRequireLeader scans keepAlives for ctxs that have require leader -// and closes the associated channels. -func (l *lessor) closeRequireLeader() { - l.mu.Lock() - defer l.mu.Unlock() - for _, ka := range l.keepAlives { - reqIdxs := 0 - // find all required leader channels, close, mark as nil - for i, ctx := range ka.ctxs { - md, ok := metadata.FromOutgoingContext(ctx) - if !ok { - continue - } - ks := md[rpctypes.MetadataRequireLeaderKey] - if len(ks) < 1 || ks[0] != rpctypes.MetadataHasLeader { - continue - } - close(ka.chs[i]) - ka.chs[i] = nil - reqIdxs++ - } - if reqIdxs == 0 { - continue - } - // remove all channels that required a leader from keepalive - newChs := make([]chan<- *LeaseKeepAliveResponse, len(ka.chs)-reqIdxs) - newCtxs := make([]context.Context, len(newChs)) - newIdx := 0 - for i := range ka.chs { - if ka.chs[i] == nil { - continue - } - newChs[newIdx], newCtxs[newIdx] = ka.chs[i], ka.ctxs[newIdx] - newIdx++ - } - ka.chs, ka.ctxs = newChs, newCtxs - } -} - -func (l *lessor) keepAliveOnce(ctx context.Context, id LeaseID) (*LeaseKeepAliveResponse, error) { - cctx, cancel := context.WithCancel(ctx) - defer cancel() - - stream, err := l.remote.LeaseKeepAlive(cctx, l.callOpts...) - if err != nil { - return nil, toErr(ctx, err) - } - - err = stream.Send(&pb.LeaseKeepAliveRequest{ID: int64(id)}) - if err != nil { - return nil, toErr(ctx, err) - } - - resp, rerr := stream.Recv() - if rerr != nil { - return nil, toErr(ctx, rerr) - } - - karesp := &LeaseKeepAliveResponse{ - ResponseHeader: resp.GetHeader(), - ID: LeaseID(resp.ID), - TTL: resp.TTL, - } - return karesp, nil -} - -func (l *lessor) recvKeepAliveLoop() (gerr error) { - defer func() { - l.mu.Lock() - close(l.donec) - l.loopErr = gerr - for _, ka := range l.keepAlives { - ka.close() - } - l.keepAlives = make(map[LeaseID]*keepAlive) - l.mu.Unlock() - }() - - for { - stream, err := l.resetRecv() - if err != nil { - if canceledByCaller(l.stopCtx, err) { - return err - } - } else { - for { - resp, err := stream.Recv() - if err != nil { - if canceledByCaller(l.stopCtx, err) { - return err - } - - if toErr(l.stopCtx, err) == rpctypes.ErrNoLeader { - l.closeRequireLeader() - } - break - } - - l.recvKeepAlive(resp) - } - } - - select { - case <-time.After(retryConnWait): - continue - case <-l.stopCtx.Done(): - return l.stopCtx.Err() - } - } -} - -// resetRecv opens a new lease stream and starts sending keep alive requests. -func (l *lessor) resetRecv() (pb.Lease_LeaseKeepAliveClient, error) { - sctx, cancel := context.WithCancel(l.stopCtx) - stream, err := l.remote.LeaseKeepAlive(sctx, l.callOpts...) - if err != nil { - cancel() - return nil, err - } - - l.mu.Lock() - defer l.mu.Unlock() - if l.stream != nil && l.streamCancel != nil { - l.streamCancel() - } - - l.streamCancel = cancel - l.stream = stream - - go l.sendKeepAliveLoop(stream) - return stream, nil -} - -// recvKeepAlive updates a lease based on its LeaseKeepAliveResponse -func (l *lessor) recvKeepAlive(resp *pb.LeaseKeepAliveResponse) { - karesp := &LeaseKeepAliveResponse{ - ResponseHeader: resp.GetHeader(), - ID: LeaseID(resp.ID), - TTL: resp.TTL, - } - - l.mu.Lock() - defer l.mu.Unlock() - - ka, ok := l.keepAlives[karesp.ID] - if !ok { - return - } - - if karesp.TTL <= 0 { - // lease expired; close all keep alive channels - delete(l.keepAlives, karesp.ID) - ka.close() - return - } - - // send update to all channels - nextKeepAlive := time.Now().Add((time.Duration(karesp.TTL) * time.Second) / 3.0) - ka.deadline = time.Now().Add(time.Duration(karesp.TTL) * time.Second) - for _, ch := range ka.chs { - select { - case ch <- karesp: - ka.nextKeepAlive = nextKeepAlive - default: - } - } -} - -// deadlineLoop reaps any keep alive channels that have not received a response -// within the lease TTL -func (l *lessor) deadlineLoop() { - for { - select { - case <-time.After(time.Second): - case <-l.donec: - return - } - now := time.Now() - l.mu.Lock() - for id, ka := range l.keepAlives { - if ka.deadline.Before(now) { - // waited too long for response; lease may be expired - ka.close() - delete(l.keepAlives, id) - } - } - l.mu.Unlock() - } -} - -// sendKeepAliveLoop sends keep alive requests for the lifetime of the given stream. -func (l *lessor) sendKeepAliveLoop(stream pb.Lease_LeaseKeepAliveClient) { - for { - var tosend []LeaseID - - now := time.Now() - l.mu.Lock() - for id, ka := range l.keepAlives { - if ka.nextKeepAlive.Before(now) { - tosend = append(tosend, id) - } - } - l.mu.Unlock() - - for _, id := range tosend { - r := &pb.LeaseKeepAliveRequest{ID: int64(id)} - if err := stream.Send(r); err != nil { - // TODO do something with this error? - return - } - } - - select { - case <-time.After(500 * time.Millisecond): - case <-stream.Context().Done(): - return - case <-l.donec: - return - case <-l.stopCtx.Done(): - return - } - } -} - -func (ka *keepAlive) close() { - close(ka.donec) - for _, ch := range ka.chs { - close(ch) - } -} diff --git a/vendor/github.com/coreos/etcd/clientv3/logger.go b/vendor/github.com/coreos/etcd/clientv3/logger.go deleted file mode 100644 index 012abdb..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/logger.go +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2016 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package clientv3 - -import ( - "io/ioutil" - "sync" - - "google.golang.org/grpc/grpclog" -) - -// Logger is the logger used by client library. -// It implements grpclog.LoggerV2 interface. -type Logger grpclog.LoggerV2 - -var ( - logger settableLogger -) - -type settableLogger struct { - l grpclog.LoggerV2 - mu sync.RWMutex -} - -func init() { - // disable client side logs by default - logger.mu.Lock() - logger.l = grpclog.NewLoggerV2(ioutil.Discard, ioutil.Discard, ioutil.Discard) - - // logger has to override the grpclog at initialization so that - // any changes to the grpclog go through logger with locking - // instead of through SetLogger - // - // now updates only happen through settableLogger.set - grpclog.SetLoggerV2(&logger) - logger.mu.Unlock() -} - -// SetLogger sets client-side Logger. By default, logs are disabled. -func SetLogger(l Logger) { - logger.set(l) -} - -// GetLogger returns the current logger. -func GetLogger() Logger { - return logger.get() -} - -func (s *settableLogger) set(l Logger) { - s.mu.Lock() - logger.l = l - grpclog.SetLoggerV2(&logger) - s.mu.Unlock() -} - -func (s *settableLogger) get() Logger { - s.mu.RLock() - l := logger.l - s.mu.RUnlock() - return l -} - -// implement the grpclog.LoggerV2 interface - -func (s *settableLogger) Info(args ...interface{}) { s.get().Info(args...) } -func (s *settableLogger) Infof(format string, args ...interface{}) { s.get().Infof(format, args...) } -func (s *settableLogger) Infoln(args ...interface{}) { s.get().Infoln(args...) } -func (s *settableLogger) Warning(args ...interface{}) { s.get().Warning(args...) } -func (s *settableLogger) Warningf(format string, args ...interface{}) { - s.get().Warningf(format, args...) -} -func (s *settableLogger) Warningln(args ...interface{}) { s.get().Warningln(args...) } -func (s *settableLogger) Error(args ...interface{}) { s.get().Error(args...) } -func (s *settableLogger) Errorf(format string, args ...interface{}) { - s.get().Errorf(format, args...) -} -func (s *settableLogger) Errorln(args ...interface{}) { s.get().Errorln(args...) } -func (s *settableLogger) Fatal(args ...interface{}) { s.get().Fatal(args...) } -func (s *settableLogger) Fatalf(format string, args ...interface{}) { s.get().Fatalf(format, args...) } -func (s *settableLogger) Fatalln(args ...interface{}) { s.get().Fatalln(args...) } -func (s *settableLogger) Print(args ...interface{}) { s.get().Info(args...) } -func (s *settableLogger) Printf(format string, args ...interface{}) { s.get().Infof(format, args...) } -func (s *settableLogger) Println(args ...interface{}) { s.get().Infoln(args...) } -func (s *settableLogger) V(l int) bool { return s.get().V(l) } diff --git a/vendor/github.com/coreos/etcd/clientv3/maintenance.go b/vendor/github.com/coreos/etcd/clientv3/maintenance.go deleted file mode 100644 index 67b928f..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/maintenance.go +++ /dev/null @@ -1,187 +0,0 @@ -// Copyright 2016 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package clientv3 - -import ( - "io" - - pb "github.com/coreos/etcd/etcdserver/etcdserverpb" - - "golang.org/x/net/context" - "google.golang.org/grpc" -) - -type ( - DefragmentResponse pb.DefragmentResponse - AlarmResponse pb.AlarmResponse - AlarmMember pb.AlarmMember - StatusResponse pb.StatusResponse -) - -type Maintenance interface { - // AlarmList gets all active alarms. - AlarmList(ctx context.Context) (*AlarmResponse, error) - - // AlarmDisarm disarms a given alarm. - AlarmDisarm(ctx context.Context, m *AlarmMember) (*AlarmResponse, error) - - // Defragment releases wasted space from internal fragmentation on a given etcd member. - // Defragment is only needed when deleting a large number of keys and want to reclaim - // the resources. - // Defragment is an expensive operation. User should avoid defragmenting multiple members - // at the same time. - // To defragment multiple members in the cluster, user need to call defragment multiple - // times with different endpoints. - Defragment(ctx context.Context, endpoint string) (*DefragmentResponse, error) - - // Status gets the status of the endpoint. - Status(ctx context.Context, endpoint string) (*StatusResponse, error) - - // Snapshot provides a reader for a point-in-time snapshot of etcd. - Snapshot(ctx context.Context) (io.ReadCloser, error) -} - -type maintenance struct { - dial func(endpoint string) (pb.MaintenanceClient, func(), error) - remote pb.MaintenanceClient - callOpts []grpc.CallOption -} - -func NewMaintenance(c *Client) Maintenance { - api := &maintenance{ - dial: func(endpoint string) (pb.MaintenanceClient, func(), error) { - conn, err := c.dial(endpoint) - if err != nil { - return nil, nil, err - } - cancel := func() { conn.Close() } - return RetryMaintenanceClient(c, conn), cancel, nil - }, - remote: RetryMaintenanceClient(c, c.conn), - } - if c != nil { - api.callOpts = c.callOpts - } - return api -} - -func NewMaintenanceFromMaintenanceClient(remote pb.MaintenanceClient, c *Client) Maintenance { - api := &maintenance{ - dial: func(string) (pb.MaintenanceClient, func(), error) { - return remote, func() {}, nil - }, - remote: remote, - } - if c != nil { - api.callOpts = c.callOpts - } - return api -} - -func (m *maintenance) AlarmList(ctx context.Context) (*AlarmResponse, error) { - req := &pb.AlarmRequest{ - Action: pb.AlarmRequest_GET, - MemberID: 0, // all - Alarm: pb.AlarmType_NONE, // all - } - resp, err := m.remote.Alarm(ctx, req, m.callOpts...) - if err == nil { - return (*AlarmResponse)(resp), nil - } - return nil, toErr(ctx, err) -} - -func (m *maintenance) AlarmDisarm(ctx context.Context, am *AlarmMember) (*AlarmResponse, error) { - req := &pb.AlarmRequest{ - Action: pb.AlarmRequest_DEACTIVATE, - MemberID: am.MemberID, - Alarm: am.Alarm, - } - - if req.MemberID == 0 && req.Alarm == pb.AlarmType_NONE { - ar, err := m.AlarmList(ctx) - if err != nil { - return nil, toErr(ctx, err) - } - ret := AlarmResponse{} - for _, am := range ar.Alarms { - dresp, derr := m.AlarmDisarm(ctx, (*AlarmMember)(am)) - if derr != nil { - return nil, toErr(ctx, derr) - } - ret.Alarms = append(ret.Alarms, dresp.Alarms...) - } - return &ret, nil - } - - resp, err := m.remote.Alarm(ctx, req, m.callOpts...) - if err == nil { - return (*AlarmResponse)(resp), nil - } - return nil, toErr(ctx, err) -} - -func (m *maintenance) Defragment(ctx context.Context, endpoint string) (*DefragmentResponse, error) { - remote, cancel, err := m.dial(endpoint) - if err != nil { - return nil, toErr(ctx, err) - } - defer cancel() - resp, err := remote.Defragment(ctx, &pb.DefragmentRequest{}, m.callOpts...) - if err != nil { - return nil, toErr(ctx, err) - } - return (*DefragmentResponse)(resp), nil -} - -func (m *maintenance) Status(ctx context.Context, endpoint string) (*StatusResponse, error) { - remote, cancel, err := m.dial(endpoint) - if err != nil { - return nil, toErr(ctx, err) - } - defer cancel() - resp, err := remote.Status(ctx, &pb.StatusRequest{}, m.callOpts...) - if err != nil { - return nil, toErr(ctx, err) - } - return (*StatusResponse)(resp), nil -} - -func (m *maintenance) Snapshot(ctx context.Context) (io.ReadCloser, error) { - ss, err := m.remote.Snapshot(ctx, &pb.SnapshotRequest{}, m.callOpts...) - if err != nil { - return nil, toErr(ctx, err) - } - - pr, pw := io.Pipe() - go func() { - for { - resp, err := ss.Recv() - if err != nil { - pw.CloseWithError(err) - return - } - if resp == nil && err == nil { - break - } - if _, werr := pw.Write(resp.Blob); werr != nil { - pw.CloseWithError(werr) - return - } - } - pw.Close() - }() - return pr, nil -} diff --git a/vendor/github.com/coreos/etcd/clientv3/op.go b/vendor/github.com/coreos/etcd/clientv3/op.go deleted file mode 100644 index e18d286..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/op.go +++ /dev/null @@ -1,511 +0,0 @@ -// Copyright 2016 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package clientv3 - -import pb "github.com/coreos/etcd/etcdserver/etcdserverpb" - -type opType int - -const ( - // A default Op has opType 0, which is invalid. - tRange opType = iota + 1 - tPut - tDeleteRange - tTxn -) - -var ( - noPrefixEnd = []byte{0} -) - -// Op represents an Operation that kv can execute. -type Op struct { - t opType - key []byte - end []byte - - // for range - limit int64 - sort *SortOption - serializable bool - keysOnly bool - countOnly bool - minModRev int64 - maxModRev int64 - minCreateRev int64 - maxCreateRev int64 - - // for range, watch - rev int64 - - // for watch, put, delete - prevKV bool - - // for put - ignoreValue bool - ignoreLease bool - - // progressNotify is for progress updates. - progressNotify bool - // createdNotify is for created event - createdNotify bool - // filters for watchers - filterPut bool - filterDelete bool - - // for put - val []byte - leaseID LeaseID - - // txn - cmps []Cmp - thenOps []Op - elseOps []Op -} - -// accessors / mutators - -func (op Op) IsTxn() bool { return op.t == tTxn } -func (op Op) Txn() ([]Cmp, []Op, []Op) { return op.cmps, op.thenOps, op.elseOps } - -// KeyBytes returns the byte slice holding the Op's key. -func (op Op) KeyBytes() []byte { return op.key } - -// WithKeyBytes sets the byte slice for the Op's key. -func (op *Op) WithKeyBytes(key []byte) { op.key = key } - -// RangeBytes returns the byte slice holding with the Op's range end, if any. -func (op Op) RangeBytes() []byte { return op.end } - -// Rev returns the requested revision, if any. -func (op Op) Rev() int64 { return op.rev } - -// IsPut returns true iff the operation is a Put. -func (op Op) IsPut() bool { return op.t == tPut } - -// IsGet returns true iff the operation is a Get. -func (op Op) IsGet() bool { return op.t == tRange } - -// IsDelete returns true iff the operation is a Delete. -func (op Op) IsDelete() bool { return op.t == tDeleteRange } - -// IsSerializable returns true if the serializable field is true. -func (op Op) IsSerializable() bool { return op.serializable == true } - -// IsKeysOnly returns whether keysOnly is set. -func (op Op) IsKeysOnly() bool { return op.keysOnly == true } - -// IsCountOnly returns whether countOnly is set. -func (op Op) IsCountOnly() bool { return op.countOnly == true } - -// MinModRev returns the operation's minimum modify revision. -func (op Op) MinModRev() int64 { return op.minModRev } - -// MaxModRev returns the operation's maximum modify revision. -func (op Op) MaxModRev() int64 { return op.maxModRev } - -// MinCreateRev returns the operation's minimum create revision. -func (op Op) MinCreateRev() int64 { return op.minCreateRev } - -// MaxCreateRev returns the operation's maximum create revision. -func (op Op) MaxCreateRev() int64 { return op.maxCreateRev } - -// WithRangeBytes sets the byte slice for the Op's range end. -func (op *Op) WithRangeBytes(end []byte) { op.end = end } - -// ValueBytes returns the byte slice holding the Op's value, if any. -func (op Op) ValueBytes() []byte { return op.val } - -// WithValueBytes sets the byte slice for the Op's value. -func (op *Op) WithValueBytes(v []byte) { op.val = v } - -func (op Op) toRangeRequest() *pb.RangeRequest { - if op.t != tRange { - panic("op.t != tRange") - } - r := &pb.RangeRequest{ - Key: op.key, - RangeEnd: op.end, - Limit: op.limit, - Revision: op.rev, - Serializable: op.serializable, - KeysOnly: op.keysOnly, - CountOnly: op.countOnly, - MinModRevision: op.minModRev, - MaxModRevision: op.maxModRev, - MinCreateRevision: op.minCreateRev, - MaxCreateRevision: op.maxCreateRev, - } - if op.sort != nil { - r.SortOrder = pb.RangeRequest_SortOrder(op.sort.Order) - r.SortTarget = pb.RangeRequest_SortTarget(op.sort.Target) - } - return r -} - -func (op Op) toTxnRequest() *pb.TxnRequest { - thenOps := make([]*pb.RequestOp, len(op.thenOps)) - for i, tOp := range op.thenOps { - thenOps[i] = tOp.toRequestOp() - } - elseOps := make([]*pb.RequestOp, len(op.elseOps)) - for i, eOp := range op.elseOps { - elseOps[i] = eOp.toRequestOp() - } - cmps := make([]*pb.Compare, len(op.cmps)) - for i := range op.cmps { - cmps[i] = (*pb.Compare)(&op.cmps[i]) - } - return &pb.TxnRequest{Compare: cmps, Success: thenOps, Failure: elseOps} -} - -func (op Op) toRequestOp() *pb.RequestOp { - switch op.t { - case tRange: - return &pb.RequestOp{Request: &pb.RequestOp_RequestRange{RequestRange: op.toRangeRequest()}} - case tPut: - r := &pb.PutRequest{Key: op.key, Value: op.val, Lease: int64(op.leaseID), PrevKv: op.prevKV, IgnoreValue: op.ignoreValue, IgnoreLease: op.ignoreLease} - return &pb.RequestOp{Request: &pb.RequestOp_RequestPut{RequestPut: r}} - case tDeleteRange: - r := &pb.DeleteRangeRequest{Key: op.key, RangeEnd: op.end, PrevKv: op.prevKV} - return &pb.RequestOp{Request: &pb.RequestOp_RequestDeleteRange{RequestDeleteRange: r}} - default: - panic("Unknown Op") - } -} - -func (op Op) isWrite() bool { - if op.t == tTxn { - for _, tOp := range op.thenOps { - if tOp.isWrite() { - return true - } - } - for _, tOp := range op.elseOps { - if tOp.isWrite() { - return true - } - } - return false - } - return op.t != tRange -} - -func OpGet(key string, opts ...OpOption) Op { - ret := Op{t: tRange, key: []byte(key)} - ret.applyOpts(opts) - return ret -} - -func OpDelete(key string, opts ...OpOption) Op { - ret := Op{t: tDeleteRange, key: []byte(key)} - ret.applyOpts(opts) - switch { - case ret.leaseID != 0: - panic("unexpected lease in delete") - case ret.limit != 0: - panic("unexpected limit in delete") - case ret.rev != 0: - panic("unexpected revision in delete") - case ret.sort != nil: - panic("unexpected sort in delete") - case ret.serializable: - panic("unexpected serializable in delete") - case ret.countOnly: - panic("unexpected countOnly in delete") - case ret.minModRev != 0, ret.maxModRev != 0: - panic("unexpected mod revision filter in delete") - case ret.minCreateRev != 0, ret.maxCreateRev != 0: - panic("unexpected create revision filter in delete") - case ret.filterDelete, ret.filterPut: - panic("unexpected filter in delete") - case ret.createdNotify: - panic("unexpected createdNotify in delete") - } - return ret -} - -func OpPut(key, val string, opts ...OpOption) Op { - ret := Op{t: tPut, key: []byte(key), val: []byte(val)} - ret.applyOpts(opts) - switch { - case ret.end != nil: - panic("unexpected range in put") - case ret.limit != 0: - panic("unexpected limit in put") - case ret.rev != 0: - panic("unexpected revision in put") - case ret.sort != nil: - panic("unexpected sort in put") - case ret.serializable: - panic("unexpected serializable in put") - case ret.countOnly: - panic("unexpected countOnly in put") - case ret.minModRev != 0, ret.maxModRev != 0: - panic("unexpected mod revision filter in put") - case ret.minCreateRev != 0, ret.maxCreateRev != 0: - panic("unexpected create revision filter in put") - case ret.filterDelete, ret.filterPut: - panic("unexpected filter in put") - case ret.createdNotify: - panic("unexpected createdNotify in put") - } - return ret -} - -func OpTxn(cmps []Cmp, thenOps []Op, elseOps []Op) Op { - return Op{t: tTxn, cmps: cmps, thenOps: thenOps, elseOps: elseOps} -} - -func opWatch(key string, opts ...OpOption) Op { - ret := Op{t: tRange, key: []byte(key)} - ret.applyOpts(opts) - switch { - case ret.leaseID != 0: - panic("unexpected lease in watch") - case ret.limit != 0: - panic("unexpected limit in watch") - case ret.sort != nil: - panic("unexpected sort in watch") - case ret.serializable: - panic("unexpected serializable in watch") - case ret.countOnly: - panic("unexpected countOnly in watch") - case ret.minModRev != 0, ret.maxModRev != 0: - panic("unexpected mod revision filter in watch") - case ret.minCreateRev != 0, ret.maxCreateRev != 0: - panic("unexpected create revision filter in watch") - } - return ret -} - -func (op *Op) applyOpts(opts []OpOption) { - for _, opt := range opts { - opt(op) - } -} - -// OpOption configures Operations like Get, Put, Delete. -type OpOption func(*Op) - -// WithLease attaches a lease ID to a key in 'Put' request. -func WithLease(leaseID LeaseID) OpOption { - return func(op *Op) { op.leaseID = leaseID } -} - -// WithLimit limits the number of results to return from 'Get' request. -// If WithLimit is given a 0 limit, it is treated as no limit. -func WithLimit(n int64) OpOption { return func(op *Op) { op.limit = n } } - -// WithRev specifies the store revision for 'Get' request. -// Or the start revision of 'Watch' request. -func WithRev(rev int64) OpOption { return func(op *Op) { op.rev = rev } } - -// WithSort specifies the ordering in 'Get' request. It requires -// 'WithRange' and/or 'WithPrefix' to be specified too. -// 'target' specifies the target to sort by: key, version, revisions, value. -// 'order' can be either 'SortNone', 'SortAscend', 'SortDescend'. -func WithSort(target SortTarget, order SortOrder) OpOption { - return func(op *Op) { - if target == SortByKey && order == SortAscend { - // If order != SortNone, server fetches the entire key-space, - // and then applies the sort and limit, if provided. - // Since by default the server returns results sorted by keys - // in lexicographically ascending order, the client should ignore - // SortOrder if the target is SortByKey. - order = SortNone - } - op.sort = &SortOption{target, order} - } -} - -// GetPrefixRangeEnd gets the range end of the prefix. -// 'Get(foo, WithPrefix())' is equal to 'Get(foo, WithRange(GetPrefixRangeEnd(foo))'. -func GetPrefixRangeEnd(prefix string) string { - return string(getPrefix([]byte(prefix))) -} - -func getPrefix(key []byte) []byte { - end := make([]byte, len(key)) - copy(end, key) - for i := len(end) - 1; i >= 0; i-- { - if end[i] < 0xff { - end[i] = end[i] + 1 - end = end[:i+1] - return end - } - } - // next prefix does not exist (e.g., 0xffff); - // default to WithFromKey policy - return noPrefixEnd -} - -// WithPrefix enables 'Get', 'Delete', or 'Watch' requests to operate -// on the keys with matching prefix. For example, 'Get(foo, WithPrefix())' -// can return 'foo1', 'foo2', and so on. -func WithPrefix() OpOption { - return func(op *Op) { - if len(op.key) == 0 { - op.key, op.end = []byte{0}, []byte{0} - return - } - op.end = getPrefix(op.key) - } -} - -// WithRange specifies the range of 'Get', 'Delete', 'Watch' requests. -// For example, 'Get' requests with 'WithRange(end)' returns -// the keys in the range [key, end). -// endKey must be lexicographically greater than start key. -func WithRange(endKey string) OpOption { - return func(op *Op) { op.end = []byte(endKey) } -} - -// WithFromKey specifies the range of 'Get', 'Delete', 'Watch' requests -// to be equal or greater than the key in the argument. -func WithFromKey() OpOption { return WithRange("\x00") } - -// WithSerializable makes 'Get' request serializable. By default, -// it's linearizable. Serializable requests are better for lower latency -// requirement. -func WithSerializable() OpOption { - return func(op *Op) { op.serializable = true } -} - -// WithKeysOnly makes the 'Get' request return only the keys and the corresponding -// values will be omitted. -func WithKeysOnly() OpOption { - return func(op *Op) { op.keysOnly = true } -} - -// WithCountOnly makes the 'Get' request return only the count of keys. -func WithCountOnly() OpOption { - return func(op *Op) { op.countOnly = true } -} - -// WithMinModRev filters out keys for Get with modification revisions less than the given revision. -func WithMinModRev(rev int64) OpOption { return func(op *Op) { op.minModRev = rev } } - -// WithMaxModRev filters out keys for Get with modification revisions greater than the given revision. -func WithMaxModRev(rev int64) OpOption { return func(op *Op) { op.maxModRev = rev } } - -// WithMinCreateRev filters out keys for Get with creation revisions less than the given revision. -func WithMinCreateRev(rev int64) OpOption { return func(op *Op) { op.minCreateRev = rev } } - -// WithMaxCreateRev filters out keys for Get with creation revisions greater than the given revision. -func WithMaxCreateRev(rev int64) OpOption { return func(op *Op) { op.maxCreateRev = rev } } - -// WithFirstCreate gets the key with the oldest creation revision in the request range. -func WithFirstCreate() []OpOption { return withTop(SortByCreateRevision, SortAscend) } - -// WithLastCreate gets the key with the latest creation revision in the request range. -func WithLastCreate() []OpOption { return withTop(SortByCreateRevision, SortDescend) } - -// WithFirstKey gets the lexically first key in the request range. -func WithFirstKey() []OpOption { return withTop(SortByKey, SortAscend) } - -// WithLastKey gets the lexically last key in the request range. -func WithLastKey() []OpOption { return withTop(SortByKey, SortDescend) } - -// WithFirstRev gets the key with the oldest modification revision in the request range. -func WithFirstRev() []OpOption { return withTop(SortByModRevision, SortAscend) } - -// WithLastRev gets the key with the latest modification revision in the request range. -func WithLastRev() []OpOption { return withTop(SortByModRevision, SortDescend) } - -// withTop gets the first key over the get's prefix given a sort order -func withTop(target SortTarget, order SortOrder) []OpOption { - return []OpOption{WithPrefix(), WithSort(target, order), WithLimit(1)} -} - -// WithProgressNotify makes watch server send periodic progress updates -// every 10 minutes when there is no incoming events. -// Progress updates have zero events in WatchResponse. -func WithProgressNotify() OpOption { - return func(op *Op) { - op.progressNotify = true - } -} - -// WithCreatedNotify makes watch server sends the created event. -func WithCreatedNotify() OpOption { - return func(op *Op) { - op.createdNotify = true - } -} - -// WithFilterPut discards PUT events from the watcher. -func WithFilterPut() OpOption { - return func(op *Op) { op.filterPut = true } -} - -// WithFilterDelete discards DELETE events from the watcher. -func WithFilterDelete() OpOption { - return func(op *Op) { op.filterDelete = true } -} - -// WithPrevKV gets the previous key-value pair before the event happens. If the previous KV is already compacted, -// nothing will be returned. -func WithPrevKV() OpOption { - return func(op *Op) { - op.prevKV = true - } -} - -// WithIgnoreValue updates the key using its current value. -// This option can not be combined with non-empty values. -// Returns an error if the key does not exist. -func WithIgnoreValue() OpOption { - return func(op *Op) { - op.ignoreValue = true - } -} - -// WithIgnoreLease updates the key using its current lease. -// This option can not be combined with WithLease. -// Returns an error if the key does not exist. -func WithIgnoreLease() OpOption { - return func(op *Op) { - op.ignoreLease = true - } -} - -// LeaseOp represents an Operation that lease can execute. -type LeaseOp struct { - id LeaseID - - // for TimeToLive - attachedKeys bool -} - -// LeaseOption configures lease operations. -type LeaseOption func(*LeaseOp) - -func (op *LeaseOp) applyOpts(opts []LeaseOption) { - for _, opt := range opts { - opt(op) - } -} - -// WithAttachedKeys makes TimeToLive list the keys attached to the given lease ID. -func WithAttachedKeys() LeaseOption { - return func(op *LeaseOp) { op.attachedKeys = true } -} - -func toLeaseTimeToLiveRequest(id LeaseID, opts ...LeaseOption) *pb.LeaseTimeToLiveRequest { - ret := &LeaseOp{id: id} - ret.applyOpts(opts) - return &pb.LeaseTimeToLiveRequest{ID: int64(id), Keys: ret.attachedKeys} -} diff --git a/vendor/github.com/coreos/etcd/clientv3/options.go b/vendor/github.com/coreos/etcd/clientv3/options.go deleted file mode 100644 index fa25811..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/options.go +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2017 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package clientv3 - -import ( - "math" - - "google.golang.org/grpc" -) - -var ( - // Disable gRPC internal retrial logic - // TODO: enable when gRPC retry is stable (FailFast=false) - // Reference: - // - https://github.com/grpc/grpc-go/issues/1532 - // - https://github.com/grpc/proposal/blob/master/A6-client-retries.md - defaultFailFast = grpc.FailFast(true) - - // client-side request send limit, gRPC default is math.MaxInt32 - // Make sure that "client-side send limit < server-side default send/recv limit" - // Same value as "embed.DefaultMaxRequestBytes" plus gRPC overhead bytes - defaultMaxCallSendMsgSize = grpc.MaxCallSendMsgSize(2 * 1024 * 1024) - - // client-side response receive limit, gRPC default is 4MB - // Make sure that "client-side receive limit >= server-side default send/recv limit" - // because range response can easily exceed request send limits - // Default to math.MaxInt32; writes exceeding server-side send limit fails anyway - defaultMaxCallRecvMsgSize = grpc.MaxCallRecvMsgSize(math.MaxInt32) -) - -// defaultCallOpts defines a list of default "gRPC.CallOption". -// Some options are exposed to "clientv3.Config". -// Defaults will be overridden by the settings in "clientv3.Config". -var defaultCallOpts = []grpc.CallOption{defaultFailFast, defaultMaxCallSendMsgSize, defaultMaxCallRecvMsgSize} - -// MaxLeaseTTL is the maximum lease TTL value -const MaxLeaseTTL = 9000000000 diff --git a/vendor/github.com/coreos/etcd/clientv3/ready_wait.go b/vendor/github.com/coreos/etcd/clientv3/ready_wait.go deleted file mode 100644 index 23eea93..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/ready_wait.go +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2017 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package clientv3 - -import "golang.org/x/net/context" - -// TODO: remove this when "FailFast=false" is fixed. -// See https://github.com/grpc/grpc-go/issues/1532. -func readyWait(rpcCtx, clientCtx context.Context, ready <-chan struct{}) error { - select { - case <-ready: - return nil - case <-rpcCtx.Done(): - return rpcCtx.Err() - case <-clientCtx.Done(): - return clientCtx.Err() - } -} diff --git a/vendor/github.com/coreos/etcd/clientv3/retry.go b/vendor/github.com/coreos/etcd/clientv3/retry.go deleted file mode 100644 index c95b2ca..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/retry.go +++ /dev/null @@ -1,471 +0,0 @@ -// Copyright 2016 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package clientv3 - -import ( - "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes" - pb "github.com/coreos/etcd/etcdserver/etcdserverpb" - - "golang.org/x/net/context" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" -) - -type rpcFunc func(ctx context.Context) error -type retryRPCFunc func(context.Context, rpcFunc) error -type retryStopErrFunc func(error) bool - -func isRepeatableStopError(err error) bool { - eErr := rpctypes.Error(err) - // always stop retry on etcd errors - if serverErr, ok := eErr.(rpctypes.EtcdError); ok && serverErr.Code() != codes.Unavailable { - return true - } - // only retry if unavailable - ev, _ := status.FromError(err) - return ev.Code() != codes.Unavailable -} - -func isNonRepeatableStopError(err error) bool { - ev, _ := status.FromError(err) - if ev.Code() != codes.Unavailable { - return true - } - desc := rpctypes.ErrorDesc(err) - return desc != "there is no address available" && desc != "there is no connection available" -} - -func (c *Client) newRetryWrapper(isStop retryStopErrFunc) retryRPCFunc { - return func(rpcCtx context.Context, f rpcFunc) error { - for { - if err := readyWait(rpcCtx, c.ctx, c.balancer.ConnectNotify()); err != nil { - return err - } - pinned := c.balancer.pinned() - err := f(rpcCtx) - if err == nil { - return nil - } - if logger.V(4) { - logger.Infof("clientv3/retry: error %q on pinned endpoint %q", err.Error(), pinned) - } - - if s, ok := status.FromError(err); ok && (s.Code() == codes.Unavailable || s.Code() == codes.DeadlineExceeded || s.Code() == codes.Internal) { - // mark this before endpoint switch is triggered - c.balancer.hostPortError(pinned, err) - c.balancer.next() - if logger.V(4) { - logger.Infof("clientv3/retry: switching from %q due to error %q", pinned, err.Error()) - } - } - - if isStop(err) { - return err - } - } - } -} - -func (c *Client) newAuthRetryWrapper() retryRPCFunc { - return func(rpcCtx context.Context, f rpcFunc) error { - for { - pinned := c.balancer.pinned() - err := f(rpcCtx) - if err == nil { - return nil - } - if logger.V(4) { - logger.Infof("clientv3/auth-retry: error %q on pinned endpoint %q", err.Error(), pinned) - } - // always stop retry on etcd errors other than invalid auth token - if rpctypes.Error(err) == rpctypes.ErrInvalidAuthToken { - gterr := c.getToken(rpcCtx) - if gterr != nil { - if logger.V(4) { - logger.Infof("clientv3/auth-retry: cannot retry due to error %q(%q) on pinned endpoint %q", err.Error(), gterr.Error(), pinned) - } - return err // return the original error for simplicity - } - continue - } - return err - } - } -} - -// RetryKVClient implements a KVClient. -func RetryKVClient(c *Client) pb.KVClient { - repeatableRetry := c.newRetryWrapper(isRepeatableStopError) - nonRepeatableRetry := c.newRetryWrapper(isNonRepeatableStopError) - conn := pb.NewKVClient(c.conn) - retryBasic := &retryKVClient{&nonRepeatableKVClient{conn, nonRepeatableRetry}, repeatableRetry} - retryAuthWrapper := c.newAuthRetryWrapper() - return &retryKVClient{ - &nonRepeatableKVClient{retryBasic, retryAuthWrapper}, - retryAuthWrapper} -} - -type retryKVClient struct { - *nonRepeatableKVClient - repeatableRetry retryRPCFunc -} - -func (rkv *retryKVClient) Range(ctx context.Context, in *pb.RangeRequest, opts ...grpc.CallOption) (resp *pb.RangeResponse, err error) { - err = rkv.repeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rkv.kc.Range(rctx, in, opts...) - return err - }) - return resp, err -} - -type nonRepeatableKVClient struct { - kc pb.KVClient - nonRepeatableRetry retryRPCFunc -} - -func (rkv *nonRepeatableKVClient) Put(ctx context.Context, in *pb.PutRequest, opts ...grpc.CallOption) (resp *pb.PutResponse, err error) { - err = rkv.nonRepeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rkv.kc.Put(rctx, in, opts...) - return err - }) - return resp, err -} - -func (rkv *nonRepeatableKVClient) DeleteRange(ctx context.Context, in *pb.DeleteRangeRequest, opts ...grpc.CallOption) (resp *pb.DeleteRangeResponse, err error) { - err = rkv.nonRepeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rkv.kc.DeleteRange(rctx, in, opts...) - return err - }) - return resp, err -} - -func (rkv *nonRepeatableKVClient) Txn(ctx context.Context, in *pb.TxnRequest, opts ...grpc.CallOption) (resp *pb.TxnResponse, err error) { - // TODO: repeatableRetry if read-only txn - err = rkv.nonRepeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rkv.kc.Txn(rctx, in, opts...) - return err - }) - return resp, err -} - -func (rkv *nonRepeatableKVClient) Compact(ctx context.Context, in *pb.CompactionRequest, opts ...grpc.CallOption) (resp *pb.CompactionResponse, err error) { - err = rkv.nonRepeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rkv.kc.Compact(rctx, in, opts...) - return err - }) - return resp, err -} - -type retryLeaseClient struct { - lc pb.LeaseClient - repeatableRetry retryRPCFunc -} - -// RetryLeaseClient implements a LeaseClient. -func RetryLeaseClient(c *Client) pb.LeaseClient { - retry := &retryLeaseClient{ - pb.NewLeaseClient(c.conn), - c.newRetryWrapper(isRepeatableStopError), - } - return &retryLeaseClient{retry, c.newAuthRetryWrapper()} -} - -func (rlc *retryLeaseClient) LeaseTimeToLive(ctx context.Context, in *pb.LeaseTimeToLiveRequest, opts ...grpc.CallOption) (resp *pb.LeaseTimeToLiveResponse, err error) { - err = rlc.repeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rlc.lc.LeaseTimeToLive(rctx, in, opts...) - return err - }) - return resp, err -} - -func (rlc *retryLeaseClient) LeaseGrant(ctx context.Context, in *pb.LeaseGrantRequest, opts ...grpc.CallOption) (resp *pb.LeaseGrantResponse, err error) { - err = rlc.repeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rlc.lc.LeaseGrant(rctx, in, opts...) - return err - }) - return resp, err - -} - -func (rlc *retryLeaseClient) LeaseRevoke(ctx context.Context, in *pb.LeaseRevokeRequest, opts ...grpc.CallOption) (resp *pb.LeaseRevokeResponse, err error) { - err = rlc.repeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rlc.lc.LeaseRevoke(rctx, in, opts...) - return err - }) - return resp, err -} - -func (rlc *retryLeaseClient) LeaseKeepAlive(ctx context.Context, opts ...grpc.CallOption) (stream pb.Lease_LeaseKeepAliveClient, err error) { - err = rlc.repeatableRetry(ctx, func(rctx context.Context) error { - stream, err = rlc.lc.LeaseKeepAlive(rctx, opts...) - return err - }) - return stream, err -} - -type retryClusterClient struct { - *nonRepeatableClusterClient - repeatableRetry retryRPCFunc -} - -// RetryClusterClient implements a ClusterClient. -func RetryClusterClient(c *Client) pb.ClusterClient { - repeatableRetry := c.newRetryWrapper(isRepeatableStopError) - nonRepeatableRetry := c.newRetryWrapper(isNonRepeatableStopError) - cc := pb.NewClusterClient(c.conn) - return &retryClusterClient{&nonRepeatableClusterClient{cc, nonRepeatableRetry}, repeatableRetry} -} - -func (rcc *retryClusterClient) MemberList(ctx context.Context, in *pb.MemberListRequest, opts ...grpc.CallOption) (resp *pb.MemberListResponse, err error) { - err = rcc.repeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rcc.cc.MemberList(rctx, in, opts...) - return err - }) - return resp, err -} - -type nonRepeatableClusterClient struct { - cc pb.ClusterClient - nonRepeatableRetry retryRPCFunc -} - -func (rcc *nonRepeatableClusterClient) MemberAdd(ctx context.Context, in *pb.MemberAddRequest, opts ...grpc.CallOption) (resp *pb.MemberAddResponse, err error) { - err = rcc.nonRepeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rcc.cc.MemberAdd(rctx, in, opts...) - return err - }) - return resp, err -} - -func (rcc *nonRepeatableClusterClient) MemberRemove(ctx context.Context, in *pb.MemberRemoveRequest, opts ...grpc.CallOption) (resp *pb.MemberRemoveResponse, err error) { - err = rcc.nonRepeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rcc.cc.MemberRemove(rctx, in, opts...) - return err - }) - return resp, err -} - -func (rcc *nonRepeatableClusterClient) MemberUpdate(ctx context.Context, in *pb.MemberUpdateRequest, opts ...grpc.CallOption) (resp *pb.MemberUpdateResponse, err error) { - err = rcc.nonRepeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rcc.cc.MemberUpdate(rctx, in, opts...) - return err - }) - return resp, err -} - -// RetryMaintenanceClient implements a Maintenance. -func RetryMaintenanceClient(c *Client, conn *grpc.ClientConn) pb.MaintenanceClient { - repeatableRetry := c.newRetryWrapper(isRepeatableStopError) - nonRepeatableRetry := c.newRetryWrapper(isNonRepeatableStopError) - mc := pb.NewMaintenanceClient(conn) - return &retryMaintenanceClient{&nonRepeatableMaintenanceClient{mc, nonRepeatableRetry}, repeatableRetry} -} - -type retryMaintenanceClient struct { - *nonRepeatableMaintenanceClient - repeatableRetry retryRPCFunc -} - -func (rmc *retryMaintenanceClient) Alarm(ctx context.Context, in *pb.AlarmRequest, opts ...grpc.CallOption) (resp *pb.AlarmResponse, err error) { - err = rmc.repeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rmc.mc.Alarm(rctx, in, opts...) - return err - }) - return resp, err -} - -func (rmc *retryMaintenanceClient) Status(ctx context.Context, in *pb.StatusRequest, opts ...grpc.CallOption) (resp *pb.StatusResponse, err error) { - err = rmc.repeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rmc.mc.Status(rctx, in, opts...) - return err - }) - return resp, err -} - -func (rmc *retryMaintenanceClient) Hash(ctx context.Context, in *pb.HashRequest, opts ...grpc.CallOption) (resp *pb.HashResponse, err error) { - err = rmc.repeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rmc.mc.Hash(rctx, in, opts...) - return err - }) - return resp, err -} - -func (rmc *retryMaintenanceClient) Snapshot(ctx context.Context, in *pb.SnapshotRequest, opts ...grpc.CallOption) (stream pb.Maintenance_SnapshotClient, err error) { - err = rmc.repeatableRetry(ctx, func(rctx context.Context) error { - stream, err = rmc.mc.Snapshot(rctx, in, opts...) - return err - }) - return stream, err -} - -type nonRepeatableMaintenanceClient struct { - mc pb.MaintenanceClient - nonRepeatableRetry retryRPCFunc -} - -func (rmc *nonRepeatableMaintenanceClient) Defragment(ctx context.Context, in *pb.DefragmentRequest, opts ...grpc.CallOption) (resp *pb.DefragmentResponse, err error) { - err = rmc.nonRepeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rmc.mc.Defragment(rctx, in, opts...) - return err - }) - return resp, err -} - -type retryAuthClient struct { - *nonRepeatableAuthClient - repeatableRetry retryRPCFunc -} - -// RetryAuthClient implements a AuthClient. -func RetryAuthClient(c *Client) pb.AuthClient { - repeatableRetry := c.newRetryWrapper(isRepeatableStopError) - nonRepeatableRetry := c.newRetryWrapper(isNonRepeatableStopError) - ac := pb.NewAuthClient(c.conn) - return &retryAuthClient{&nonRepeatableAuthClient{ac, nonRepeatableRetry}, repeatableRetry} -} - -func (rac *retryAuthClient) UserList(ctx context.Context, in *pb.AuthUserListRequest, opts ...grpc.CallOption) (resp *pb.AuthUserListResponse, err error) { - err = rac.repeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rac.ac.UserList(rctx, in, opts...) - return err - }) - return resp, err -} - -func (rac *retryAuthClient) UserGet(ctx context.Context, in *pb.AuthUserGetRequest, opts ...grpc.CallOption) (resp *pb.AuthUserGetResponse, err error) { - err = rac.repeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rac.ac.UserGet(rctx, in, opts...) - return err - }) - return resp, err -} - -func (rac *retryAuthClient) RoleGet(ctx context.Context, in *pb.AuthRoleGetRequest, opts ...grpc.CallOption) (resp *pb.AuthRoleGetResponse, err error) { - err = rac.repeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rac.ac.RoleGet(rctx, in, opts...) - return err - }) - return resp, err -} - -func (rac *retryAuthClient) RoleList(ctx context.Context, in *pb.AuthRoleListRequest, opts ...grpc.CallOption) (resp *pb.AuthRoleListResponse, err error) { - err = rac.repeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rac.ac.RoleList(rctx, in, opts...) - return err - }) - return resp, err -} - -type nonRepeatableAuthClient struct { - ac pb.AuthClient - nonRepeatableRetry retryRPCFunc -} - -func (rac *nonRepeatableAuthClient) AuthEnable(ctx context.Context, in *pb.AuthEnableRequest, opts ...grpc.CallOption) (resp *pb.AuthEnableResponse, err error) { - err = rac.nonRepeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rac.ac.AuthEnable(rctx, in, opts...) - return err - }) - return resp, err -} - -func (rac *nonRepeatableAuthClient) AuthDisable(ctx context.Context, in *pb.AuthDisableRequest, opts ...grpc.CallOption) (resp *pb.AuthDisableResponse, err error) { - err = rac.nonRepeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rac.ac.AuthDisable(rctx, in, opts...) - return err - }) - return resp, err -} - -func (rac *nonRepeatableAuthClient) UserAdd(ctx context.Context, in *pb.AuthUserAddRequest, opts ...grpc.CallOption) (resp *pb.AuthUserAddResponse, err error) { - err = rac.nonRepeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rac.ac.UserAdd(rctx, in, opts...) - return err - }) - return resp, err -} - -func (rac *nonRepeatableAuthClient) UserDelete(ctx context.Context, in *pb.AuthUserDeleteRequest, opts ...grpc.CallOption) (resp *pb.AuthUserDeleteResponse, err error) { - err = rac.nonRepeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rac.ac.UserDelete(rctx, in, opts...) - return err - }) - return resp, err -} - -func (rac *nonRepeatableAuthClient) UserChangePassword(ctx context.Context, in *pb.AuthUserChangePasswordRequest, opts ...grpc.CallOption) (resp *pb.AuthUserChangePasswordResponse, err error) { - err = rac.nonRepeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rac.ac.UserChangePassword(rctx, in, opts...) - return err - }) - return resp, err -} - -func (rac *nonRepeatableAuthClient) UserGrantRole(ctx context.Context, in *pb.AuthUserGrantRoleRequest, opts ...grpc.CallOption) (resp *pb.AuthUserGrantRoleResponse, err error) { - err = rac.nonRepeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rac.ac.UserGrantRole(rctx, in, opts...) - return err - }) - return resp, err -} - -func (rac *nonRepeatableAuthClient) UserRevokeRole(ctx context.Context, in *pb.AuthUserRevokeRoleRequest, opts ...grpc.CallOption) (resp *pb.AuthUserRevokeRoleResponse, err error) { - err = rac.nonRepeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rac.ac.UserRevokeRole(rctx, in, opts...) - return err - }) - return resp, err -} - -func (rac *nonRepeatableAuthClient) RoleAdd(ctx context.Context, in *pb.AuthRoleAddRequest, opts ...grpc.CallOption) (resp *pb.AuthRoleAddResponse, err error) { - err = rac.nonRepeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rac.ac.RoleAdd(rctx, in, opts...) - return err - }) - return resp, err -} - -func (rac *nonRepeatableAuthClient) RoleDelete(ctx context.Context, in *pb.AuthRoleDeleteRequest, opts ...grpc.CallOption) (resp *pb.AuthRoleDeleteResponse, err error) { - err = rac.nonRepeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rac.ac.RoleDelete(rctx, in, opts...) - return err - }) - return resp, err -} - -func (rac *nonRepeatableAuthClient) RoleGrantPermission(ctx context.Context, in *pb.AuthRoleGrantPermissionRequest, opts ...grpc.CallOption) (resp *pb.AuthRoleGrantPermissionResponse, err error) { - err = rac.nonRepeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rac.ac.RoleGrantPermission(rctx, in, opts...) - return err - }) - return resp, err -} - -func (rac *nonRepeatableAuthClient) RoleRevokePermission(ctx context.Context, in *pb.AuthRoleRevokePermissionRequest, opts ...grpc.CallOption) (resp *pb.AuthRoleRevokePermissionResponse, err error) { - err = rac.nonRepeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rac.ac.RoleRevokePermission(rctx, in, opts...) - return err - }) - return resp, err -} - -func (rac *nonRepeatableAuthClient) Authenticate(ctx context.Context, in *pb.AuthenticateRequest, opts ...grpc.CallOption) (resp *pb.AuthenticateResponse, err error) { - err = rac.nonRepeatableRetry(ctx, func(rctx context.Context) error { - resp, err = rac.ac.Authenticate(rctx, in, opts...) - return err - }) - return resp, err -} diff --git a/vendor/github.com/coreos/etcd/clientv3/sort.go b/vendor/github.com/coreos/etcd/clientv3/sort.go deleted file mode 100644 index 2bb9d9a..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/sort.go +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2016 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package clientv3 - -type SortTarget int -type SortOrder int - -const ( - SortNone SortOrder = iota - SortAscend - SortDescend -) - -const ( - SortByKey SortTarget = iota - SortByVersion - SortByCreateRevision - SortByModRevision - SortByValue -) - -type SortOption struct { - Target SortTarget - Order SortOrder -} diff --git a/vendor/github.com/coreos/etcd/clientv3/txn.go b/vendor/github.com/coreos/etcd/clientv3/txn.go deleted file mode 100644 index 1a80c8e..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/txn.go +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright 2016 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package clientv3 - -import ( - "sync" - - pb "github.com/coreos/etcd/etcdserver/etcdserverpb" - - "golang.org/x/net/context" - "google.golang.org/grpc" -) - -// Txn is the interface that wraps mini-transactions. -// -// Txn(context.TODO()).If( -// Compare(Value(k1), ">", v1), -// Compare(Version(k1), "=", 2) -// ).Then( -// OpPut(k2,v2), OpPut(k3,v3) -// ).Else( -// OpPut(k4,v4), OpPut(k5,v5) -// ).Commit() -// -type Txn interface { - // If takes a list of comparison. If all comparisons passed in succeed, - // the operations passed into Then() will be executed. Or the operations - // passed into Else() will be executed. - If(cs ...Cmp) Txn - - // Then takes a list of operations. The Ops list will be executed, if the - // comparisons passed in If() succeed. - Then(ops ...Op) Txn - - // Else takes a list of operations. The Ops list will be executed, if the - // comparisons passed in If() fail. - Else(ops ...Op) Txn - - // Commit tries to commit the transaction. - Commit() (*TxnResponse, error) -} - -type txn struct { - kv *kv - ctx context.Context - - mu sync.Mutex - cif bool - cthen bool - celse bool - - isWrite bool - - cmps []*pb.Compare - - sus []*pb.RequestOp - fas []*pb.RequestOp - - callOpts []grpc.CallOption -} - -func (txn *txn) If(cs ...Cmp) Txn { - txn.mu.Lock() - defer txn.mu.Unlock() - - if txn.cif { - panic("cannot call If twice!") - } - - if txn.cthen { - panic("cannot call If after Then!") - } - - if txn.celse { - panic("cannot call If after Else!") - } - - txn.cif = true - - for i := range cs { - txn.cmps = append(txn.cmps, (*pb.Compare)(&cs[i])) - } - - return txn -} - -func (txn *txn) Then(ops ...Op) Txn { - txn.mu.Lock() - defer txn.mu.Unlock() - - if txn.cthen { - panic("cannot call Then twice!") - } - if txn.celse { - panic("cannot call Then after Else!") - } - - txn.cthen = true - - for _, op := range ops { - txn.isWrite = txn.isWrite || op.isWrite() - txn.sus = append(txn.sus, op.toRequestOp()) - } - - return txn -} - -func (txn *txn) Else(ops ...Op) Txn { - txn.mu.Lock() - defer txn.mu.Unlock() - - if txn.celse { - panic("cannot call Else twice!") - } - - txn.celse = true - - for _, op := range ops { - txn.isWrite = txn.isWrite || op.isWrite() - txn.fas = append(txn.fas, op.toRequestOp()) - } - - return txn -} - -func (txn *txn) Commit() (*TxnResponse, error) { - txn.mu.Lock() - defer txn.mu.Unlock() - - r := &pb.TxnRequest{Compare: txn.cmps, Success: txn.sus, Failure: txn.fas} - - var resp *pb.TxnResponse - var err error - resp, err = txn.kv.remote.Txn(txn.ctx, r, txn.callOpts...) - if err != nil { - return nil, toErr(txn.ctx, err) - } - return (*TxnResponse)(resp), nil -} diff --git a/vendor/github.com/coreos/etcd/clientv3/watch.go b/vendor/github.com/coreos/etcd/clientv3/watch.go deleted file mode 100644 index 16a91fd..0000000 --- a/vendor/github.com/coreos/etcd/clientv3/watch.go +++ /dev/null @@ -1,814 +0,0 @@ -// Copyright 2016 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package clientv3 - -import ( - "fmt" - "sync" - "time" - - v3rpc "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes" - pb "github.com/coreos/etcd/etcdserver/etcdserverpb" - mvccpb "github.com/coreos/etcd/mvcc/mvccpb" - - "golang.org/x/net/context" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" -) - -const ( - EventTypeDelete = mvccpb.DELETE - EventTypePut = mvccpb.PUT - - closeSendErrTimeout = 250 * time.Millisecond -) - -type Event mvccpb.Event - -type WatchChan <-chan WatchResponse - -type Watcher interface { - // Watch watches on a key or prefix. The watched events will be returned - // through the returned channel. If revisions waiting to be sent over the - // watch are compacted, then the watch will be canceled by the server, the - // client will post a compacted error watch response, and the channel will close. - Watch(ctx context.Context, key string, opts ...OpOption) WatchChan - - // Close closes the watcher and cancels all watch requests. - Close() error -} - -type WatchResponse struct { - Header pb.ResponseHeader - Events []*Event - - // CompactRevision is the minimum revision the watcher may receive. - CompactRevision int64 - - // Canceled is used to indicate watch failure. - // If the watch failed and the stream was about to close, before the channel is closed, - // the channel sends a final response that has Canceled set to true with a non-nil Err(). - Canceled bool - - // Created is used to indicate the creation of the watcher. - Created bool - - closeErr error - - // cancelReason is a reason of canceling watch - cancelReason string -} - -// IsCreate returns true if the event tells that the key is newly created. -func (e *Event) IsCreate() bool { - return e.Type == EventTypePut && e.Kv.CreateRevision == e.Kv.ModRevision -} - -// IsModify returns true if the event tells that a new value is put on existing key. -func (e *Event) IsModify() bool { - return e.Type == EventTypePut && e.Kv.CreateRevision != e.Kv.ModRevision -} - -// Err is the error value if this WatchResponse holds an error. -func (wr *WatchResponse) Err() error { - switch { - case wr.closeErr != nil: - return v3rpc.Error(wr.closeErr) - case wr.CompactRevision != 0: - return v3rpc.ErrCompacted - case wr.Canceled: - if len(wr.cancelReason) != 0 { - return v3rpc.Error(status.Error(codes.FailedPrecondition, wr.cancelReason)) - } - return v3rpc.ErrFutureRev - } - return nil -} - -// IsProgressNotify returns true if the WatchResponse is progress notification. -func (wr *WatchResponse) IsProgressNotify() bool { - return len(wr.Events) == 0 && !wr.Canceled && !wr.Created && wr.CompactRevision == 0 && wr.Header.Revision != 0 -} - -// watcher implements the Watcher interface -type watcher struct { - remote pb.WatchClient - callOpts []grpc.CallOption - - // mu protects the grpc streams map - mu sync.RWMutex - - // streams holds all the active grpc streams keyed by ctx value. - streams map[string]*watchGrpcStream -} - -// watchGrpcStream tracks all watch resources attached to a single grpc stream. -type watchGrpcStream struct { - owner *watcher - remote pb.WatchClient - callOpts []grpc.CallOption - - // ctx controls internal remote.Watch requests - ctx context.Context - // ctxKey is the key used when looking up this stream's context - ctxKey string - cancel context.CancelFunc - - // substreams holds all active watchers on this grpc stream - substreams map[int64]*watcherStream - // resuming holds all resuming watchers on this grpc stream - resuming []*watcherStream - - // reqc sends a watch request from Watch() to the main goroutine - reqc chan *watchRequest - // respc receives data from the watch client - respc chan *pb.WatchResponse - // donec closes to broadcast shutdown - donec chan struct{} - // errc transmits errors from grpc Recv to the watch stream reconnect logic - errc chan error - // closingc gets the watcherStream of closing watchers - closingc chan *watcherStream - // wg is Done when all substream goroutines have exited - wg sync.WaitGroup - - // resumec closes to signal that all substreams should begin resuming - resumec chan struct{} - // closeErr is the error that closed the watch stream - closeErr error -} - -// watchRequest is issued by the subscriber to start a new watcher -type watchRequest struct { - ctx context.Context - key string - end string - rev int64 - // send created notification event if this field is true - createdNotify bool - // progressNotify is for progress updates - progressNotify bool - // filters is the list of events to filter out - filters []pb.WatchCreateRequest_FilterType - // get the previous key-value pair before the event happens - prevKV bool - // retc receives a chan WatchResponse once the watcher is established - retc chan chan WatchResponse -} - -// watcherStream represents a registered watcher -type watcherStream struct { - // initReq is the request that initiated this request - initReq watchRequest - - // outc publishes watch responses to subscriber - outc chan WatchResponse - // recvc buffers watch responses before publishing - recvc chan *WatchResponse - // donec closes when the watcherStream goroutine stops. - donec chan struct{} - // closing is set to true when stream should be scheduled to shutdown. - closing bool - // id is the registered watch id on the grpc stream - id int64 - - // buf holds all events received from etcd but not yet consumed by the client - buf []*WatchResponse -} - -func NewWatcher(c *Client) Watcher { - return NewWatchFromWatchClient(pb.NewWatchClient(c.conn), c) -} - -func NewWatchFromWatchClient(wc pb.WatchClient, c *Client) Watcher { - w := &watcher{ - remote: wc, - streams: make(map[string]*watchGrpcStream), - } - if c != nil { - w.callOpts = c.callOpts - } - return w -} - -// never closes -var valCtxCh = make(chan struct{}) -var zeroTime = time.Unix(0, 0) - -// ctx with only the values; never Done -type valCtx struct{ context.Context } - -func (vc *valCtx) Deadline() (time.Time, bool) { return zeroTime, false } -func (vc *valCtx) Done() <-chan struct{} { return valCtxCh } -func (vc *valCtx) Err() error { return nil } - -func (w *watcher) newWatcherGrpcStream(inctx context.Context) *watchGrpcStream { - ctx, cancel := context.WithCancel(&valCtx{inctx}) - wgs := &watchGrpcStream{ - owner: w, - remote: w.remote, - callOpts: w.callOpts, - ctx: ctx, - ctxKey: streamKeyFromCtx(inctx), - cancel: cancel, - substreams: make(map[int64]*watcherStream), - respc: make(chan *pb.WatchResponse), - reqc: make(chan *watchRequest), - donec: make(chan struct{}), - errc: make(chan error, 1), - closingc: make(chan *watcherStream), - resumec: make(chan struct{}), - } - go wgs.run() - return wgs -} - -// Watch posts a watch request to run() and waits for a new watcher channel -func (w *watcher) Watch(ctx context.Context, key string, opts ...OpOption) WatchChan { - ow := opWatch(key, opts...) - - var filters []pb.WatchCreateRequest_FilterType - if ow.filterPut { - filters = append(filters, pb.WatchCreateRequest_NOPUT) - } - if ow.filterDelete { - filters = append(filters, pb.WatchCreateRequest_NODELETE) - } - - wr := &watchRequest{ - ctx: ctx, - createdNotify: ow.createdNotify, - key: string(ow.key), - end: string(ow.end), - rev: ow.rev, - progressNotify: ow.progressNotify, - filters: filters, - prevKV: ow.prevKV, - retc: make(chan chan WatchResponse, 1), - } - - ok := false - ctxKey := streamKeyFromCtx(ctx) - - // find or allocate appropriate grpc watch stream - w.mu.Lock() - if w.streams == nil { - // closed - w.mu.Unlock() - ch := make(chan WatchResponse) - close(ch) - return ch - } - wgs := w.streams[ctxKey] - if wgs == nil { - wgs = w.newWatcherGrpcStream(ctx) - w.streams[ctxKey] = wgs - } - donec := wgs.donec - reqc := wgs.reqc - w.mu.Unlock() - - // couldn't create channel; return closed channel - closeCh := make(chan WatchResponse, 1) - - // submit request - select { - case reqc <- wr: - ok = true - case <-wr.ctx.Done(): - case <-donec: - if wgs.closeErr != nil { - closeCh <- WatchResponse{closeErr: wgs.closeErr} - break - } - // retry; may have dropped stream from no ctxs - return w.Watch(ctx, key, opts...) - } - - // receive channel - if ok { - select { - case ret := <-wr.retc: - return ret - case <-ctx.Done(): - case <-donec: - if wgs.closeErr != nil { - closeCh <- WatchResponse{closeErr: wgs.closeErr} - break - } - // retry; may have dropped stream from no ctxs - return w.Watch(ctx, key, opts...) - } - } - - close(closeCh) - return closeCh -} - -func (w *watcher) Close() (err error) { - w.mu.Lock() - streams := w.streams - w.streams = nil - w.mu.Unlock() - for _, wgs := range streams { - if werr := wgs.close(); werr != nil { - err = werr - } - } - return err -} - -func (w *watchGrpcStream) close() (err error) { - w.cancel() - <-w.donec - select { - case err = <-w.errc: - default: - } - return toErr(w.ctx, err) -} - -func (w *watcher) closeStream(wgs *watchGrpcStream) { - w.mu.Lock() - close(wgs.donec) - wgs.cancel() - if w.streams != nil { - delete(w.streams, wgs.ctxKey) - } - w.mu.Unlock() -} - -func (w *watchGrpcStream) addSubstream(resp *pb.WatchResponse, ws *watcherStream) { - if resp.WatchId == -1 { - // failed; no channel - close(ws.recvc) - return - } - ws.id = resp.WatchId - w.substreams[ws.id] = ws -} - -func (w *watchGrpcStream) sendCloseSubstream(ws *watcherStream, resp *WatchResponse) { - select { - case ws.outc <- *resp: - case <-ws.initReq.ctx.Done(): - case <-time.After(closeSendErrTimeout): - } - close(ws.outc) -} - -func (w *watchGrpcStream) closeSubstream(ws *watcherStream) { - // send channel response in case stream was never established - select { - case ws.initReq.retc <- ws.outc: - default: - } - // close subscriber's channel - if closeErr := w.closeErr; closeErr != nil && ws.initReq.ctx.Err() == nil { - go w.sendCloseSubstream(ws, &WatchResponse{closeErr: w.closeErr}) - } else if ws.outc != nil { - close(ws.outc) - } - if ws.id != -1 { - delete(w.substreams, ws.id) - return - } - for i := range w.resuming { - if w.resuming[i] == ws { - w.resuming[i] = nil - return - } - } -} - -// run is the root of the goroutines for managing a watcher client -func (w *watchGrpcStream) run() { - var wc pb.Watch_WatchClient - var closeErr error - - // substreams marked to close but goroutine still running; needed for - // avoiding double-closing recvc on grpc stream teardown - closing := make(map[*watcherStream]struct{}) - - defer func() { - w.closeErr = closeErr - // shutdown substreams and resuming substreams - for _, ws := range w.substreams { - if _, ok := closing[ws]; !ok { - close(ws.recvc) - closing[ws] = struct{}{} - } - } - for _, ws := range w.resuming { - if _, ok := closing[ws]; ws != nil && !ok { - close(ws.recvc) - closing[ws] = struct{}{} - } - } - w.joinSubstreams() - for range closing { - w.closeSubstream(<-w.closingc) - } - w.wg.Wait() - w.owner.closeStream(w) - }() - - // start a stream with the etcd grpc server - if wc, closeErr = w.newWatchClient(); closeErr != nil { - return - } - - cancelSet := make(map[int64]struct{}) - - for { - select { - // Watch() requested - case wreq := <-w.reqc: - outc := make(chan WatchResponse, 1) - ws := &watcherStream{ - initReq: *wreq, - id: -1, - outc: outc, - // unbuffered so resumes won't cause repeat events - recvc: make(chan *WatchResponse), - } - - ws.donec = make(chan struct{}) - w.wg.Add(1) - go w.serveSubstream(ws, w.resumec) - - // queue up for watcher creation/resume - w.resuming = append(w.resuming, ws) - if len(w.resuming) == 1 { - // head of resume queue, can register a new watcher - wc.Send(ws.initReq.toPB()) - } - // New events from the watch client - case pbresp := <-w.respc: - switch { - case pbresp.Created: - // response to head of queue creation - if ws := w.resuming[0]; ws != nil { - w.addSubstream(pbresp, ws) - w.dispatchEvent(pbresp) - w.resuming[0] = nil - } - if ws := w.nextResume(); ws != nil { - wc.Send(ws.initReq.toPB()) - } - case pbresp.Canceled: - delete(cancelSet, pbresp.WatchId) - if ws, ok := w.substreams[pbresp.WatchId]; ok { - // signal to stream goroutine to update closingc - close(ws.recvc) - closing[ws] = struct{}{} - } - default: - // dispatch to appropriate watch stream - if ok := w.dispatchEvent(pbresp); ok { - break - } - // watch response on unexpected watch id; cancel id - if _, ok := cancelSet[pbresp.WatchId]; ok { - break - } - cancelSet[pbresp.WatchId] = struct{}{} - cr := &pb.WatchRequest_CancelRequest{ - CancelRequest: &pb.WatchCancelRequest{ - WatchId: pbresp.WatchId, - }, - } - req := &pb.WatchRequest{RequestUnion: cr} - wc.Send(req) - } - // watch client failed on Recv; spawn another if possible - case err := <-w.errc: - if isHaltErr(w.ctx, err) || toErr(w.ctx, err) == v3rpc.ErrNoLeader { - closeErr = err - return - } - if wc, closeErr = w.newWatchClient(); closeErr != nil { - return - } - if ws := w.nextResume(); ws != nil { - wc.Send(ws.initReq.toPB()) - } - cancelSet = make(map[int64]struct{}) - case <-w.ctx.Done(): - return - case ws := <-w.closingc: - w.closeSubstream(ws) - delete(closing, ws) - if len(w.substreams)+len(w.resuming) == 0 { - // no more watchers on this stream, shutdown - return - } - } - } -} - -// nextResume chooses the next resuming to register with the grpc stream. Abandoned -// streams are marked as nil in the queue since the head must wait for its inflight registration. -func (w *watchGrpcStream) nextResume() *watcherStream { - for len(w.resuming) != 0 { - if w.resuming[0] != nil { - return w.resuming[0] - } - w.resuming = w.resuming[1:len(w.resuming)] - } - return nil -} - -// dispatchEvent sends a WatchResponse to the appropriate watcher stream -func (w *watchGrpcStream) dispatchEvent(pbresp *pb.WatchResponse) bool { - events := make([]*Event, len(pbresp.Events)) - for i, ev := range pbresp.Events { - events[i] = (*Event)(ev) - } - wr := &WatchResponse{ - Header: *pbresp.Header, - Events: events, - CompactRevision: pbresp.CompactRevision, - Created: pbresp.Created, - Canceled: pbresp.Canceled, - cancelReason: pbresp.CancelReason, - } - ws, ok := w.substreams[pbresp.WatchId] - if !ok { - return false - } - select { - case ws.recvc <- wr: - case <-ws.donec: - return false - } - return true -} - -// serveWatchClient forwards messages from the grpc stream to run() -func (w *watchGrpcStream) serveWatchClient(wc pb.Watch_WatchClient) { - for { - resp, err := wc.Recv() - if err != nil { - select { - case w.errc <- err: - case <-w.donec: - } - return - } - select { - case w.respc <- resp: - case <-w.donec: - return - } - } -} - -// serveSubstream forwards watch responses from run() to the subscriber -func (w *watchGrpcStream) serveSubstream(ws *watcherStream, resumec chan struct{}) { - if ws.closing { - panic("created substream goroutine but substream is closing") - } - - // nextRev is the minimum expected next revision - nextRev := ws.initReq.rev - resuming := false - defer func() { - if !resuming { - ws.closing = true - } - close(ws.donec) - if !resuming { - w.closingc <- ws - } - w.wg.Done() - }() - - emptyWr := &WatchResponse{} - for { - curWr := emptyWr - outc := ws.outc - - if len(ws.buf) > 0 { - curWr = ws.buf[0] - } else { - outc = nil - } - select { - case outc <- *curWr: - if ws.buf[0].Err() != nil { - return - } - ws.buf[0] = nil - ws.buf = ws.buf[1:] - case wr, ok := <-ws.recvc: - if !ok { - // shutdown from closeSubstream - return - } - - if wr.Created { - if ws.initReq.retc != nil { - ws.initReq.retc <- ws.outc - // to prevent next write from taking the slot in buffered channel - // and posting duplicate create events - ws.initReq.retc = nil - - // send first creation event only if requested - if ws.initReq.createdNotify { - ws.outc <- *wr - } - // once the watch channel is returned, a current revision - // watch must resume at the store revision. This is necessary - // for the following case to work as expected: - // wch := m1.Watch("a") - // m2.Put("a", "b") - // <-wch - // If the revision is only bound on the first observed event, - // if wch is disconnected before the Put is issued, then reconnects - // after it is committed, it'll miss the Put. - if ws.initReq.rev == 0 { - nextRev = wr.Header.Revision - } - } - } else { - // current progress of watch; <= store revision - nextRev = wr.Header.Revision - } - - if len(wr.Events) > 0 { - nextRev = wr.Events[len(wr.Events)-1].Kv.ModRevision + 1 - } - ws.initReq.rev = nextRev - - // created event is already sent above, - // watcher should not post duplicate events - if wr.Created { - continue - } - - // TODO pause channel if buffer gets too large - ws.buf = append(ws.buf, wr) - case <-w.ctx.Done(): - return - case <-ws.initReq.ctx.Done(): - return - case <-resumec: - resuming = true - return - } - } - // lazily send cancel message if events on missing id -} - -func (w *watchGrpcStream) newWatchClient() (pb.Watch_WatchClient, error) { - // mark all substreams as resuming - close(w.resumec) - w.resumec = make(chan struct{}) - w.joinSubstreams() - for _, ws := range w.substreams { - ws.id = -1 - w.resuming = append(w.resuming, ws) - } - // strip out nils, if any - var resuming []*watcherStream - for _, ws := range w.resuming { - if ws != nil { - resuming = append(resuming, ws) - } - } - w.resuming = resuming - w.substreams = make(map[int64]*watcherStream) - - // connect to grpc stream while accepting watcher cancelation - stopc := make(chan struct{}) - donec := w.waitCancelSubstreams(stopc) - wc, err := w.openWatchClient() - close(stopc) - <-donec - - // serve all non-closing streams, even if there's a client error - // so that the teardown path can shutdown the streams as expected. - for _, ws := range w.resuming { - if ws.closing { - continue - } - ws.donec = make(chan struct{}) - w.wg.Add(1) - go w.serveSubstream(ws, w.resumec) - } - - if err != nil { - return nil, v3rpc.Error(err) - } - - // receive data from new grpc stream - go w.serveWatchClient(wc) - return wc, nil -} - -func (w *watchGrpcStream) waitCancelSubstreams(stopc <-chan struct{}) <-chan struct{} { - var wg sync.WaitGroup - wg.Add(len(w.resuming)) - donec := make(chan struct{}) - for i := range w.resuming { - go func(ws *watcherStream) { - defer wg.Done() - if ws.closing { - if ws.initReq.ctx.Err() != nil && ws.outc != nil { - close(ws.outc) - ws.outc = nil - } - return - } - select { - case <-ws.initReq.ctx.Done(): - // closed ws will be removed from resuming - ws.closing = true - close(ws.outc) - ws.outc = nil - w.wg.Add(1) - go func() { - defer w.wg.Done() - w.closingc <- ws - }() - case <-stopc: - } - }(w.resuming[i]) - } - go func() { - defer close(donec) - wg.Wait() - }() - return donec -} - -// joinSubstreams waits for all substream goroutines to complete. -func (w *watchGrpcStream) joinSubstreams() { - for _, ws := range w.substreams { - <-ws.donec - } - for _, ws := range w.resuming { - if ws != nil { - <-ws.donec - } - } -} - -// openWatchClient retries opening a watch client until success or halt. -// manually retry in case "ws==nil && err==nil" -// TODO: remove FailFast=false -func (w *watchGrpcStream) openWatchClient() (ws pb.Watch_WatchClient, err error) { - for { - select { - case <-w.ctx.Done(): - if err == nil { - return nil, w.ctx.Err() - } - return nil, err - default: - } - if ws, err = w.remote.Watch(w.ctx, w.callOpts...); ws != nil && err == nil { - break - } - if isHaltErr(w.ctx, err) { - return nil, v3rpc.Error(err) - } - } - return ws, nil -} - -// toPB converts an internal watch request structure to its protobuf WatchRequest structure. -func (wr *watchRequest) toPB() *pb.WatchRequest { - req := &pb.WatchCreateRequest{ - StartRevision: wr.rev, - Key: []byte(wr.key), - RangeEnd: []byte(wr.end), - ProgressNotify: wr.progressNotify, - Filters: wr.filters, - PrevKv: wr.prevKV, - } - cr := &pb.WatchRequest_CreateRequest{CreateRequest: req} - return &pb.WatchRequest{RequestUnion: cr} -} - -func streamKeyFromCtx(ctx context.Context) string { - if md, ok := metadata.FromOutgoingContext(ctx); ok { - return fmt.Sprintf("%+v", md) - } - return "" -} diff --git a/vendor/github.com/coreos/etcd/cmd/etcd b/vendor/github.com/coreos/etcd/cmd/etcd deleted file mode 120000 index b870225..0000000 --- a/vendor/github.com/coreos/etcd/cmd/etcd +++ /dev/null @@ -1 +0,0 @@ -../ \ No newline at end of file diff --git a/vendor/github.com/coreos/etcd/cmd/etcdctl b/vendor/github.com/coreos/etcd/cmd/etcdctl deleted file mode 120000 index 05bb269..0000000 --- a/vendor/github.com/coreos/etcd/cmd/etcdctl +++ /dev/null @@ -1 +0,0 @@ -../etcdctl \ No newline at end of file diff --git a/vendor/github.com/coreos/etcd/cmd/tools b/vendor/github.com/coreos/etcd/cmd/tools deleted file mode 120000 index 4887d6e..0000000 --- a/vendor/github.com/coreos/etcd/cmd/tools +++ /dev/null @@ -1 +0,0 @@ -../tools \ No newline at end of file diff --git a/vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/doc.go b/vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/doc.go deleted file mode 100644 index f72c6a6..0000000 --- a/vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/doc.go +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2016 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package rpctypes has types and values shared by the etcd server and client for v3 RPC interaction. -package rpctypes diff --git a/vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/error.go b/vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/error.go deleted file mode 100644 index 9a2ad74..0000000 --- a/vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/error.go +++ /dev/null @@ -1,201 +0,0 @@ -// Copyright 2015 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package rpctypes - -import ( - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" -) - -var ( - // server-side error - ErrGRPCEmptyKey = grpc.Errorf(codes.InvalidArgument, "etcdserver: key is not provided") - ErrGRPCKeyNotFound = grpc.Errorf(codes.InvalidArgument, "etcdserver: key not found") - ErrGRPCValueProvided = grpc.Errorf(codes.InvalidArgument, "etcdserver: value is provided") - ErrGRPCLeaseProvided = grpc.Errorf(codes.InvalidArgument, "etcdserver: lease is provided") - ErrGRPCTooManyOps = grpc.Errorf(codes.InvalidArgument, "etcdserver: too many operations in txn request") - ErrGRPCDuplicateKey = grpc.Errorf(codes.InvalidArgument, "etcdserver: duplicate key given in txn request") - ErrGRPCCompacted = grpc.Errorf(codes.OutOfRange, "etcdserver: mvcc: required revision has been compacted") - ErrGRPCFutureRev = grpc.Errorf(codes.OutOfRange, "etcdserver: mvcc: required revision is a future revision") - ErrGRPCNoSpace = grpc.Errorf(codes.ResourceExhausted, "etcdserver: mvcc: database space exceeded") - - ErrGRPCLeaseNotFound = grpc.Errorf(codes.NotFound, "etcdserver: requested lease not found") - ErrGRPCLeaseExist = grpc.Errorf(codes.FailedPrecondition, "etcdserver: lease already exists") - ErrGRPCLeaseTTLTooLarge = grpc.Errorf(codes.OutOfRange, "etcdserver: too large lease TTL") - - ErrGRPCMemberExist = grpc.Errorf(codes.FailedPrecondition, "etcdserver: member ID already exist") - ErrGRPCPeerURLExist = grpc.Errorf(codes.FailedPrecondition, "etcdserver: Peer URLs already exists") - ErrGRPCMemberNotEnoughStarted = grpc.Errorf(codes.FailedPrecondition, "etcdserver: re-configuration failed due to not enough started members") - ErrGRPCMemberBadURLs = grpc.Errorf(codes.InvalidArgument, "etcdserver: given member URLs are invalid") - ErrGRPCMemberNotFound = grpc.Errorf(codes.NotFound, "etcdserver: member not found") - - ErrGRPCRequestTooLarge = grpc.Errorf(codes.InvalidArgument, "etcdserver: request is too large") - ErrGRPCRequestTooManyRequests = grpc.Errorf(codes.ResourceExhausted, "etcdserver: too many requests") - - ErrGRPCRootUserNotExist = grpc.Errorf(codes.FailedPrecondition, "etcdserver: root user does not exist") - ErrGRPCRootRoleNotExist = grpc.Errorf(codes.FailedPrecondition, "etcdserver: root user does not have root role") - ErrGRPCUserAlreadyExist = grpc.Errorf(codes.FailedPrecondition, "etcdserver: user name already exists") - ErrGRPCUserEmpty = grpc.Errorf(codes.InvalidArgument, "etcdserver: user name is empty") - ErrGRPCUserNotFound = grpc.Errorf(codes.FailedPrecondition, "etcdserver: user name not found") - ErrGRPCRoleAlreadyExist = grpc.Errorf(codes.FailedPrecondition, "etcdserver: role name already exists") - ErrGRPCRoleNotFound = grpc.Errorf(codes.FailedPrecondition, "etcdserver: role name not found") - ErrGRPCAuthFailed = grpc.Errorf(codes.InvalidArgument, "etcdserver: authentication failed, invalid user ID or password") - ErrGRPCPermissionDenied = grpc.Errorf(codes.PermissionDenied, "etcdserver: permission denied") - ErrGRPCRoleNotGranted = grpc.Errorf(codes.FailedPrecondition, "etcdserver: role is not granted to the user") - ErrGRPCPermissionNotGranted = grpc.Errorf(codes.FailedPrecondition, "etcdserver: permission is not granted to the role") - ErrGRPCAuthNotEnabled = grpc.Errorf(codes.FailedPrecondition, "etcdserver: authentication is not enabled") - ErrGRPCInvalidAuthToken = grpc.Errorf(codes.Unauthenticated, "etcdserver: invalid auth token") - ErrGRPCInvalidAuthMgmt = grpc.Errorf(codes.InvalidArgument, "etcdserver: invalid auth management") - - ErrGRPCNoLeader = grpc.Errorf(codes.Unavailable, "etcdserver: no leader") - ErrGRPCNotCapable = grpc.Errorf(codes.Unavailable, "etcdserver: not capable") - ErrGRPCStopped = grpc.Errorf(codes.Unavailable, "etcdserver: server stopped") - ErrGRPCTimeout = grpc.Errorf(codes.Unavailable, "etcdserver: request timed out") - ErrGRPCTimeoutDueToLeaderFail = grpc.Errorf(codes.Unavailable, "etcdserver: request timed out, possibly due to previous leader failure") - ErrGRPCTimeoutDueToConnectionLost = grpc.Errorf(codes.Unavailable, "etcdserver: request timed out, possibly due to connection lost") - ErrGRPCUnhealthy = grpc.Errorf(codes.Unavailable, "etcdserver: unhealthy cluster") - - errStringToError = map[string]error{ - grpc.ErrorDesc(ErrGRPCEmptyKey): ErrGRPCEmptyKey, - grpc.ErrorDesc(ErrGRPCKeyNotFound): ErrGRPCKeyNotFound, - grpc.ErrorDesc(ErrGRPCValueProvided): ErrGRPCValueProvided, - grpc.ErrorDesc(ErrGRPCLeaseProvided): ErrGRPCLeaseProvided, - - grpc.ErrorDesc(ErrGRPCTooManyOps): ErrGRPCTooManyOps, - grpc.ErrorDesc(ErrGRPCDuplicateKey): ErrGRPCDuplicateKey, - grpc.ErrorDesc(ErrGRPCCompacted): ErrGRPCCompacted, - grpc.ErrorDesc(ErrGRPCFutureRev): ErrGRPCFutureRev, - grpc.ErrorDesc(ErrGRPCNoSpace): ErrGRPCNoSpace, - - grpc.ErrorDesc(ErrGRPCLeaseNotFound): ErrGRPCLeaseNotFound, - grpc.ErrorDesc(ErrGRPCLeaseExist): ErrGRPCLeaseExist, - grpc.ErrorDesc(ErrGRPCLeaseTTLTooLarge): ErrGRPCLeaseTTLTooLarge, - - grpc.ErrorDesc(ErrGRPCMemberExist): ErrGRPCMemberExist, - grpc.ErrorDesc(ErrGRPCPeerURLExist): ErrGRPCPeerURLExist, - grpc.ErrorDesc(ErrGRPCMemberNotEnoughStarted): ErrGRPCMemberNotEnoughStarted, - grpc.ErrorDesc(ErrGRPCMemberBadURLs): ErrGRPCMemberBadURLs, - grpc.ErrorDesc(ErrGRPCMemberNotFound): ErrGRPCMemberNotFound, - - grpc.ErrorDesc(ErrGRPCRequestTooLarge): ErrGRPCRequestTooLarge, - grpc.ErrorDesc(ErrGRPCRequestTooManyRequests): ErrGRPCRequestTooManyRequests, - - grpc.ErrorDesc(ErrGRPCRootUserNotExist): ErrGRPCRootUserNotExist, - grpc.ErrorDesc(ErrGRPCRootRoleNotExist): ErrGRPCRootRoleNotExist, - grpc.ErrorDesc(ErrGRPCUserAlreadyExist): ErrGRPCUserAlreadyExist, - grpc.ErrorDesc(ErrGRPCUserEmpty): ErrGRPCUserEmpty, - grpc.ErrorDesc(ErrGRPCUserNotFound): ErrGRPCUserNotFound, - grpc.ErrorDesc(ErrGRPCRoleAlreadyExist): ErrGRPCRoleAlreadyExist, - grpc.ErrorDesc(ErrGRPCRoleNotFound): ErrGRPCRoleNotFound, - grpc.ErrorDesc(ErrGRPCAuthFailed): ErrGRPCAuthFailed, - grpc.ErrorDesc(ErrGRPCPermissionDenied): ErrGRPCPermissionDenied, - grpc.ErrorDesc(ErrGRPCRoleNotGranted): ErrGRPCRoleNotGranted, - grpc.ErrorDesc(ErrGRPCPermissionNotGranted): ErrGRPCPermissionNotGranted, - grpc.ErrorDesc(ErrGRPCAuthNotEnabled): ErrGRPCAuthNotEnabled, - grpc.ErrorDesc(ErrGRPCInvalidAuthToken): ErrGRPCInvalidAuthToken, - grpc.ErrorDesc(ErrGRPCInvalidAuthMgmt): ErrGRPCInvalidAuthMgmt, - - grpc.ErrorDesc(ErrGRPCNoLeader): ErrGRPCNoLeader, - grpc.ErrorDesc(ErrGRPCNotCapable): ErrGRPCNotCapable, - grpc.ErrorDesc(ErrGRPCStopped): ErrGRPCStopped, - grpc.ErrorDesc(ErrGRPCTimeout): ErrGRPCTimeout, - grpc.ErrorDesc(ErrGRPCTimeoutDueToLeaderFail): ErrGRPCTimeoutDueToLeaderFail, - grpc.ErrorDesc(ErrGRPCTimeoutDueToConnectionLost): ErrGRPCTimeoutDueToConnectionLost, - grpc.ErrorDesc(ErrGRPCUnhealthy): ErrGRPCUnhealthy, - } - - // client-side error - ErrEmptyKey = Error(ErrGRPCEmptyKey) - ErrKeyNotFound = Error(ErrGRPCKeyNotFound) - ErrValueProvided = Error(ErrGRPCValueProvided) - ErrLeaseProvided = Error(ErrGRPCLeaseProvided) - ErrTooManyOps = Error(ErrGRPCTooManyOps) - ErrDuplicateKey = Error(ErrGRPCDuplicateKey) - ErrCompacted = Error(ErrGRPCCompacted) - ErrFutureRev = Error(ErrGRPCFutureRev) - ErrNoSpace = Error(ErrGRPCNoSpace) - - ErrLeaseNotFound = Error(ErrGRPCLeaseNotFound) - ErrLeaseExist = Error(ErrGRPCLeaseExist) - ErrLeaseTTLTooLarge = Error(ErrGRPCLeaseTTLTooLarge) - - ErrMemberExist = Error(ErrGRPCMemberExist) - ErrPeerURLExist = Error(ErrGRPCPeerURLExist) - ErrMemberNotEnoughStarted = Error(ErrGRPCMemberNotEnoughStarted) - ErrMemberBadURLs = Error(ErrGRPCMemberBadURLs) - ErrMemberNotFound = Error(ErrGRPCMemberNotFound) - - ErrRequestTooLarge = Error(ErrGRPCRequestTooLarge) - ErrTooManyRequests = Error(ErrGRPCRequestTooManyRequests) - - ErrRootUserNotExist = Error(ErrGRPCRootUserNotExist) - ErrRootRoleNotExist = Error(ErrGRPCRootRoleNotExist) - ErrUserAlreadyExist = Error(ErrGRPCUserAlreadyExist) - ErrUserEmpty = Error(ErrGRPCUserEmpty) - ErrUserNotFound = Error(ErrGRPCUserNotFound) - ErrRoleAlreadyExist = Error(ErrGRPCRoleAlreadyExist) - ErrRoleNotFound = Error(ErrGRPCRoleNotFound) - ErrAuthFailed = Error(ErrGRPCAuthFailed) - ErrPermissionDenied = Error(ErrGRPCPermissionDenied) - ErrRoleNotGranted = Error(ErrGRPCRoleNotGranted) - ErrPermissionNotGranted = Error(ErrGRPCPermissionNotGranted) - ErrAuthNotEnabled = Error(ErrGRPCAuthNotEnabled) - ErrInvalidAuthToken = Error(ErrGRPCInvalidAuthToken) - ErrInvalidAuthMgmt = Error(ErrGRPCInvalidAuthMgmt) - - ErrNoLeader = Error(ErrGRPCNoLeader) - ErrNotCapable = Error(ErrGRPCNotCapable) - ErrStopped = Error(ErrGRPCStopped) - ErrTimeout = Error(ErrGRPCTimeout) - ErrTimeoutDueToLeaderFail = Error(ErrGRPCTimeoutDueToLeaderFail) - ErrTimeoutDueToConnectionLost = Error(ErrGRPCTimeoutDueToConnectionLost) - ErrUnhealthy = Error(ErrGRPCUnhealthy) -) - -// EtcdError defines gRPC server errors. -// (https://github.com/grpc/grpc-go/blob/master/rpc_util.go#L319-L323) -type EtcdError struct { - code codes.Code - desc string -} - -// Code returns grpc/codes.Code. -// TODO: define clientv3/codes.Code. -func (e EtcdError) Code() codes.Code { - return e.code -} - -func (e EtcdError) Error() string { - return e.desc -} - -func Error(err error) error { - if err == nil { - return nil - } - verr, ok := errStringToError[grpc.ErrorDesc(err)] - if !ok { // not gRPC error - return err - } - return EtcdError{code: grpc.Code(verr), desc: grpc.ErrorDesc(verr)} -} - -func ErrorDesc(err error) string { - if s, ok := status.FromError(err); ok { - return s.Message() - } - return err.Error() -} diff --git a/vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/md.go b/vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/md.go deleted file mode 100644 index 5c590e1..0000000 --- a/vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/md.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2016 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package rpctypes - -var ( - MetadataRequireLeaderKey = "hasleader" - MetadataHasLeader = "true" -) diff --git a/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/etcdserver.pb.go b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/etcdserver.pb.go deleted file mode 100644 index aabf900..0000000 --- a/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/etcdserver.pb.go +++ /dev/null @@ -1,1045 +0,0 @@ -// Code generated by protoc-gen-gogo. -// source: etcdserver.proto -// DO NOT EDIT! - -/* - Package etcdserverpb is a generated protocol buffer package. - - It is generated from these files: - etcdserver.proto - raft_internal.proto - rpc.proto - - It has these top-level messages: - Request - Metadata - RequestHeader - InternalRaftRequest - EmptyResponse - InternalAuthenticateRequest - ResponseHeader - RangeRequest - RangeResponse - PutRequest - PutResponse - DeleteRangeRequest - DeleteRangeResponse - RequestOp - ResponseOp - Compare - TxnRequest - TxnResponse - CompactionRequest - CompactionResponse - HashRequest - HashResponse - SnapshotRequest - SnapshotResponse - WatchRequest - WatchCreateRequest - WatchCancelRequest - WatchResponse - LeaseGrantRequest - LeaseGrantResponse - LeaseRevokeRequest - LeaseRevokeResponse - LeaseKeepAliveRequest - LeaseKeepAliveResponse - LeaseTimeToLiveRequest - LeaseTimeToLiveResponse - Member - MemberAddRequest - MemberAddResponse - MemberRemoveRequest - MemberRemoveResponse - MemberUpdateRequest - MemberUpdateResponse - MemberListRequest - MemberListResponse - DefragmentRequest - DefragmentResponse - AlarmRequest - AlarmMember - AlarmResponse - StatusRequest - StatusResponse - AuthEnableRequest - AuthDisableRequest - AuthenticateRequest - AuthUserAddRequest - AuthUserGetRequest - AuthUserDeleteRequest - AuthUserChangePasswordRequest - AuthUserGrantRoleRequest - AuthUserRevokeRoleRequest - AuthRoleAddRequest - AuthRoleGetRequest - AuthUserListRequest - AuthRoleListRequest - AuthRoleDeleteRequest - AuthRoleGrantPermissionRequest - AuthRoleRevokePermissionRequest - AuthEnableResponse - AuthDisableResponse - AuthenticateResponse - AuthUserAddResponse - AuthUserGetResponse - AuthUserDeleteResponse - AuthUserChangePasswordResponse - AuthUserGrantRoleResponse - AuthUserRevokeRoleResponse - AuthRoleAddResponse - AuthRoleGetResponse - AuthRoleListResponse - AuthUserListResponse - AuthRoleDeleteResponse - AuthRoleGrantPermissionResponse - AuthRoleRevokePermissionResponse -*/ -package etcdserverpb - -import ( - "fmt" - - proto "github.com/golang/protobuf/proto" - - math "math" - - io "io" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -type Request struct { - ID uint64 `protobuf:"varint,1,opt,name=ID" json:"ID"` - Method string `protobuf:"bytes,2,opt,name=Method" json:"Method"` - Path string `protobuf:"bytes,3,opt,name=Path" json:"Path"` - Val string `protobuf:"bytes,4,opt,name=Val" json:"Val"` - Dir bool `protobuf:"varint,5,opt,name=Dir" json:"Dir"` - PrevValue string `protobuf:"bytes,6,opt,name=PrevValue" json:"PrevValue"` - PrevIndex uint64 `protobuf:"varint,7,opt,name=PrevIndex" json:"PrevIndex"` - PrevExist *bool `protobuf:"varint,8,opt,name=PrevExist" json:"PrevExist,omitempty"` - Expiration int64 `protobuf:"varint,9,opt,name=Expiration" json:"Expiration"` - Wait bool `protobuf:"varint,10,opt,name=Wait" json:"Wait"` - Since uint64 `protobuf:"varint,11,opt,name=Since" json:"Since"` - Recursive bool `protobuf:"varint,12,opt,name=Recursive" json:"Recursive"` - Sorted bool `protobuf:"varint,13,opt,name=Sorted" json:"Sorted"` - Quorum bool `protobuf:"varint,14,opt,name=Quorum" json:"Quorum"` - Time int64 `protobuf:"varint,15,opt,name=Time" json:"Time"` - Stream bool `protobuf:"varint,16,opt,name=Stream" json:"Stream"` - Refresh *bool `protobuf:"varint,17,opt,name=Refresh" json:"Refresh,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *Request) Reset() { *m = Request{} } -func (m *Request) String() string { return proto.CompactTextString(m) } -func (*Request) ProtoMessage() {} -func (*Request) Descriptor() ([]byte, []int) { return fileDescriptorEtcdserver, []int{0} } - -type Metadata struct { - NodeID uint64 `protobuf:"varint,1,opt,name=NodeID" json:"NodeID"` - ClusterID uint64 `protobuf:"varint,2,opt,name=ClusterID" json:"ClusterID"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *Metadata) Reset() { *m = Metadata{} } -func (m *Metadata) String() string { return proto.CompactTextString(m) } -func (*Metadata) ProtoMessage() {} -func (*Metadata) Descriptor() ([]byte, []int) { return fileDescriptorEtcdserver, []int{1} } - -func init() { - proto.RegisterType((*Request)(nil), "etcdserverpb.Request") - proto.RegisterType((*Metadata)(nil), "etcdserverpb.Metadata") -} -func (m *Request) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Request) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintEtcdserver(dAtA, i, uint64(m.ID)) - dAtA[i] = 0x12 - i++ - i = encodeVarintEtcdserver(dAtA, i, uint64(len(m.Method))) - i += copy(dAtA[i:], m.Method) - dAtA[i] = 0x1a - i++ - i = encodeVarintEtcdserver(dAtA, i, uint64(len(m.Path))) - i += copy(dAtA[i:], m.Path) - dAtA[i] = 0x22 - i++ - i = encodeVarintEtcdserver(dAtA, i, uint64(len(m.Val))) - i += copy(dAtA[i:], m.Val) - dAtA[i] = 0x28 - i++ - if m.Dir { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - dAtA[i] = 0x32 - i++ - i = encodeVarintEtcdserver(dAtA, i, uint64(len(m.PrevValue))) - i += copy(dAtA[i:], m.PrevValue) - dAtA[i] = 0x38 - i++ - i = encodeVarintEtcdserver(dAtA, i, uint64(m.PrevIndex)) - if m.PrevExist != nil { - dAtA[i] = 0x40 - i++ - if *m.PrevExist { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - dAtA[i] = 0x48 - i++ - i = encodeVarintEtcdserver(dAtA, i, uint64(m.Expiration)) - dAtA[i] = 0x50 - i++ - if m.Wait { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - dAtA[i] = 0x58 - i++ - i = encodeVarintEtcdserver(dAtA, i, uint64(m.Since)) - dAtA[i] = 0x60 - i++ - if m.Recursive { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - dAtA[i] = 0x68 - i++ - if m.Sorted { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - dAtA[i] = 0x70 - i++ - if m.Quorum { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - dAtA[i] = 0x78 - i++ - i = encodeVarintEtcdserver(dAtA, i, uint64(m.Time)) - dAtA[i] = 0x80 - i++ - dAtA[i] = 0x1 - i++ - if m.Stream { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - if m.Refresh != nil { - dAtA[i] = 0x88 - i++ - dAtA[i] = 0x1 - i++ - if *m.Refresh { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Metadata) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Metadata) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintEtcdserver(dAtA, i, uint64(m.NodeID)) - dAtA[i] = 0x10 - i++ - i = encodeVarintEtcdserver(dAtA, i, uint64(m.ClusterID)) - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeFixed64Etcdserver(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Etcdserver(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintEtcdserver(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *Request) Size() (n int) { - var l int - _ = l - n += 1 + sovEtcdserver(uint64(m.ID)) - l = len(m.Method) - n += 1 + l + sovEtcdserver(uint64(l)) - l = len(m.Path) - n += 1 + l + sovEtcdserver(uint64(l)) - l = len(m.Val) - n += 1 + l + sovEtcdserver(uint64(l)) - n += 2 - l = len(m.PrevValue) - n += 1 + l + sovEtcdserver(uint64(l)) - n += 1 + sovEtcdserver(uint64(m.PrevIndex)) - if m.PrevExist != nil { - n += 2 - } - n += 1 + sovEtcdserver(uint64(m.Expiration)) - n += 2 - n += 1 + sovEtcdserver(uint64(m.Since)) - n += 2 - n += 2 - n += 2 - n += 1 + sovEtcdserver(uint64(m.Time)) - n += 3 - if m.Refresh != nil { - n += 3 - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Metadata) Size() (n int) { - var l int - _ = l - n += 1 + sovEtcdserver(uint64(m.NodeID)) - n += 1 + sovEtcdserver(uint64(m.ClusterID)) - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovEtcdserver(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozEtcdserver(x uint64) (n int) { - return sovEtcdserver(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *Request) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Request: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - m.ID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ID |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Method", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthEtcdserver - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Method = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthEtcdserver - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Path = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Val", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthEtcdserver - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Val = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Dir", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Dir = bool(v != 0) - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PrevValue", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthEtcdserver - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PrevValue = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 7: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PrevIndex", wireType) - } - m.PrevIndex = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PrevIndex |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 8: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PrevExist", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - b := bool(v != 0) - m.PrevExist = &b - case 9: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Expiration", wireType) - } - m.Expiration = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Expiration |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 10: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Wait", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Wait = bool(v != 0) - case 11: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Since", wireType) - } - m.Since = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Since |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 12: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Recursive", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Recursive = bool(v != 0) - case 13: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Sorted", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Sorted = bool(v != 0) - case 14: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Quorum", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Quorum = bool(v != 0) - case 15: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Time", wireType) - } - m.Time = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Time |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 16: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Stream", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Stream = bool(v != 0) - case 17: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Refresh", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - b := bool(v != 0) - m.Refresh = &b - default: - iNdEx = preIndex - skippy, err := skipEtcdserver(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthEtcdserver - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Metadata) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Metadata: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Metadata: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeID", wireType) - } - m.NodeID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.NodeID |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ClusterID", wireType) - } - m.ClusterID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ClusterID |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipEtcdserver(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthEtcdserver - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipEtcdserver(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - iNdEx += length - if length < 0 { - return 0, ErrInvalidLengthEtcdserver - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowEtcdserver - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipEtcdserver(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthEtcdserver = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowEtcdserver = fmt.Errorf("proto: integer overflow") -) - -func init() { proto.RegisterFile("etcdserver.proto", fileDescriptorEtcdserver) } - -var fileDescriptorEtcdserver = []byte{ - // 380 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0xd2, 0xdd, 0x6e, 0xda, 0x30, - 0x14, 0x07, 0x70, 0x0c, 0xe1, 0xcb, 0x63, 0x1b, 0xb3, 0xd0, 0x74, 0x84, 0xa6, 0x2c, 0x42, 0xbb, - 0xc8, 0xd5, 0xf6, 0x0e, 0x2c, 0x5c, 0x44, 0x2a, 0x15, 0x0d, 0x15, 0xbd, 0x76, 0xc9, 0x29, 0x58, - 0x02, 0x4c, 0x1d, 0x07, 0xf1, 0x06, 0x7d, 0x85, 0x3e, 0x12, 0x97, 0x7d, 0x82, 0xaa, 0xa5, 0x2f, - 0x52, 0x39, 0x24, 0xc4, 0xed, 0x5d, 0xf4, 0xfb, 0x9f, 0x1c, 0x1f, 0x7f, 0xd0, 0x2e, 0xea, 0x79, - 0x9c, 0xa0, 0xda, 0xa1, 0xfa, 0xbb, 0x55, 0x52, 0x4b, 0xd6, 0x29, 0x65, 0x7b, 0xdb, 0xef, 0x2d, - 0xe4, 0x42, 0x66, 0xc1, 0x3f, 0xf3, 0x75, 0xaa, 0x19, 0x3c, 0x38, 0xb4, 0x19, 0xe1, 0x7d, 0x8a, - 0x89, 0x66, 0x3d, 0x5a, 0x0d, 0x03, 0x20, 0x1e, 0xf1, 0x9d, 0xa1, 0x73, 0x78, 0xfe, 0x5d, 0x89, - 0xaa, 0x61, 0xc0, 0x7e, 0xd1, 0xc6, 0x18, 0xf5, 0x52, 0xc6, 0x50, 0xf5, 0x88, 0xdf, 0xce, 0x93, - 0xdc, 0x18, 0x50, 0x67, 0xc2, 0xf5, 0x12, 0x6a, 0x56, 0x96, 0x09, 0xfb, 0x49, 0x6b, 0x33, 0xbe, - 0x02, 0xc7, 0x0a, 0x0c, 0x18, 0x0f, 0x84, 0x82, 0xba, 0x47, 0xfc, 0x56, 0xe1, 0x81, 0x50, 0x6c, - 0x40, 0xdb, 0x13, 0x85, 0xbb, 0x19, 0x5f, 0xa5, 0x08, 0x0d, 0xeb, 0xaf, 0x92, 0x8b, 0x9a, 0x70, - 0x13, 0xe3, 0x1e, 0x9a, 0xd6, 0xa0, 0x25, 0x17, 0x35, 0xa3, 0xbd, 0x48, 0x34, 0xb4, 0xce, 0xab, - 0x90, 0xa8, 0x64, 0xf6, 0x87, 0xd2, 0xd1, 0x7e, 0x2b, 0x14, 0xd7, 0x42, 0x6e, 0xa0, 0xed, 0x11, - 0xbf, 0x96, 0x37, 0xb2, 0xdc, 0xec, 0xed, 0x86, 0x0b, 0x0d, 0xd4, 0x1a, 0x35, 0x13, 0xd6, 0xa7, - 0xf5, 0xa9, 0xd8, 0xcc, 0x11, 0xbe, 0x58, 0x33, 0x9c, 0xc8, 0xac, 0x1f, 0xe1, 0x3c, 0x55, 0x89, - 0xd8, 0x21, 0x74, 0xac, 0x5f, 0x4b, 0x36, 0x67, 0x3a, 0x95, 0x4a, 0x63, 0x0c, 0x5f, 0xad, 0x82, - 0xdc, 0x4c, 0x7a, 0x95, 0x4a, 0x95, 0xae, 0xe1, 0x9b, 0x9d, 0x9e, 0xcc, 0x4c, 0x75, 0x2d, 0xd6, - 0x08, 0xdf, 0xad, 0xa9, 0x33, 0xc9, 0xba, 0x6a, 0x85, 0x7c, 0x0d, 0xdd, 0x0f, 0x5d, 0x33, 0x63, - 0xae, 0xb9, 0xe8, 0x3b, 0x85, 0xc9, 0x12, 0x7e, 0x58, 0xa7, 0x52, 0xe0, 0xe0, 0x82, 0xb6, 0xc6, - 0xa8, 0x79, 0xcc, 0x35, 0x37, 0x9d, 0x2e, 0x65, 0x8c, 0x9f, 0x5e, 0x43, 0x6e, 0x66, 0x87, 0xff, - 0x57, 0x69, 0xa2, 0x51, 0x85, 0x41, 0xf6, 0x28, 0xce, 0xb7, 0x70, 0xe6, 0x61, 0xef, 0xf0, 0xea, - 0x56, 0x0e, 0x47, 0x97, 0x3c, 0x1d, 0x5d, 0xf2, 0x72, 0x74, 0xc9, 0xe3, 0x9b, 0x5b, 0x79, 0x0f, - 0x00, 0x00, 0xff, 0xff, 0xee, 0x40, 0xba, 0xd6, 0xa4, 0x02, 0x00, 0x00, -} diff --git a/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/raft_internal.pb.go b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/raft_internal.pb.go deleted file mode 100644 index 44a3b6f..0000000 --- a/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/raft_internal.pb.go +++ /dev/null @@ -1,2094 +0,0 @@ -// Code generated by protoc-gen-gogo. -// source: raft_internal.proto -// DO NOT EDIT! - -package etcdserverpb - -import ( - "fmt" - - proto "github.com/golang/protobuf/proto" - - math "math" - - io "io" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -type RequestHeader struct { - ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` - // username is a username that is associated with an auth token of gRPC connection - Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` - // auth_revision is a revision number of auth.authStore. It is not related to mvcc - AuthRevision uint64 `protobuf:"varint,3,opt,name=auth_revision,json=authRevision,proto3" json:"auth_revision,omitempty"` -} - -func (m *RequestHeader) Reset() { *m = RequestHeader{} } -func (m *RequestHeader) String() string { return proto.CompactTextString(m) } -func (*RequestHeader) ProtoMessage() {} -func (*RequestHeader) Descriptor() ([]byte, []int) { return fileDescriptorRaftInternal, []int{0} } - -// An InternalRaftRequest is the union of all requests which can be -// sent via raft. -type InternalRaftRequest struct { - Header *RequestHeader `protobuf:"bytes,100,opt,name=header" json:"header,omitempty"` - ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` - V2 *Request `protobuf:"bytes,2,opt,name=v2" json:"v2,omitempty"` - Range *RangeRequest `protobuf:"bytes,3,opt,name=range" json:"range,omitempty"` - Put *PutRequest `protobuf:"bytes,4,opt,name=put" json:"put,omitempty"` - DeleteRange *DeleteRangeRequest `protobuf:"bytes,5,opt,name=delete_range,json=deleteRange" json:"delete_range,omitempty"` - Txn *TxnRequest `protobuf:"bytes,6,opt,name=txn" json:"txn,omitempty"` - Compaction *CompactionRequest `protobuf:"bytes,7,opt,name=compaction" json:"compaction,omitempty"` - LeaseGrant *LeaseGrantRequest `protobuf:"bytes,8,opt,name=lease_grant,json=leaseGrant" json:"lease_grant,omitempty"` - LeaseRevoke *LeaseRevokeRequest `protobuf:"bytes,9,opt,name=lease_revoke,json=leaseRevoke" json:"lease_revoke,omitempty"` - Alarm *AlarmRequest `protobuf:"bytes,10,opt,name=alarm" json:"alarm,omitempty"` - AuthEnable *AuthEnableRequest `protobuf:"bytes,1000,opt,name=auth_enable,json=authEnable" json:"auth_enable,omitempty"` - AuthDisable *AuthDisableRequest `protobuf:"bytes,1011,opt,name=auth_disable,json=authDisable" json:"auth_disable,omitempty"` - Authenticate *InternalAuthenticateRequest `protobuf:"bytes,1012,opt,name=authenticate" json:"authenticate,omitempty"` - AuthUserAdd *AuthUserAddRequest `protobuf:"bytes,1100,opt,name=auth_user_add,json=authUserAdd" json:"auth_user_add,omitempty"` - AuthUserDelete *AuthUserDeleteRequest `protobuf:"bytes,1101,opt,name=auth_user_delete,json=authUserDelete" json:"auth_user_delete,omitempty"` - AuthUserGet *AuthUserGetRequest `protobuf:"bytes,1102,opt,name=auth_user_get,json=authUserGet" json:"auth_user_get,omitempty"` - AuthUserChangePassword *AuthUserChangePasswordRequest `protobuf:"bytes,1103,opt,name=auth_user_change_password,json=authUserChangePassword" json:"auth_user_change_password,omitempty"` - AuthUserGrantRole *AuthUserGrantRoleRequest `protobuf:"bytes,1104,opt,name=auth_user_grant_role,json=authUserGrantRole" json:"auth_user_grant_role,omitempty"` - AuthUserRevokeRole *AuthUserRevokeRoleRequest `protobuf:"bytes,1105,opt,name=auth_user_revoke_role,json=authUserRevokeRole" json:"auth_user_revoke_role,omitempty"` - AuthUserList *AuthUserListRequest `protobuf:"bytes,1106,opt,name=auth_user_list,json=authUserList" json:"auth_user_list,omitempty"` - AuthRoleList *AuthRoleListRequest `protobuf:"bytes,1107,opt,name=auth_role_list,json=authRoleList" json:"auth_role_list,omitempty"` - AuthRoleAdd *AuthRoleAddRequest `protobuf:"bytes,1200,opt,name=auth_role_add,json=authRoleAdd" json:"auth_role_add,omitempty"` - AuthRoleDelete *AuthRoleDeleteRequest `protobuf:"bytes,1201,opt,name=auth_role_delete,json=authRoleDelete" json:"auth_role_delete,omitempty"` - AuthRoleGet *AuthRoleGetRequest `protobuf:"bytes,1202,opt,name=auth_role_get,json=authRoleGet" json:"auth_role_get,omitempty"` - AuthRoleGrantPermission *AuthRoleGrantPermissionRequest `protobuf:"bytes,1203,opt,name=auth_role_grant_permission,json=authRoleGrantPermission" json:"auth_role_grant_permission,omitempty"` - AuthRoleRevokePermission *AuthRoleRevokePermissionRequest `protobuf:"bytes,1204,opt,name=auth_role_revoke_permission,json=authRoleRevokePermission" json:"auth_role_revoke_permission,omitempty"` -} - -func (m *InternalRaftRequest) Reset() { *m = InternalRaftRequest{} } -func (m *InternalRaftRequest) String() string { return proto.CompactTextString(m) } -func (*InternalRaftRequest) ProtoMessage() {} -func (*InternalRaftRequest) Descriptor() ([]byte, []int) { return fileDescriptorRaftInternal, []int{1} } - -type EmptyResponse struct { -} - -func (m *EmptyResponse) Reset() { *m = EmptyResponse{} } -func (m *EmptyResponse) String() string { return proto.CompactTextString(m) } -func (*EmptyResponse) ProtoMessage() {} -func (*EmptyResponse) Descriptor() ([]byte, []int) { return fileDescriptorRaftInternal, []int{2} } - -// What is the difference between AuthenticateRequest (defined in rpc.proto) and InternalAuthenticateRequest? -// InternalAuthenticateRequest has a member that is filled by etcdserver and shouldn't be user-facing. -// For avoiding misusage the field, we have an internal version of AuthenticateRequest. -type InternalAuthenticateRequest struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` - // simple_token is generated in API layer (etcdserver/v3_server.go) - SimpleToken string `protobuf:"bytes,3,opt,name=simple_token,json=simpleToken,proto3" json:"simple_token,omitempty"` -} - -func (m *InternalAuthenticateRequest) Reset() { *m = InternalAuthenticateRequest{} } -func (m *InternalAuthenticateRequest) String() string { return proto.CompactTextString(m) } -func (*InternalAuthenticateRequest) ProtoMessage() {} -func (*InternalAuthenticateRequest) Descriptor() ([]byte, []int) { - return fileDescriptorRaftInternal, []int{3} -} - -func init() { - proto.RegisterType((*RequestHeader)(nil), "etcdserverpb.RequestHeader") - proto.RegisterType((*InternalRaftRequest)(nil), "etcdserverpb.InternalRaftRequest") - proto.RegisterType((*EmptyResponse)(nil), "etcdserverpb.EmptyResponse") - proto.RegisterType((*InternalAuthenticateRequest)(nil), "etcdserverpb.InternalAuthenticateRequest") -} -func (m *RequestHeader) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RequestHeader) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.ID != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.ID)) - } - if len(m.Username) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(len(m.Username))) - i += copy(dAtA[i:], m.Username) - } - if m.AuthRevision != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.AuthRevision)) - } - return i, nil -} - -func (m *InternalRaftRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *InternalRaftRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.ID != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.ID)) - } - if m.V2 != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.V2.Size())) - n1, err := m.V2.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if m.Range != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.Range.Size())) - n2, err := m.Range.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.Put != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.Put.Size())) - n3, err := m.Put.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.DeleteRange != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.DeleteRange.Size())) - n4, err := m.DeleteRange.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if m.Txn != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.Txn.Size())) - n5, err := m.Txn.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if m.Compaction != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.Compaction.Size())) - n6, err := m.Compaction.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - if m.LeaseGrant != nil { - dAtA[i] = 0x42 - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.LeaseGrant.Size())) - n7, err := m.LeaseGrant.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - } - if m.LeaseRevoke != nil { - dAtA[i] = 0x4a - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.LeaseRevoke.Size())) - n8, err := m.LeaseRevoke.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 - } - if m.Alarm != nil { - dAtA[i] = 0x52 - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.Alarm.Size())) - n9, err := m.Alarm.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 - } - if m.Header != nil { - dAtA[i] = 0xa2 - i++ - dAtA[i] = 0x6 - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.Header.Size())) - n10, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 - } - if m.AuthEnable != nil { - dAtA[i] = 0xc2 - i++ - dAtA[i] = 0x3e - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.AuthEnable.Size())) - n11, err := m.AuthEnable.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n11 - } - if m.AuthDisable != nil { - dAtA[i] = 0x9a - i++ - dAtA[i] = 0x3f - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.AuthDisable.Size())) - n12, err := m.AuthDisable.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n12 - } - if m.Authenticate != nil { - dAtA[i] = 0xa2 - i++ - dAtA[i] = 0x3f - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.Authenticate.Size())) - n13, err := m.Authenticate.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n13 - } - if m.AuthUserAdd != nil { - dAtA[i] = 0xe2 - i++ - dAtA[i] = 0x44 - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.AuthUserAdd.Size())) - n14, err := m.AuthUserAdd.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n14 - } - if m.AuthUserDelete != nil { - dAtA[i] = 0xea - i++ - dAtA[i] = 0x44 - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.AuthUserDelete.Size())) - n15, err := m.AuthUserDelete.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n15 - } - if m.AuthUserGet != nil { - dAtA[i] = 0xf2 - i++ - dAtA[i] = 0x44 - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.AuthUserGet.Size())) - n16, err := m.AuthUserGet.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n16 - } - if m.AuthUserChangePassword != nil { - dAtA[i] = 0xfa - i++ - dAtA[i] = 0x44 - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.AuthUserChangePassword.Size())) - n17, err := m.AuthUserChangePassword.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n17 - } - if m.AuthUserGrantRole != nil { - dAtA[i] = 0x82 - i++ - dAtA[i] = 0x45 - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.AuthUserGrantRole.Size())) - n18, err := m.AuthUserGrantRole.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n18 - } - if m.AuthUserRevokeRole != nil { - dAtA[i] = 0x8a - i++ - dAtA[i] = 0x45 - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.AuthUserRevokeRole.Size())) - n19, err := m.AuthUserRevokeRole.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n19 - } - if m.AuthUserList != nil { - dAtA[i] = 0x92 - i++ - dAtA[i] = 0x45 - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.AuthUserList.Size())) - n20, err := m.AuthUserList.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n20 - } - if m.AuthRoleList != nil { - dAtA[i] = 0x9a - i++ - dAtA[i] = 0x45 - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.AuthRoleList.Size())) - n21, err := m.AuthRoleList.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n21 - } - if m.AuthRoleAdd != nil { - dAtA[i] = 0x82 - i++ - dAtA[i] = 0x4b - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.AuthRoleAdd.Size())) - n22, err := m.AuthRoleAdd.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n22 - } - if m.AuthRoleDelete != nil { - dAtA[i] = 0x8a - i++ - dAtA[i] = 0x4b - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.AuthRoleDelete.Size())) - n23, err := m.AuthRoleDelete.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n23 - } - if m.AuthRoleGet != nil { - dAtA[i] = 0x92 - i++ - dAtA[i] = 0x4b - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.AuthRoleGet.Size())) - n24, err := m.AuthRoleGet.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n24 - } - if m.AuthRoleGrantPermission != nil { - dAtA[i] = 0x9a - i++ - dAtA[i] = 0x4b - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.AuthRoleGrantPermission.Size())) - n25, err := m.AuthRoleGrantPermission.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n25 - } - if m.AuthRoleRevokePermission != nil { - dAtA[i] = 0xa2 - i++ - dAtA[i] = 0x4b - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(m.AuthRoleRevokePermission.Size())) - n26, err := m.AuthRoleRevokePermission.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n26 - } - return i, nil -} - -func (m *EmptyResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *EmptyResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - return i, nil -} - -func (m *InternalAuthenticateRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *InternalAuthenticateRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if len(m.Password) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(len(m.Password))) - i += copy(dAtA[i:], m.Password) - } - if len(m.SimpleToken) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintRaftInternal(dAtA, i, uint64(len(m.SimpleToken))) - i += copy(dAtA[i:], m.SimpleToken) - } - return i, nil -} - -func encodeFixed64RaftInternal(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32RaftInternal(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintRaftInternal(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *RequestHeader) Size() (n int) { - var l int - _ = l - if m.ID != 0 { - n += 1 + sovRaftInternal(uint64(m.ID)) - } - l = len(m.Username) - if l > 0 { - n += 1 + l + sovRaftInternal(uint64(l)) - } - if m.AuthRevision != 0 { - n += 1 + sovRaftInternal(uint64(m.AuthRevision)) - } - return n -} - -func (m *InternalRaftRequest) Size() (n int) { - var l int - _ = l - if m.ID != 0 { - n += 1 + sovRaftInternal(uint64(m.ID)) - } - if m.V2 != nil { - l = m.V2.Size() - n += 1 + l + sovRaftInternal(uint64(l)) - } - if m.Range != nil { - l = m.Range.Size() - n += 1 + l + sovRaftInternal(uint64(l)) - } - if m.Put != nil { - l = m.Put.Size() - n += 1 + l + sovRaftInternal(uint64(l)) - } - if m.DeleteRange != nil { - l = m.DeleteRange.Size() - n += 1 + l + sovRaftInternal(uint64(l)) - } - if m.Txn != nil { - l = m.Txn.Size() - n += 1 + l + sovRaftInternal(uint64(l)) - } - if m.Compaction != nil { - l = m.Compaction.Size() - n += 1 + l + sovRaftInternal(uint64(l)) - } - if m.LeaseGrant != nil { - l = m.LeaseGrant.Size() - n += 1 + l + sovRaftInternal(uint64(l)) - } - if m.LeaseRevoke != nil { - l = m.LeaseRevoke.Size() - n += 1 + l + sovRaftInternal(uint64(l)) - } - if m.Alarm != nil { - l = m.Alarm.Size() - n += 1 + l + sovRaftInternal(uint64(l)) - } - if m.Header != nil { - l = m.Header.Size() - n += 2 + l + sovRaftInternal(uint64(l)) - } - if m.AuthEnable != nil { - l = m.AuthEnable.Size() - n += 2 + l + sovRaftInternal(uint64(l)) - } - if m.AuthDisable != nil { - l = m.AuthDisable.Size() - n += 2 + l + sovRaftInternal(uint64(l)) - } - if m.Authenticate != nil { - l = m.Authenticate.Size() - n += 2 + l + sovRaftInternal(uint64(l)) - } - if m.AuthUserAdd != nil { - l = m.AuthUserAdd.Size() - n += 2 + l + sovRaftInternal(uint64(l)) - } - if m.AuthUserDelete != nil { - l = m.AuthUserDelete.Size() - n += 2 + l + sovRaftInternal(uint64(l)) - } - if m.AuthUserGet != nil { - l = m.AuthUserGet.Size() - n += 2 + l + sovRaftInternal(uint64(l)) - } - if m.AuthUserChangePassword != nil { - l = m.AuthUserChangePassword.Size() - n += 2 + l + sovRaftInternal(uint64(l)) - } - if m.AuthUserGrantRole != nil { - l = m.AuthUserGrantRole.Size() - n += 2 + l + sovRaftInternal(uint64(l)) - } - if m.AuthUserRevokeRole != nil { - l = m.AuthUserRevokeRole.Size() - n += 2 + l + sovRaftInternal(uint64(l)) - } - if m.AuthUserList != nil { - l = m.AuthUserList.Size() - n += 2 + l + sovRaftInternal(uint64(l)) - } - if m.AuthRoleList != nil { - l = m.AuthRoleList.Size() - n += 2 + l + sovRaftInternal(uint64(l)) - } - if m.AuthRoleAdd != nil { - l = m.AuthRoleAdd.Size() - n += 2 + l + sovRaftInternal(uint64(l)) - } - if m.AuthRoleDelete != nil { - l = m.AuthRoleDelete.Size() - n += 2 + l + sovRaftInternal(uint64(l)) - } - if m.AuthRoleGet != nil { - l = m.AuthRoleGet.Size() - n += 2 + l + sovRaftInternal(uint64(l)) - } - if m.AuthRoleGrantPermission != nil { - l = m.AuthRoleGrantPermission.Size() - n += 2 + l + sovRaftInternal(uint64(l)) - } - if m.AuthRoleRevokePermission != nil { - l = m.AuthRoleRevokePermission.Size() - n += 2 + l + sovRaftInternal(uint64(l)) - } - return n -} - -func (m *EmptyResponse) Size() (n int) { - var l int - _ = l - return n -} - -func (m *InternalAuthenticateRequest) Size() (n int) { - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovRaftInternal(uint64(l)) - } - l = len(m.Password) - if l > 0 { - n += 1 + l + sovRaftInternal(uint64(l)) - } - l = len(m.SimpleToken) - if l > 0 { - n += 1 + l + sovRaftInternal(uint64(l)) - } - return n -} - -func sovRaftInternal(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozRaftInternal(x uint64) (n int) { - return sovRaftInternal(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *RequestHeader) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RequestHeader: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RequestHeader: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - m.ID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ID |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Username", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Username = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field AuthRevision", wireType) - } - m.AuthRevision = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.AuthRevision |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipRaftInternal(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRaftInternal - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *InternalRaftRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: InternalRaftRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: InternalRaftRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - m.ID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ID |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field V2", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.V2 == nil { - m.V2 = &Request{} - } - if err := m.V2.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Range", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Range == nil { - m.Range = &RangeRequest{} - } - if err := m.Range.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Put", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Put == nil { - m.Put = &PutRequest{} - } - if err := m.Put.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DeleteRange", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.DeleteRange == nil { - m.DeleteRange = &DeleteRangeRequest{} - } - if err := m.DeleteRange.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Txn", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Txn == nil { - m.Txn = &TxnRequest{} - } - if err := m.Txn.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Compaction", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Compaction == nil { - m.Compaction = &CompactionRequest{} - } - if err := m.Compaction.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LeaseGrant", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.LeaseGrant == nil { - m.LeaseGrant = &LeaseGrantRequest{} - } - if err := m.LeaseGrant.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LeaseRevoke", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.LeaseRevoke == nil { - m.LeaseRevoke = &LeaseRevokeRequest{} - } - if err := m.LeaseRevoke.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Alarm", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Alarm == nil { - m.Alarm = &AlarmRequest{} - } - if err := m.Alarm.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 100: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &RequestHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 1000: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AuthEnable", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AuthEnable == nil { - m.AuthEnable = &AuthEnableRequest{} - } - if err := m.AuthEnable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 1011: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AuthDisable", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AuthDisable == nil { - m.AuthDisable = &AuthDisableRequest{} - } - if err := m.AuthDisable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 1012: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Authenticate", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Authenticate == nil { - m.Authenticate = &InternalAuthenticateRequest{} - } - if err := m.Authenticate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 1100: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AuthUserAdd", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AuthUserAdd == nil { - m.AuthUserAdd = &AuthUserAddRequest{} - } - if err := m.AuthUserAdd.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 1101: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AuthUserDelete", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AuthUserDelete == nil { - m.AuthUserDelete = &AuthUserDeleteRequest{} - } - if err := m.AuthUserDelete.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 1102: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AuthUserGet", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AuthUserGet == nil { - m.AuthUserGet = &AuthUserGetRequest{} - } - if err := m.AuthUserGet.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 1103: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AuthUserChangePassword", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AuthUserChangePassword == nil { - m.AuthUserChangePassword = &AuthUserChangePasswordRequest{} - } - if err := m.AuthUserChangePassword.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 1104: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AuthUserGrantRole", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AuthUserGrantRole == nil { - m.AuthUserGrantRole = &AuthUserGrantRoleRequest{} - } - if err := m.AuthUserGrantRole.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 1105: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AuthUserRevokeRole", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AuthUserRevokeRole == nil { - m.AuthUserRevokeRole = &AuthUserRevokeRoleRequest{} - } - if err := m.AuthUserRevokeRole.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 1106: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AuthUserList", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AuthUserList == nil { - m.AuthUserList = &AuthUserListRequest{} - } - if err := m.AuthUserList.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 1107: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AuthRoleList", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AuthRoleList == nil { - m.AuthRoleList = &AuthRoleListRequest{} - } - if err := m.AuthRoleList.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 1200: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AuthRoleAdd", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AuthRoleAdd == nil { - m.AuthRoleAdd = &AuthRoleAddRequest{} - } - if err := m.AuthRoleAdd.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 1201: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AuthRoleDelete", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AuthRoleDelete == nil { - m.AuthRoleDelete = &AuthRoleDeleteRequest{} - } - if err := m.AuthRoleDelete.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 1202: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AuthRoleGet", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AuthRoleGet == nil { - m.AuthRoleGet = &AuthRoleGetRequest{} - } - if err := m.AuthRoleGet.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 1203: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AuthRoleGrantPermission", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AuthRoleGrantPermission == nil { - m.AuthRoleGrantPermission = &AuthRoleGrantPermissionRequest{} - } - if err := m.AuthRoleGrantPermission.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 1204: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AuthRoleRevokePermission", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AuthRoleRevokePermission == nil { - m.AuthRoleRevokePermission = &AuthRoleRevokePermissionRequest{} - } - if err := m.AuthRoleRevokePermission.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRaftInternal(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRaftInternal - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *EmptyResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: EmptyResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: EmptyResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipRaftInternal(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRaftInternal - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *InternalAuthenticateRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: InternalAuthenticateRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: InternalAuthenticateRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Password", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Password = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SimpleToken", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRaftInternal - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SimpleToken = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRaftInternal(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRaftInternal - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipRaftInternal(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - iNdEx += length - if length < 0 { - return 0, ErrInvalidLengthRaftInternal - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRaftInternal - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipRaftInternal(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthRaftInternal = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowRaftInternal = fmt.Errorf("proto: integer overflow") -) - -func init() { proto.RegisterFile("raft_internal.proto", fileDescriptorRaftInternal) } - -var fileDescriptorRaftInternal = []byte{ - // 837 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x96, 0xdd, 0x52, 0xd3, 0x40, - 0x14, 0xc7, 0x69, 0xf9, 0xec, 0xb6, 0x54, 0x5c, 0x40, 0xd7, 0x32, 0x53, 0xa1, 0x8c, 0x8a, 0x5f, - 0xe8, 0x94, 0x07, 0xd0, 0x4a, 0x19, 0x60, 0x86, 0x61, 0x98, 0x0c, 0xce, 0x38, 0xe3, 0x45, 0x5c, - 0x9a, 0x43, 0x1b, 0x49, 0x93, 0xb8, 0xd9, 0x56, 0x7c, 0x13, 0x1f, 0xc3, 0xaf, 0x87, 0xe0, 0xc2, - 0x0f, 0xd4, 0x17, 0x50, 0xbc, 0xf1, 0xca, 0x1b, 0x7d, 0x00, 0x67, 0x3f, 0x92, 0x34, 0x6d, 0xca, - 0x5d, 0x72, 0xce, 0xff, 0xfc, 0xce, 0xd9, 0xec, 0x7f, 0xbb, 0x45, 0xb3, 0x8c, 0x1e, 0x72, 0xd3, - 0x76, 0x39, 0x30, 0x97, 0x3a, 0xab, 0x3e, 0xf3, 0xb8, 0x87, 0x0b, 0xc0, 0x1b, 0x56, 0x00, 0xac, - 0x0b, 0xcc, 0x3f, 0x28, 0xcd, 0x35, 0xbd, 0xa6, 0x27, 0x13, 0xf7, 0xc4, 0x93, 0xd2, 0x94, 0x66, - 0x62, 0x8d, 0x8e, 0xe4, 0x98, 0xdf, 0x50, 0x8f, 0x95, 0x67, 0x68, 0xda, 0x80, 0x17, 0x1d, 0x08, - 0xf8, 0x16, 0x50, 0x0b, 0x18, 0x2e, 0xa2, 0xec, 0x76, 0x9d, 0x64, 0x16, 0x33, 0x2b, 0x63, 0x46, - 0x76, 0xbb, 0x8e, 0x4b, 0x68, 0xaa, 0x13, 0x88, 0x96, 0x6d, 0x20, 0xd9, 0xc5, 0xcc, 0x4a, 0xce, - 0x88, 0xde, 0xf1, 0x32, 0x9a, 0xa6, 0x1d, 0xde, 0x32, 0x19, 0x74, 0xed, 0xc0, 0xf6, 0x5c, 0x32, - 0x2a, 0xcb, 0x0a, 0x22, 0x68, 0xe8, 0x58, 0xe5, 0x4f, 0x11, 0xcd, 0x6e, 0xeb, 0xa9, 0x0d, 0x7a, - 0xc8, 0x75, 0xbb, 0x81, 0x46, 0xd7, 0x50, 0xb6, 0x5b, 0x95, 0x2d, 0xf2, 0xd5, 0xf9, 0xd5, 0xde, - 0x75, 0xad, 0xea, 0x12, 0x23, 0xdb, 0xad, 0xe2, 0xfb, 0x68, 0x9c, 0x51, 0xb7, 0x09, 0xb2, 0x57, - 0xbe, 0x5a, 0xea, 0x53, 0x8a, 0x54, 0x28, 0x57, 0x42, 0x7c, 0x0b, 0x8d, 0xfa, 0x1d, 0x4e, 0xc6, - 0xa4, 0x9e, 0x24, 0xf5, 0x7b, 0x9d, 0x70, 0x1e, 0x43, 0x88, 0xf0, 0x3a, 0x2a, 0x58, 0xe0, 0x00, - 0x07, 0x53, 0x35, 0x19, 0x97, 0x45, 0x8b, 0xc9, 0xa2, 0xba, 0x54, 0x24, 0x5a, 0xe5, 0xad, 0x38, - 0x26, 0x1a, 0xf2, 0x63, 0x97, 0x4c, 0xa4, 0x35, 0xdc, 0x3f, 0x76, 0xa3, 0x86, 0xfc, 0xd8, 0xc5, - 0x0f, 0x10, 0x6a, 0x78, 0x6d, 0x9f, 0x36, 0xb8, 0xf8, 0x7e, 0x93, 0xb2, 0xe4, 0x6a, 0xb2, 0x64, - 0x3d, 0xca, 0x87, 0x95, 0x3d, 0x25, 0xf8, 0x21, 0xca, 0x3b, 0x40, 0x03, 0x30, 0x9b, 0x8c, 0xba, - 0x9c, 0x4c, 0xa5, 0x11, 0x76, 0x84, 0x60, 0x53, 0xe4, 0x23, 0x82, 0x13, 0x85, 0xc4, 0x9a, 0x15, - 0x81, 0x41, 0xd7, 0x3b, 0x02, 0x92, 0x4b, 0x5b, 0xb3, 0x44, 0x18, 0x52, 0x10, 0xad, 0xd9, 0x89, - 0x63, 0x62, 0x5b, 0xa8, 0x43, 0x59, 0x9b, 0xa0, 0xb4, 0x6d, 0xa9, 0x89, 0x54, 0xb4, 0x2d, 0x52, - 0x88, 0xd7, 0xd0, 0x44, 0x4b, 0x5a, 0x8e, 0x58, 0xb2, 0x64, 0x21, 0x75, 0xcf, 0x95, 0x2b, 0x0d, - 0x2d, 0xc5, 0x35, 0x94, 0x97, 0x8e, 0x03, 0x97, 0x1e, 0x38, 0x40, 0x7e, 0xa7, 0x7e, 0xb0, 0x5a, - 0x87, 0xb7, 0x36, 0xa4, 0x20, 0x5a, 0x2e, 0x8d, 0x42, 0xb8, 0x8e, 0xa4, 0x3f, 0x4d, 0xcb, 0x0e, - 0x24, 0xe3, 0xef, 0x64, 0xda, 0x7a, 0x05, 0xa3, 0xae, 0x14, 0xd1, 0x7a, 0x69, 0x1c, 0xc3, 0xbb, - 0x8a, 0x02, 0x2e, 0xb7, 0x1b, 0x94, 0x03, 0xf9, 0xa7, 0x28, 0x37, 0x93, 0x94, 0xd0, 0xf7, 0xb5, - 0x1e, 0x69, 0x88, 0x4b, 0xd4, 0xe3, 0x0d, 0x7d, 0x94, 0xc4, 0xd9, 0x32, 0xa9, 0x65, 0x91, 0x8f, - 0x53, 0xc3, 0xc6, 0x7a, 0x1c, 0x00, 0xab, 0x59, 0x56, 0x62, 0x2c, 0x1d, 0xc3, 0xbb, 0x68, 0x26, - 0xc6, 0x28, 0x4f, 0x92, 0x4f, 0x8a, 0xb4, 0x9c, 0x4e, 0xd2, 0x66, 0xd6, 0xb0, 0x22, 0x4d, 0x84, - 0x93, 0x63, 0x35, 0x81, 0x93, 0xcf, 0xe7, 0x8e, 0xb5, 0x09, 0x7c, 0x60, 0xac, 0x4d, 0xe0, 0xb8, - 0x89, 0xae, 0xc4, 0x98, 0x46, 0x4b, 0x9c, 0x12, 0xd3, 0xa7, 0x41, 0xf0, 0xd2, 0x63, 0x16, 0xf9, - 0xa2, 0x90, 0xb7, 0xd3, 0x91, 0xeb, 0x52, 0xbd, 0xa7, 0xc5, 0x21, 0xfd, 0x12, 0x4d, 0x4d, 0xe3, - 0x27, 0x68, 0xae, 0x67, 0x5e, 0x61, 0x6f, 0x93, 0x79, 0x0e, 0x90, 0x53, 0xd5, 0xe3, 0xfa, 0x90, - 0xb1, 0xe5, 0xd1, 0xf0, 0xe2, 0xad, 0xbe, 0x48, 0xfb, 0x33, 0xf8, 0x29, 0x9a, 0x8f, 0xc9, 0xea, - 0xa4, 0x28, 0xf4, 0x57, 0x85, 0xbe, 0x91, 0x8e, 0xd6, 0x47, 0xa6, 0x87, 0x8d, 0xe9, 0x40, 0x0a, - 0x6f, 0xa1, 0x62, 0x0c, 0x77, 0xec, 0x80, 0x93, 0x6f, 0x8a, 0xba, 0x94, 0x4e, 0xdd, 0xb1, 0x03, - 0x9e, 0xf0, 0x51, 0x18, 0x8c, 0x48, 0x62, 0x34, 0x45, 0xfa, 0x3e, 0x94, 0x24, 0x5a, 0x0f, 0x90, - 0xc2, 0x60, 0xb4, 0xf5, 0x92, 0x24, 0x1c, 0xf9, 0x26, 0x37, 0x6c, 0xeb, 0x45, 0x4d, 0xbf, 0x23, - 0x75, 0x2c, 0x72, 0xa4, 0xc4, 0x68, 0x47, 0xbe, 0xcd, 0x0d, 0x73, 0xa4, 0xa8, 0x4a, 0x71, 0x64, - 0x1c, 0x4e, 0x8e, 0x25, 0x1c, 0xf9, 0xee, 0xdc, 0xb1, 0xfa, 0x1d, 0xa9, 0x63, 0xf8, 0x39, 0x2a, - 0xf5, 0x60, 0xa4, 0x51, 0x7c, 0x60, 0x6d, 0x3b, 0x90, 0xf7, 0xd8, 0x7b, 0xc5, 0xbc, 0x33, 0x84, - 0x29, 0xe4, 0x7b, 0x91, 0x3a, 0xe4, 0x5f, 0xa6, 0xe9, 0x79, 0xdc, 0x46, 0x0b, 0x71, 0x2f, 0x6d, - 0x9d, 0x9e, 0x66, 0x1f, 0x54, 0xb3, 0xbb, 0xe9, 0xcd, 0x94, 0x4b, 0x06, 0xbb, 0x11, 0x3a, 0x44, - 0x50, 0xb9, 0x80, 0xa6, 0x37, 0xda, 0x3e, 0x7f, 0x65, 0x40, 0xe0, 0x7b, 0x6e, 0x00, 0x15, 0x1f, - 0x2d, 0x9c, 0xf3, 0x43, 0x84, 0x31, 0x1a, 0x93, 0xb7, 0x7b, 0x46, 0xde, 0xee, 0xf2, 0x59, 0xdc, - 0xfa, 0xd1, 0xf9, 0xd4, 0xb7, 0x7e, 0xf8, 0x8e, 0x97, 0x50, 0x21, 0xb0, 0xdb, 0xbe, 0x03, 0x26, - 0xf7, 0x8e, 0x40, 0x5d, 0xfa, 0x39, 0x23, 0xaf, 0x62, 0xfb, 0x22, 0xf4, 0x68, 0xee, 0xe4, 0x67, - 0x79, 0xe4, 0xe4, 0xac, 0x9c, 0x39, 0x3d, 0x2b, 0x67, 0x7e, 0x9c, 0x95, 0x33, 0xaf, 0x7f, 0x95, - 0x47, 0x0e, 0x26, 0xe4, 0x5f, 0x8e, 0xb5, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc9, 0xfc, - 0x0e, 0xca, 0x08, 0x00, 0x00, -} diff --git a/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.pb.go b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.pb.go deleted file mode 100644 index 894c815..0000000 --- a/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.pb.go +++ /dev/null @@ -1,17293 +0,0 @@ -// Code generated by protoc-gen-gogo. -// source: rpc.proto -// DO NOT EDIT! - -package etcdserverpb - -import ( - "fmt" - - proto "github.com/golang/protobuf/proto" - - math "math" - - mvccpb "github.com/coreos/etcd/mvcc/mvccpb" - - authpb "github.com/coreos/etcd/auth/authpb" - - _ "google.golang.org/genproto/googleapis/api/annotations" - - context "golang.org/x/net/context" - - grpc "google.golang.org/grpc" - - io "io" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -type AlarmType int32 - -const ( - AlarmType_NONE AlarmType = 0 - AlarmType_NOSPACE AlarmType = 1 -) - -var AlarmType_name = map[int32]string{ - 0: "NONE", - 1: "NOSPACE", -} -var AlarmType_value = map[string]int32{ - "NONE": 0, - "NOSPACE": 1, -} - -func (x AlarmType) String() string { - return proto.EnumName(AlarmType_name, int32(x)) -} -func (AlarmType) EnumDescriptor() ([]byte, []int) { return fileDescriptorRpc, []int{0} } - -type RangeRequest_SortOrder int32 - -const ( - RangeRequest_NONE RangeRequest_SortOrder = 0 - RangeRequest_ASCEND RangeRequest_SortOrder = 1 - RangeRequest_DESCEND RangeRequest_SortOrder = 2 -) - -var RangeRequest_SortOrder_name = map[int32]string{ - 0: "NONE", - 1: "ASCEND", - 2: "DESCEND", -} -var RangeRequest_SortOrder_value = map[string]int32{ - "NONE": 0, - "ASCEND": 1, - "DESCEND": 2, -} - -func (x RangeRequest_SortOrder) String() string { - return proto.EnumName(RangeRequest_SortOrder_name, int32(x)) -} -func (RangeRequest_SortOrder) EnumDescriptor() ([]byte, []int) { return fileDescriptorRpc, []int{1, 0} } - -type RangeRequest_SortTarget int32 - -const ( - RangeRequest_KEY RangeRequest_SortTarget = 0 - RangeRequest_VERSION RangeRequest_SortTarget = 1 - RangeRequest_CREATE RangeRequest_SortTarget = 2 - RangeRequest_MOD RangeRequest_SortTarget = 3 - RangeRequest_VALUE RangeRequest_SortTarget = 4 -) - -var RangeRequest_SortTarget_name = map[int32]string{ - 0: "KEY", - 1: "VERSION", - 2: "CREATE", - 3: "MOD", - 4: "VALUE", -} -var RangeRequest_SortTarget_value = map[string]int32{ - "KEY": 0, - "VERSION": 1, - "CREATE": 2, - "MOD": 3, - "VALUE": 4, -} - -func (x RangeRequest_SortTarget) String() string { - return proto.EnumName(RangeRequest_SortTarget_name, int32(x)) -} -func (RangeRequest_SortTarget) EnumDescriptor() ([]byte, []int) { return fileDescriptorRpc, []int{1, 1} } - -type Compare_CompareResult int32 - -const ( - Compare_EQUAL Compare_CompareResult = 0 - Compare_GREATER Compare_CompareResult = 1 - Compare_LESS Compare_CompareResult = 2 - Compare_NOT_EQUAL Compare_CompareResult = 3 -) - -var Compare_CompareResult_name = map[int32]string{ - 0: "EQUAL", - 1: "GREATER", - 2: "LESS", - 3: "NOT_EQUAL", -} -var Compare_CompareResult_value = map[string]int32{ - "EQUAL": 0, - "GREATER": 1, - "LESS": 2, - "NOT_EQUAL": 3, -} - -func (x Compare_CompareResult) String() string { - return proto.EnumName(Compare_CompareResult_name, int32(x)) -} -func (Compare_CompareResult) EnumDescriptor() ([]byte, []int) { return fileDescriptorRpc, []int{9, 0} } - -type Compare_CompareTarget int32 - -const ( - Compare_VERSION Compare_CompareTarget = 0 - Compare_CREATE Compare_CompareTarget = 1 - Compare_MOD Compare_CompareTarget = 2 - Compare_VALUE Compare_CompareTarget = 3 -) - -var Compare_CompareTarget_name = map[int32]string{ - 0: "VERSION", - 1: "CREATE", - 2: "MOD", - 3: "VALUE", -} -var Compare_CompareTarget_value = map[string]int32{ - "VERSION": 0, - "CREATE": 1, - "MOD": 2, - "VALUE": 3, -} - -func (x Compare_CompareTarget) String() string { - return proto.EnumName(Compare_CompareTarget_name, int32(x)) -} -func (Compare_CompareTarget) EnumDescriptor() ([]byte, []int) { return fileDescriptorRpc, []int{9, 1} } - -type WatchCreateRequest_FilterType int32 - -const ( - // filter out put event. - WatchCreateRequest_NOPUT WatchCreateRequest_FilterType = 0 - // filter out delete event. - WatchCreateRequest_NODELETE WatchCreateRequest_FilterType = 1 -) - -var WatchCreateRequest_FilterType_name = map[int32]string{ - 0: "NOPUT", - 1: "NODELETE", -} -var WatchCreateRequest_FilterType_value = map[string]int32{ - "NOPUT": 0, - "NODELETE": 1, -} - -func (x WatchCreateRequest_FilterType) String() string { - return proto.EnumName(WatchCreateRequest_FilterType_name, int32(x)) -} -func (WatchCreateRequest_FilterType) EnumDescriptor() ([]byte, []int) { - return fileDescriptorRpc, []int{19, 0} -} - -type AlarmRequest_AlarmAction int32 - -const ( - AlarmRequest_GET AlarmRequest_AlarmAction = 0 - AlarmRequest_ACTIVATE AlarmRequest_AlarmAction = 1 - AlarmRequest_DEACTIVATE AlarmRequest_AlarmAction = 2 -) - -var AlarmRequest_AlarmAction_name = map[int32]string{ - 0: "GET", - 1: "ACTIVATE", - 2: "DEACTIVATE", -} -var AlarmRequest_AlarmAction_value = map[string]int32{ - "GET": 0, - "ACTIVATE": 1, - "DEACTIVATE": 2, -} - -func (x AlarmRequest_AlarmAction) String() string { - return proto.EnumName(AlarmRequest_AlarmAction_name, int32(x)) -} -func (AlarmRequest_AlarmAction) EnumDescriptor() ([]byte, []int) { - return fileDescriptorRpc, []int{41, 0} -} - -type ResponseHeader struct { - // cluster_id is the ID of the cluster which sent the response. - ClusterId uint64 `protobuf:"varint,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` - // member_id is the ID of the member which sent the response. - MemberId uint64 `protobuf:"varint,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` - // revision is the key-value store revision when the request was applied. - Revision int64 `protobuf:"varint,3,opt,name=revision,proto3" json:"revision,omitempty"` - // raft_term is the raft term when the request was applied. - RaftTerm uint64 `protobuf:"varint,4,opt,name=raft_term,json=raftTerm,proto3" json:"raft_term,omitempty"` -} - -func (m *ResponseHeader) Reset() { *m = ResponseHeader{} } -func (m *ResponseHeader) String() string { return proto.CompactTextString(m) } -func (*ResponseHeader) ProtoMessage() {} -func (*ResponseHeader) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{0} } - -func (m *ResponseHeader) GetClusterId() uint64 { - if m != nil { - return m.ClusterId - } - return 0 -} - -func (m *ResponseHeader) GetMemberId() uint64 { - if m != nil { - return m.MemberId - } - return 0 -} - -func (m *ResponseHeader) GetRevision() int64 { - if m != nil { - return m.Revision - } - return 0 -} - -func (m *ResponseHeader) GetRaftTerm() uint64 { - if m != nil { - return m.RaftTerm - } - return 0 -} - -type RangeRequest struct { - // key is the first key for the range. If range_end is not given, the request only looks up key. - Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - // range_end is the upper bound on the requested range [key, range_end). - // If range_end is '\0', the range is all keys >= key. - // If range_end is key plus one (e.g., "aa"+1 == "ab", "a\xff"+1 == "b"), - // then the range request gets all keys prefixed with key. - // If both key and range_end are '\0', then the range request returns all keys. - RangeEnd []byte `protobuf:"bytes,2,opt,name=range_end,json=rangeEnd,proto3" json:"range_end,omitempty"` - // limit is a limit on the number of keys returned for the request. When limit is set to 0, - // it is treated as no limit. - Limit int64 `protobuf:"varint,3,opt,name=limit,proto3" json:"limit,omitempty"` - // revision is the point-in-time of the key-value store to use for the range. - // If revision is less or equal to zero, the range is over the newest key-value store. - // If the revision has been compacted, ErrCompacted is returned as a response. - Revision int64 `protobuf:"varint,4,opt,name=revision,proto3" json:"revision,omitempty"` - // sort_order is the order for returned sorted results. - SortOrder RangeRequest_SortOrder `protobuf:"varint,5,opt,name=sort_order,json=sortOrder,proto3,enum=etcdserverpb.RangeRequest_SortOrder" json:"sort_order,omitempty"` - // sort_target is the key-value field to use for sorting. - SortTarget RangeRequest_SortTarget `protobuf:"varint,6,opt,name=sort_target,json=sortTarget,proto3,enum=etcdserverpb.RangeRequest_SortTarget" json:"sort_target,omitempty"` - // serializable sets the range request to use serializable member-local reads. - // Range requests are linearizable by default; linearizable requests have higher - // latency and lower throughput than serializable requests but reflect the current - // consensus of the cluster. For better performance, in exchange for possible stale reads, - // a serializable range request is served locally without needing to reach consensus - // with other nodes in the cluster. - Serializable bool `protobuf:"varint,7,opt,name=serializable,proto3" json:"serializable,omitempty"` - // keys_only when set returns only the keys and not the values. - KeysOnly bool `protobuf:"varint,8,opt,name=keys_only,json=keysOnly,proto3" json:"keys_only,omitempty"` - // count_only when set returns only the count of the keys in the range. - CountOnly bool `protobuf:"varint,9,opt,name=count_only,json=countOnly,proto3" json:"count_only,omitempty"` - // min_mod_revision is the lower bound for returned key mod revisions; all keys with - // lesser mod revisions will be filtered away. - MinModRevision int64 `protobuf:"varint,10,opt,name=min_mod_revision,json=minModRevision,proto3" json:"min_mod_revision,omitempty"` - // max_mod_revision is the upper bound for returned key mod revisions; all keys with - // greater mod revisions will be filtered away. - MaxModRevision int64 `protobuf:"varint,11,opt,name=max_mod_revision,json=maxModRevision,proto3" json:"max_mod_revision,omitempty"` - // min_create_revision is the lower bound for returned key create revisions; all keys with - // lesser create trevisions will be filtered away. - MinCreateRevision int64 `protobuf:"varint,12,opt,name=min_create_revision,json=minCreateRevision,proto3" json:"min_create_revision,omitempty"` - // max_create_revision is the upper bound for returned key create revisions; all keys with - // greater create revisions will be filtered away. - MaxCreateRevision int64 `protobuf:"varint,13,opt,name=max_create_revision,json=maxCreateRevision,proto3" json:"max_create_revision,omitempty"` -} - -func (m *RangeRequest) Reset() { *m = RangeRequest{} } -func (m *RangeRequest) String() string { return proto.CompactTextString(m) } -func (*RangeRequest) ProtoMessage() {} -func (*RangeRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{1} } - -func (m *RangeRequest) GetKey() []byte { - if m != nil { - return m.Key - } - return nil -} - -func (m *RangeRequest) GetRangeEnd() []byte { - if m != nil { - return m.RangeEnd - } - return nil -} - -func (m *RangeRequest) GetLimit() int64 { - if m != nil { - return m.Limit - } - return 0 -} - -func (m *RangeRequest) GetRevision() int64 { - if m != nil { - return m.Revision - } - return 0 -} - -func (m *RangeRequest) GetSortOrder() RangeRequest_SortOrder { - if m != nil { - return m.SortOrder - } - return RangeRequest_NONE -} - -func (m *RangeRequest) GetSortTarget() RangeRequest_SortTarget { - if m != nil { - return m.SortTarget - } - return RangeRequest_KEY -} - -func (m *RangeRequest) GetSerializable() bool { - if m != nil { - return m.Serializable - } - return false -} - -func (m *RangeRequest) GetKeysOnly() bool { - if m != nil { - return m.KeysOnly - } - return false -} - -func (m *RangeRequest) GetCountOnly() bool { - if m != nil { - return m.CountOnly - } - return false -} - -func (m *RangeRequest) GetMinModRevision() int64 { - if m != nil { - return m.MinModRevision - } - return 0 -} - -func (m *RangeRequest) GetMaxModRevision() int64 { - if m != nil { - return m.MaxModRevision - } - return 0 -} - -func (m *RangeRequest) GetMinCreateRevision() int64 { - if m != nil { - return m.MinCreateRevision - } - return 0 -} - -func (m *RangeRequest) GetMaxCreateRevision() int64 { - if m != nil { - return m.MaxCreateRevision - } - return 0 -} - -type RangeResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - // kvs is the list of key-value pairs matched by the range request. - // kvs is empty when count is requested. - Kvs []*mvccpb.KeyValue `protobuf:"bytes,2,rep,name=kvs" json:"kvs,omitempty"` - // more indicates if there are more keys to return in the requested range. - More bool `protobuf:"varint,3,opt,name=more,proto3" json:"more,omitempty"` - // count is set to the number of keys within the range when requested. - Count int64 `protobuf:"varint,4,opt,name=count,proto3" json:"count,omitempty"` -} - -func (m *RangeResponse) Reset() { *m = RangeResponse{} } -func (m *RangeResponse) String() string { return proto.CompactTextString(m) } -func (*RangeResponse) ProtoMessage() {} -func (*RangeResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{2} } - -func (m *RangeResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *RangeResponse) GetKvs() []*mvccpb.KeyValue { - if m != nil { - return m.Kvs - } - return nil -} - -func (m *RangeResponse) GetMore() bool { - if m != nil { - return m.More - } - return false -} - -func (m *RangeResponse) GetCount() int64 { - if m != nil { - return m.Count - } - return 0 -} - -type PutRequest struct { - // key is the key, in bytes, to put into the key-value store. - Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - // value is the value, in bytes, to associate with the key in the key-value store. - Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` - // lease is the lease ID to associate with the key in the key-value store. A lease - // value of 0 indicates no lease. - Lease int64 `protobuf:"varint,3,opt,name=lease,proto3" json:"lease,omitempty"` - // If prev_kv is set, etcd gets the previous key-value pair before changing it. - // The previous key-value pair will be returned in the put response. - PrevKv bool `protobuf:"varint,4,opt,name=prev_kv,json=prevKv,proto3" json:"prev_kv,omitempty"` - // If ignore_value is set, etcd updates the key using its current value. - // Returns an error if the key does not exist. - IgnoreValue bool `protobuf:"varint,5,opt,name=ignore_value,json=ignoreValue,proto3" json:"ignore_value,omitempty"` - // If ignore_lease is set, etcd updates the key using its current lease. - // Returns an error if the key does not exist. - IgnoreLease bool `protobuf:"varint,6,opt,name=ignore_lease,json=ignoreLease,proto3" json:"ignore_lease,omitempty"` -} - -func (m *PutRequest) Reset() { *m = PutRequest{} } -func (m *PutRequest) String() string { return proto.CompactTextString(m) } -func (*PutRequest) ProtoMessage() {} -func (*PutRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{3} } - -func (m *PutRequest) GetKey() []byte { - if m != nil { - return m.Key - } - return nil -} - -func (m *PutRequest) GetValue() []byte { - if m != nil { - return m.Value - } - return nil -} - -func (m *PutRequest) GetLease() int64 { - if m != nil { - return m.Lease - } - return 0 -} - -func (m *PutRequest) GetPrevKv() bool { - if m != nil { - return m.PrevKv - } - return false -} - -func (m *PutRequest) GetIgnoreValue() bool { - if m != nil { - return m.IgnoreValue - } - return false -} - -func (m *PutRequest) GetIgnoreLease() bool { - if m != nil { - return m.IgnoreLease - } - return false -} - -type PutResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - // if prev_kv is set in the request, the previous key-value pair will be returned. - PrevKv *mvccpb.KeyValue `protobuf:"bytes,2,opt,name=prev_kv,json=prevKv" json:"prev_kv,omitempty"` -} - -func (m *PutResponse) Reset() { *m = PutResponse{} } -func (m *PutResponse) String() string { return proto.CompactTextString(m) } -func (*PutResponse) ProtoMessage() {} -func (*PutResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{4} } - -func (m *PutResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *PutResponse) GetPrevKv() *mvccpb.KeyValue { - if m != nil { - return m.PrevKv - } - return nil -} - -type DeleteRangeRequest struct { - // key is the first key to delete in the range. - Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - // range_end is the key following the last key to delete for the range [key, range_end). - // If range_end is not given, the range is defined to contain only the key argument. - // If range_end is one bit larger than the given key, then the range is all the keys - // with the prefix (the given key). - // If range_end is '\0', the range is all keys greater than or equal to the key argument. - RangeEnd []byte `protobuf:"bytes,2,opt,name=range_end,json=rangeEnd,proto3" json:"range_end,omitempty"` - // If prev_kv is set, etcd gets the previous key-value pairs before deleting it. - // The previous key-value pairs will be returned in the delete response. - PrevKv bool `protobuf:"varint,3,opt,name=prev_kv,json=prevKv,proto3" json:"prev_kv,omitempty"` -} - -func (m *DeleteRangeRequest) Reset() { *m = DeleteRangeRequest{} } -func (m *DeleteRangeRequest) String() string { return proto.CompactTextString(m) } -func (*DeleteRangeRequest) ProtoMessage() {} -func (*DeleteRangeRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{5} } - -func (m *DeleteRangeRequest) GetKey() []byte { - if m != nil { - return m.Key - } - return nil -} - -func (m *DeleteRangeRequest) GetRangeEnd() []byte { - if m != nil { - return m.RangeEnd - } - return nil -} - -func (m *DeleteRangeRequest) GetPrevKv() bool { - if m != nil { - return m.PrevKv - } - return false -} - -type DeleteRangeResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - // deleted is the number of keys deleted by the delete range request. - Deleted int64 `protobuf:"varint,2,opt,name=deleted,proto3" json:"deleted,omitempty"` - // if prev_kv is set in the request, the previous key-value pairs will be returned. - PrevKvs []*mvccpb.KeyValue `protobuf:"bytes,3,rep,name=prev_kvs,json=prevKvs" json:"prev_kvs,omitempty"` -} - -func (m *DeleteRangeResponse) Reset() { *m = DeleteRangeResponse{} } -func (m *DeleteRangeResponse) String() string { return proto.CompactTextString(m) } -func (*DeleteRangeResponse) ProtoMessage() {} -func (*DeleteRangeResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{6} } - -func (m *DeleteRangeResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *DeleteRangeResponse) GetDeleted() int64 { - if m != nil { - return m.Deleted - } - return 0 -} - -func (m *DeleteRangeResponse) GetPrevKvs() []*mvccpb.KeyValue { - if m != nil { - return m.PrevKvs - } - return nil -} - -type RequestOp struct { - // request is a union of request types accepted by a transaction. - // - // Types that are valid to be assigned to Request: - // *RequestOp_RequestRange - // *RequestOp_RequestPut - // *RequestOp_RequestDeleteRange - Request isRequestOp_Request `protobuf_oneof:"request"` -} - -func (m *RequestOp) Reset() { *m = RequestOp{} } -func (m *RequestOp) String() string { return proto.CompactTextString(m) } -func (*RequestOp) ProtoMessage() {} -func (*RequestOp) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{7} } - -type isRequestOp_Request interface { - isRequestOp_Request() - MarshalTo([]byte) (int, error) - Size() int -} - -type RequestOp_RequestRange struct { - RequestRange *RangeRequest `protobuf:"bytes,1,opt,name=request_range,json=requestRange,oneof"` -} -type RequestOp_RequestPut struct { - RequestPut *PutRequest `protobuf:"bytes,2,opt,name=request_put,json=requestPut,oneof"` -} -type RequestOp_RequestDeleteRange struct { - RequestDeleteRange *DeleteRangeRequest `protobuf:"bytes,3,opt,name=request_delete_range,json=requestDeleteRange,oneof"` -} - -func (*RequestOp_RequestRange) isRequestOp_Request() {} -func (*RequestOp_RequestPut) isRequestOp_Request() {} -func (*RequestOp_RequestDeleteRange) isRequestOp_Request() {} - -func (m *RequestOp) GetRequest() isRequestOp_Request { - if m != nil { - return m.Request - } - return nil -} - -func (m *RequestOp) GetRequestRange() *RangeRequest { - if x, ok := m.GetRequest().(*RequestOp_RequestRange); ok { - return x.RequestRange - } - return nil -} - -func (m *RequestOp) GetRequestPut() *PutRequest { - if x, ok := m.GetRequest().(*RequestOp_RequestPut); ok { - return x.RequestPut - } - return nil -} - -func (m *RequestOp) GetRequestDeleteRange() *DeleteRangeRequest { - if x, ok := m.GetRequest().(*RequestOp_RequestDeleteRange); ok { - return x.RequestDeleteRange - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*RequestOp) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _RequestOp_OneofMarshaler, _RequestOp_OneofUnmarshaler, _RequestOp_OneofSizer, []interface{}{ - (*RequestOp_RequestRange)(nil), - (*RequestOp_RequestPut)(nil), - (*RequestOp_RequestDeleteRange)(nil), - } -} - -func _RequestOp_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*RequestOp) - // request - switch x := m.Request.(type) { - case *RequestOp_RequestRange: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.RequestRange); err != nil { - return err - } - case *RequestOp_RequestPut: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.RequestPut); err != nil { - return err - } - case *RequestOp_RequestDeleteRange: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.RequestDeleteRange); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("RequestOp.Request has unexpected type %T", x) - } - return nil -} - -func _RequestOp_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*RequestOp) - switch tag { - case 1: // request.request_range - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(RangeRequest) - err := b.DecodeMessage(msg) - m.Request = &RequestOp_RequestRange{msg} - return true, err - case 2: // request.request_put - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(PutRequest) - err := b.DecodeMessage(msg) - m.Request = &RequestOp_RequestPut{msg} - return true, err - case 3: // request.request_delete_range - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(DeleteRangeRequest) - err := b.DecodeMessage(msg) - m.Request = &RequestOp_RequestDeleteRange{msg} - return true, err - default: - return false, nil - } -} - -func _RequestOp_OneofSizer(msg proto.Message) (n int) { - m := msg.(*RequestOp) - // request - switch x := m.Request.(type) { - case *RequestOp_RequestRange: - s := proto.Size(x.RequestRange) - n += proto.SizeVarint(1<<3 | proto.WireBytes) - n += proto.SizeVarint(uint64(s)) - n += s - case *RequestOp_RequestPut: - s := proto.Size(x.RequestPut) - n += proto.SizeVarint(2<<3 | proto.WireBytes) - n += proto.SizeVarint(uint64(s)) - n += s - case *RequestOp_RequestDeleteRange: - s := proto.Size(x.RequestDeleteRange) - n += proto.SizeVarint(3<<3 | proto.WireBytes) - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -type ResponseOp struct { - // response is a union of response types returned by a transaction. - // - // Types that are valid to be assigned to Response: - // *ResponseOp_ResponseRange - // *ResponseOp_ResponsePut - // *ResponseOp_ResponseDeleteRange - Response isResponseOp_Response `protobuf_oneof:"response"` -} - -func (m *ResponseOp) Reset() { *m = ResponseOp{} } -func (m *ResponseOp) String() string { return proto.CompactTextString(m) } -func (*ResponseOp) ProtoMessage() {} -func (*ResponseOp) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{8} } - -type isResponseOp_Response interface { - isResponseOp_Response() - MarshalTo([]byte) (int, error) - Size() int -} - -type ResponseOp_ResponseRange struct { - ResponseRange *RangeResponse `protobuf:"bytes,1,opt,name=response_range,json=responseRange,oneof"` -} -type ResponseOp_ResponsePut struct { - ResponsePut *PutResponse `protobuf:"bytes,2,opt,name=response_put,json=responsePut,oneof"` -} -type ResponseOp_ResponseDeleteRange struct { - ResponseDeleteRange *DeleteRangeResponse `protobuf:"bytes,3,opt,name=response_delete_range,json=responseDeleteRange,oneof"` -} - -func (*ResponseOp_ResponseRange) isResponseOp_Response() {} -func (*ResponseOp_ResponsePut) isResponseOp_Response() {} -func (*ResponseOp_ResponseDeleteRange) isResponseOp_Response() {} - -func (m *ResponseOp) GetResponse() isResponseOp_Response { - if m != nil { - return m.Response - } - return nil -} - -func (m *ResponseOp) GetResponseRange() *RangeResponse { - if x, ok := m.GetResponse().(*ResponseOp_ResponseRange); ok { - return x.ResponseRange - } - return nil -} - -func (m *ResponseOp) GetResponsePut() *PutResponse { - if x, ok := m.GetResponse().(*ResponseOp_ResponsePut); ok { - return x.ResponsePut - } - return nil -} - -func (m *ResponseOp) GetResponseDeleteRange() *DeleteRangeResponse { - if x, ok := m.GetResponse().(*ResponseOp_ResponseDeleteRange); ok { - return x.ResponseDeleteRange - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*ResponseOp) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _ResponseOp_OneofMarshaler, _ResponseOp_OneofUnmarshaler, _ResponseOp_OneofSizer, []interface{}{ - (*ResponseOp_ResponseRange)(nil), - (*ResponseOp_ResponsePut)(nil), - (*ResponseOp_ResponseDeleteRange)(nil), - } -} - -func _ResponseOp_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*ResponseOp) - // response - switch x := m.Response.(type) { - case *ResponseOp_ResponseRange: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.ResponseRange); err != nil { - return err - } - case *ResponseOp_ResponsePut: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.ResponsePut); err != nil { - return err - } - case *ResponseOp_ResponseDeleteRange: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.ResponseDeleteRange); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("ResponseOp.Response has unexpected type %T", x) - } - return nil -} - -func _ResponseOp_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*ResponseOp) - switch tag { - case 1: // response.response_range - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(RangeResponse) - err := b.DecodeMessage(msg) - m.Response = &ResponseOp_ResponseRange{msg} - return true, err - case 2: // response.response_put - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(PutResponse) - err := b.DecodeMessage(msg) - m.Response = &ResponseOp_ResponsePut{msg} - return true, err - case 3: // response.response_delete_range - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(DeleteRangeResponse) - err := b.DecodeMessage(msg) - m.Response = &ResponseOp_ResponseDeleteRange{msg} - return true, err - default: - return false, nil - } -} - -func _ResponseOp_OneofSizer(msg proto.Message) (n int) { - m := msg.(*ResponseOp) - // response - switch x := m.Response.(type) { - case *ResponseOp_ResponseRange: - s := proto.Size(x.ResponseRange) - n += proto.SizeVarint(1<<3 | proto.WireBytes) - n += proto.SizeVarint(uint64(s)) - n += s - case *ResponseOp_ResponsePut: - s := proto.Size(x.ResponsePut) - n += proto.SizeVarint(2<<3 | proto.WireBytes) - n += proto.SizeVarint(uint64(s)) - n += s - case *ResponseOp_ResponseDeleteRange: - s := proto.Size(x.ResponseDeleteRange) - n += proto.SizeVarint(3<<3 | proto.WireBytes) - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -type Compare struct { - // result is logical comparison operation for this comparison. - Result Compare_CompareResult `protobuf:"varint,1,opt,name=result,proto3,enum=etcdserverpb.Compare_CompareResult" json:"result,omitempty"` - // target is the key-value field to inspect for the comparison. - Target Compare_CompareTarget `protobuf:"varint,2,opt,name=target,proto3,enum=etcdserverpb.Compare_CompareTarget" json:"target,omitempty"` - // key is the subject key for the comparison operation. - Key []byte `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"` - // Types that are valid to be assigned to TargetUnion: - // *Compare_Version - // *Compare_CreateRevision - // *Compare_ModRevision - // *Compare_Value - TargetUnion isCompare_TargetUnion `protobuf_oneof:"target_union"` -} - -func (m *Compare) Reset() { *m = Compare{} } -func (m *Compare) String() string { return proto.CompactTextString(m) } -func (*Compare) ProtoMessage() {} -func (*Compare) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{9} } - -type isCompare_TargetUnion interface { - isCompare_TargetUnion() - MarshalTo([]byte) (int, error) - Size() int -} - -type Compare_Version struct { - Version int64 `protobuf:"varint,4,opt,name=version,proto3,oneof"` -} -type Compare_CreateRevision struct { - CreateRevision int64 `protobuf:"varint,5,opt,name=create_revision,json=createRevision,proto3,oneof"` -} -type Compare_ModRevision struct { - ModRevision int64 `protobuf:"varint,6,opt,name=mod_revision,json=modRevision,proto3,oneof"` -} -type Compare_Value struct { - Value []byte `protobuf:"bytes,7,opt,name=value,proto3,oneof"` -} - -func (*Compare_Version) isCompare_TargetUnion() {} -func (*Compare_CreateRevision) isCompare_TargetUnion() {} -func (*Compare_ModRevision) isCompare_TargetUnion() {} -func (*Compare_Value) isCompare_TargetUnion() {} - -func (m *Compare) GetTargetUnion() isCompare_TargetUnion { - if m != nil { - return m.TargetUnion - } - return nil -} - -func (m *Compare) GetResult() Compare_CompareResult { - if m != nil { - return m.Result - } - return Compare_EQUAL -} - -func (m *Compare) GetTarget() Compare_CompareTarget { - if m != nil { - return m.Target - } - return Compare_VERSION -} - -func (m *Compare) GetKey() []byte { - if m != nil { - return m.Key - } - return nil -} - -func (m *Compare) GetVersion() int64 { - if x, ok := m.GetTargetUnion().(*Compare_Version); ok { - return x.Version - } - return 0 -} - -func (m *Compare) GetCreateRevision() int64 { - if x, ok := m.GetTargetUnion().(*Compare_CreateRevision); ok { - return x.CreateRevision - } - return 0 -} - -func (m *Compare) GetModRevision() int64 { - if x, ok := m.GetTargetUnion().(*Compare_ModRevision); ok { - return x.ModRevision - } - return 0 -} - -func (m *Compare) GetValue() []byte { - if x, ok := m.GetTargetUnion().(*Compare_Value); ok { - return x.Value - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*Compare) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _Compare_OneofMarshaler, _Compare_OneofUnmarshaler, _Compare_OneofSizer, []interface{}{ - (*Compare_Version)(nil), - (*Compare_CreateRevision)(nil), - (*Compare_ModRevision)(nil), - (*Compare_Value)(nil), - } -} - -func _Compare_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*Compare) - // target_union - switch x := m.TargetUnion.(type) { - case *Compare_Version: - _ = b.EncodeVarint(4<<3 | proto.WireVarint) - _ = b.EncodeVarint(uint64(x.Version)) - case *Compare_CreateRevision: - _ = b.EncodeVarint(5<<3 | proto.WireVarint) - _ = b.EncodeVarint(uint64(x.CreateRevision)) - case *Compare_ModRevision: - _ = b.EncodeVarint(6<<3 | proto.WireVarint) - _ = b.EncodeVarint(uint64(x.ModRevision)) - case *Compare_Value: - _ = b.EncodeVarint(7<<3 | proto.WireBytes) - _ = b.EncodeRawBytes(x.Value) - case nil: - default: - return fmt.Errorf("Compare.TargetUnion has unexpected type %T", x) - } - return nil -} - -func _Compare_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*Compare) - switch tag { - case 4: // target_union.version - if wire != proto.WireVarint { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeVarint() - m.TargetUnion = &Compare_Version{int64(x)} - return true, err - case 5: // target_union.create_revision - if wire != proto.WireVarint { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeVarint() - m.TargetUnion = &Compare_CreateRevision{int64(x)} - return true, err - case 6: // target_union.mod_revision - if wire != proto.WireVarint { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeVarint() - m.TargetUnion = &Compare_ModRevision{int64(x)} - return true, err - case 7: // target_union.value - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeRawBytes(true) - m.TargetUnion = &Compare_Value{x} - return true, err - default: - return false, nil - } -} - -func _Compare_OneofSizer(msg proto.Message) (n int) { - m := msg.(*Compare) - // target_union - switch x := m.TargetUnion.(type) { - case *Compare_Version: - n += proto.SizeVarint(4<<3 | proto.WireVarint) - n += proto.SizeVarint(uint64(x.Version)) - case *Compare_CreateRevision: - n += proto.SizeVarint(5<<3 | proto.WireVarint) - n += proto.SizeVarint(uint64(x.CreateRevision)) - case *Compare_ModRevision: - n += proto.SizeVarint(6<<3 | proto.WireVarint) - n += proto.SizeVarint(uint64(x.ModRevision)) - case *Compare_Value: - n += proto.SizeVarint(7<<3 | proto.WireBytes) - n += proto.SizeVarint(uint64(len(x.Value))) - n += len(x.Value) - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -// From google paxosdb paper: -// Our implementation hinges around a powerful primitive which we call MultiOp. All other database -// operations except for iteration are implemented as a single call to MultiOp. A MultiOp is applied atomically -// and consists of three components: -// 1. A list of tests called guard. Each test in guard checks a single entry in the database. It may check -// for the absence or presence of a value, or compare with a given value. Two different tests in the guard -// may apply to the same or different entries in the database. All tests in the guard are applied and -// MultiOp returns the results. If all tests are true, MultiOp executes t op (see item 2 below), otherwise -// it executes f op (see item 3 below). -// 2. A list of database operations called t op. Each operation in the list is either an insert, delete, or -// lookup operation, and applies to a single database entry. Two different operations in the list may apply -// to the same or different entries in the database. These operations are executed -// if guard evaluates to -// true. -// 3. A list of database operations called f op. Like t op, but executed if guard evaluates to false. -type TxnRequest struct { - // compare is a list of predicates representing a conjunction of terms. - // If the comparisons succeed, then the success requests will be processed in order, - // and the response will contain their respective responses in order. - // If the comparisons fail, then the failure requests will be processed in order, - // and the response will contain their respective responses in order. - Compare []*Compare `protobuf:"bytes,1,rep,name=compare" json:"compare,omitempty"` - // success is a list of requests which will be applied when compare evaluates to true. - Success []*RequestOp `protobuf:"bytes,2,rep,name=success" json:"success,omitempty"` - // failure is a list of requests which will be applied when compare evaluates to false. - Failure []*RequestOp `protobuf:"bytes,3,rep,name=failure" json:"failure,omitempty"` -} - -func (m *TxnRequest) Reset() { *m = TxnRequest{} } -func (m *TxnRequest) String() string { return proto.CompactTextString(m) } -func (*TxnRequest) ProtoMessage() {} -func (*TxnRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{10} } - -func (m *TxnRequest) GetCompare() []*Compare { - if m != nil { - return m.Compare - } - return nil -} - -func (m *TxnRequest) GetSuccess() []*RequestOp { - if m != nil { - return m.Success - } - return nil -} - -func (m *TxnRequest) GetFailure() []*RequestOp { - if m != nil { - return m.Failure - } - return nil -} - -type TxnResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - // succeeded is set to true if the compare evaluated to true or false otherwise. - Succeeded bool `protobuf:"varint,2,opt,name=succeeded,proto3" json:"succeeded,omitempty"` - // responses is a list of responses corresponding to the results from applying - // success if succeeded is true or failure if succeeded is false. - Responses []*ResponseOp `protobuf:"bytes,3,rep,name=responses" json:"responses,omitempty"` -} - -func (m *TxnResponse) Reset() { *m = TxnResponse{} } -func (m *TxnResponse) String() string { return proto.CompactTextString(m) } -func (*TxnResponse) ProtoMessage() {} -func (*TxnResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{11} } - -func (m *TxnResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *TxnResponse) GetSucceeded() bool { - if m != nil { - return m.Succeeded - } - return false -} - -func (m *TxnResponse) GetResponses() []*ResponseOp { - if m != nil { - return m.Responses - } - return nil -} - -// CompactionRequest compacts the key-value store up to a given revision. All superseded keys -// with a revision less than the compaction revision will be removed. -type CompactionRequest struct { - // revision is the key-value store revision for the compaction operation. - Revision int64 `protobuf:"varint,1,opt,name=revision,proto3" json:"revision,omitempty"` - // physical is set so the RPC will wait until the compaction is physically - // applied to the local database such that compacted entries are totally - // removed from the backend database. - Physical bool `protobuf:"varint,2,opt,name=physical,proto3" json:"physical,omitempty"` -} - -func (m *CompactionRequest) Reset() { *m = CompactionRequest{} } -func (m *CompactionRequest) String() string { return proto.CompactTextString(m) } -func (*CompactionRequest) ProtoMessage() {} -func (*CompactionRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{12} } - -func (m *CompactionRequest) GetRevision() int64 { - if m != nil { - return m.Revision - } - return 0 -} - -func (m *CompactionRequest) GetPhysical() bool { - if m != nil { - return m.Physical - } - return false -} - -type CompactionResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *CompactionResponse) Reset() { *m = CompactionResponse{} } -func (m *CompactionResponse) String() string { return proto.CompactTextString(m) } -func (*CompactionResponse) ProtoMessage() {} -func (*CompactionResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{13} } - -func (m *CompactionResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -type HashRequest struct { -} - -func (m *HashRequest) Reset() { *m = HashRequest{} } -func (m *HashRequest) String() string { return proto.CompactTextString(m) } -func (*HashRequest) ProtoMessage() {} -func (*HashRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{14} } - -type HashResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - // hash is the hash value computed from the responding member's key-value store. - Hash uint32 `protobuf:"varint,2,opt,name=hash,proto3" json:"hash,omitempty"` -} - -func (m *HashResponse) Reset() { *m = HashResponse{} } -func (m *HashResponse) String() string { return proto.CompactTextString(m) } -func (*HashResponse) ProtoMessage() {} -func (*HashResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{15} } - -func (m *HashResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *HashResponse) GetHash() uint32 { - if m != nil { - return m.Hash - } - return 0 -} - -type SnapshotRequest struct { -} - -func (m *SnapshotRequest) Reset() { *m = SnapshotRequest{} } -func (m *SnapshotRequest) String() string { return proto.CompactTextString(m) } -func (*SnapshotRequest) ProtoMessage() {} -func (*SnapshotRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{16} } - -type SnapshotResponse struct { - // header has the current key-value store information. The first header in the snapshot - // stream indicates the point in time of the snapshot. - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - // remaining_bytes is the number of blob bytes to be sent after this message - RemainingBytes uint64 `protobuf:"varint,2,opt,name=remaining_bytes,json=remainingBytes,proto3" json:"remaining_bytes,omitempty"` - // blob contains the next chunk of the snapshot in the snapshot stream. - Blob []byte `protobuf:"bytes,3,opt,name=blob,proto3" json:"blob,omitempty"` -} - -func (m *SnapshotResponse) Reset() { *m = SnapshotResponse{} } -func (m *SnapshotResponse) String() string { return proto.CompactTextString(m) } -func (*SnapshotResponse) ProtoMessage() {} -func (*SnapshotResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{17} } - -func (m *SnapshotResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *SnapshotResponse) GetRemainingBytes() uint64 { - if m != nil { - return m.RemainingBytes - } - return 0 -} - -func (m *SnapshotResponse) GetBlob() []byte { - if m != nil { - return m.Blob - } - return nil -} - -type WatchRequest struct { - // request_union is a request to either create a new watcher or cancel an existing watcher. - // - // Types that are valid to be assigned to RequestUnion: - // *WatchRequest_CreateRequest - // *WatchRequest_CancelRequest - RequestUnion isWatchRequest_RequestUnion `protobuf_oneof:"request_union"` -} - -func (m *WatchRequest) Reset() { *m = WatchRequest{} } -func (m *WatchRequest) String() string { return proto.CompactTextString(m) } -func (*WatchRequest) ProtoMessage() {} -func (*WatchRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{18} } - -type isWatchRequest_RequestUnion interface { - isWatchRequest_RequestUnion() - MarshalTo([]byte) (int, error) - Size() int -} - -type WatchRequest_CreateRequest struct { - CreateRequest *WatchCreateRequest `protobuf:"bytes,1,opt,name=create_request,json=createRequest,oneof"` -} -type WatchRequest_CancelRequest struct { - CancelRequest *WatchCancelRequest `protobuf:"bytes,2,opt,name=cancel_request,json=cancelRequest,oneof"` -} - -func (*WatchRequest_CreateRequest) isWatchRequest_RequestUnion() {} -func (*WatchRequest_CancelRequest) isWatchRequest_RequestUnion() {} - -func (m *WatchRequest) GetRequestUnion() isWatchRequest_RequestUnion { - if m != nil { - return m.RequestUnion - } - return nil -} - -func (m *WatchRequest) GetCreateRequest() *WatchCreateRequest { - if x, ok := m.GetRequestUnion().(*WatchRequest_CreateRequest); ok { - return x.CreateRequest - } - return nil -} - -func (m *WatchRequest) GetCancelRequest() *WatchCancelRequest { - if x, ok := m.GetRequestUnion().(*WatchRequest_CancelRequest); ok { - return x.CancelRequest - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*WatchRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _WatchRequest_OneofMarshaler, _WatchRequest_OneofUnmarshaler, _WatchRequest_OneofSizer, []interface{}{ - (*WatchRequest_CreateRequest)(nil), - (*WatchRequest_CancelRequest)(nil), - } -} - -func _WatchRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*WatchRequest) - // request_union - switch x := m.RequestUnion.(type) { - case *WatchRequest_CreateRequest: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.CreateRequest); err != nil { - return err - } - case *WatchRequest_CancelRequest: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.CancelRequest); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("WatchRequest.RequestUnion has unexpected type %T", x) - } - return nil -} - -func _WatchRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*WatchRequest) - switch tag { - case 1: // request_union.create_request - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(WatchCreateRequest) - err := b.DecodeMessage(msg) - m.RequestUnion = &WatchRequest_CreateRequest{msg} - return true, err - case 2: // request_union.cancel_request - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(WatchCancelRequest) - err := b.DecodeMessage(msg) - m.RequestUnion = &WatchRequest_CancelRequest{msg} - return true, err - default: - return false, nil - } -} - -func _WatchRequest_OneofSizer(msg proto.Message) (n int) { - m := msg.(*WatchRequest) - // request_union - switch x := m.RequestUnion.(type) { - case *WatchRequest_CreateRequest: - s := proto.Size(x.CreateRequest) - n += proto.SizeVarint(1<<3 | proto.WireBytes) - n += proto.SizeVarint(uint64(s)) - n += s - case *WatchRequest_CancelRequest: - s := proto.Size(x.CancelRequest) - n += proto.SizeVarint(2<<3 | proto.WireBytes) - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -type WatchCreateRequest struct { - // key is the key to register for watching. - Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - // range_end is the end of the range [key, range_end) to watch. If range_end is not given, - // only the key argument is watched. If range_end is equal to '\0', all keys greater than - // or equal to the key argument are watched. - // If the range_end is one bit larger than the given key, - // then all keys with the prefix (the given key) will be watched. - RangeEnd []byte `protobuf:"bytes,2,opt,name=range_end,json=rangeEnd,proto3" json:"range_end,omitempty"` - // start_revision is an optional revision to watch from (inclusive). No start_revision is "now". - StartRevision int64 `protobuf:"varint,3,opt,name=start_revision,json=startRevision,proto3" json:"start_revision,omitempty"` - // progress_notify is set so that the etcd server will periodically send a WatchResponse with - // no events to the new watcher if there are no recent events. It is useful when clients - // wish to recover a disconnected watcher starting from a recent known revision. - // The etcd server may decide how often it will send notifications based on current load. - ProgressNotify bool `protobuf:"varint,4,opt,name=progress_notify,json=progressNotify,proto3" json:"progress_notify,omitempty"` - // filters filter the events at server side before it sends back to the watcher. - Filters []WatchCreateRequest_FilterType `protobuf:"varint,5,rep,packed,name=filters,enum=etcdserverpb.WatchCreateRequest_FilterType" json:"filters,omitempty"` - // If prev_kv is set, created watcher gets the previous KV before the event happens. - // If the previous KV is already compacted, nothing will be returned. - PrevKv bool `protobuf:"varint,6,opt,name=prev_kv,json=prevKv,proto3" json:"prev_kv,omitempty"` -} - -func (m *WatchCreateRequest) Reset() { *m = WatchCreateRequest{} } -func (m *WatchCreateRequest) String() string { return proto.CompactTextString(m) } -func (*WatchCreateRequest) ProtoMessage() {} -func (*WatchCreateRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{19} } - -func (m *WatchCreateRequest) GetKey() []byte { - if m != nil { - return m.Key - } - return nil -} - -func (m *WatchCreateRequest) GetRangeEnd() []byte { - if m != nil { - return m.RangeEnd - } - return nil -} - -func (m *WatchCreateRequest) GetStartRevision() int64 { - if m != nil { - return m.StartRevision - } - return 0 -} - -func (m *WatchCreateRequest) GetProgressNotify() bool { - if m != nil { - return m.ProgressNotify - } - return false -} - -func (m *WatchCreateRequest) GetFilters() []WatchCreateRequest_FilterType { - if m != nil { - return m.Filters - } - return nil -} - -func (m *WatchCreateRequest) GetPrevKv() bool { - if m != nil { - return m.PrevKv - } - return false -} - -type WatchCancelRequest struct { - // watch_id is the watcher id to cancel so that no more events are transmitted. - WatchId int64 `protobuf:"varint,1,opt,name=watch_id,json=watchId,proto3" json:"watch_id,omitempty"` -} - -func (m *WatchCancelRequest) Reset() { *m = WatchCancelRequest{} } -func (m *WatchCancelRequest) String() string { return proto.CompactTextString(m) } -func (*WatchCancelRequest) ProtoMessage() {} -func (*WatchCancelRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{20} } - -func (m *WatchCancelRequest) GetWatchId() int64 { - if m != nil { - return m.WatchId - } - return 0 -} - -type WatchResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - // watch_id is the ID of the watcher that corresponds to the response. - WatchId int64 `protobuf:"varint,2,opt,name=watch_id,json=watchId,proto3" json:"watch_id,omitempty"` - // created is set to true if the response is for a create watch request. - // The client should record the watch_id and expect to receive events for - // the created watcher from the same stream. - // All events sent to the created watcher will attach with the same watch_id. - Created bool `protobuf:"varint,3,opt,name=created,proto3" json:"created,omitempty"` - // canceled is set to true if the response is for a cancel watch request. - // No further events will be sent to the canceled watcher. - Canceled bool `protobuf:"varint,4,opt,name=canceled,proto3" json:"canceled,omitempty"` - // compact_revision is set to the minimum index if a watcher tries to watch - // at a compacted index. - // - // This happens when creating a watcher at a compacted revision or the watcher cannot - // catch up with the progress of the key-value store. - // - // The client should treat the watcher as canceled and should not try to create any - // watcher with the same start_revision again. - CompactRevision int64 `protobuf:"varint,5,opt,name=compact_revision,json=compactRevision,proto3" json:"compact_revision,omitempty"` - // cancel_reason indicates the reason for canceling the watcher. - CancelReason string `protobuf:"bytes,6,opt,name=cancel_reason,json=cancelReason,proto3" json:"cancel_reason,omitempty"` - Events []*mvccpb.Event `protobuf:"bytes,11,rep,name=events" json:"events,omitempty"` -} - -func (m *WatchResponse) Reset() { *m = WatchResponse{} } -func (m *WatchResponse) String() string { return proto.CompactTextString(m) } -func (*WatchResponse) ProtoMessage() {} -func (*WatchResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{21} } - -func (m *WatchResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *WatchResponse) GetWatchId() int64 { - if m != nil { - return m.WatchId - } - return 0 -} - -func (m *WatchResponse) GetCreated() bool { - if m != nil { - return m.Created - } - return false -} - -func (m *WatchResponse) GetCanceled() bool { - if m != nil { - return m.Canceled - } - return false -} - -func (m *WatchResponse) GetCompactRevision() int64 { - if m != nil { - return m.CompactRevision - } - return 0 -} - -func (m *WatchResponse) GetCancelReason() string { - if m != nil { - return m.CancelReason - } - return "" -} - -func (m *WatchResponse) GetEvents() []*mvccpb.Event { - if m != nil { - return m.Events - } - return nil -} - -type LeaseGrantRequest struct { - // TTL is the advisory time-to-live in seconds. - TTL int64 `protobuf:"varint,1,opt,name=TTL,proto3" json:"TTL,omitempty"` - // ID is the requested ID for the lease. If ID is set to 0, the lessor chooses an ID. - ID int64 `protobuf:"varint,2,opt,name=ID,proto3" json:"ID,omitempty"` -} - -func (m *LeaseGrantRequest) Reset() { *m = LeaseGrantRequest{} } -func (m *LeaseGrantRequest) String() string { return proto.CompactTextString(m) } -func (*LeaseGrantRequest) ProtoMessage() {} -func (*LeaseGrantRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{22} } - -func (m *LeaseGrantRequest) GetTTL() int64 { - if m != nil { - return m.TTL - } - return 0 -} - -func (m *LeaseGrantRequest) GetID() int64 { - if m != nil { - return m.ID - } - return 0 -} - -type LeaseGrantResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - // ID is the lease ID for the granted lease. - ID int64 `protobuf:"varint,2,opt,name=ID,proto3" json:"ID,omitempty"` - // TTL is the server chosen lease time-to-live in seconds. - TTL int64 `protobuf:"varint,3,opt,name=TTL,proto3" json:"TTL,omitempty"` - Error string `protobuf:"bytes,4,opt,name=error,proto3" json:"error,omitempty"` -} - -func (m *LeaseGrantResponse) Reset() { *m = LeaseGrantResponse{} } -func (m *LeaseGrantResponse) String() string { return proto.CompactTextString(m) } -func (*LeaseGrantResponse) ProtoMessage() {} -func (*LeaseGrantResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{23} } - -func (m *LeaseGrantResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *LeaseGrantResponse) GetID() int64 { - if m != nil { - return m.ID - } - return 0 -} - -func (m *LeaseGrantResponse) GetTTL() int64 { - if m != nil { - return m.TTL - } - return 0 -} - -func (m *LeaseGrantResponse) GetError() string { - if m != nil { - return m.Error - } - return "" -} - -type LeaseRevokeRequest struct { - // ID is the lease ID to revoke. When the ID is revoked, all associated keys will be deleted. - ID int64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` -} - -func (m *LeaseRevokeRequest) Reset() { *m = LeaseRevokeRequest{} } -func (m *LeaseRevokeRequest) String() string { return proto.CompactTextString(m) } -func (*LeaseRevokeRequest) ProtoMessage() {} -func (*LeaseRevokeRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{24} } - -func (m *LeaseRevokeRequest) GetID() int64 { - if m != nil { - return m.ID - } - return 0 -} - -type LeaseRevokeResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *LeaseRevokeResponse) Reset() { *m = LeaseRevokeResponse{} } -func (m *LeaseRevokeResponse) String() string { return proto.CompactTextString(m) } -func (*LeaseRevokeResponse) ProtoMessage() {} -func (*LeaseRevokeResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{25} } - -func (m *LeaseRevokeResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -type LeaseKeepAliveRequest struct { - // ID is the lease ID for the lease to keep alive. - ID int64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` -} - -func (m *LeaseKeepAliveRequest) Reset() { *m = LeaseKeepAliveRequest{} } -func (m *LeaseKeepAliveRequest) String() string { return proto.CompactTextString(m) } -func (*LeaseKeepAliveRequest) ProtoMessage() {} -func (*LeaseKeepAliveRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{26} } - -func (m *LeaseKeepAliveRequest) GetID() int64 { - if m != nil { - return m.ID - } - return 0 -} - -type LeaseKeepAliveResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - // ID is the lease ID from the keep alive request. - ID int64 `protobuf:"varint,2,opt,name=ID,proto3" json:"ID,omitempty"` - // TTL is the new time-to-live for the lease. - TTL int64 `protobuf:"varint,3,opt,name=TTL,proto3" json:"TTL,omitempty"` -} - -func (m *LeaseKeepAliveResponse) Reset() { *m = LeaseKeepAliveResponse{} } -func (m *LeaseKeepAliveResponse) String() string { return proto.CompactTextString(m) } -func (*LeaseKeepAliveResponse) ProtoMessage() {} -func (*LeaseKeepAliveResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{27} } - -func (m *LeaseKeepAliveResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *LeaseKeepAliveResponse) GetID() int64 { - if m != nil { - return m.ID - } - return 0 -} - -func (m *LeaseKeepAliveResponse) GetTTL() int64 { - if m != nil { - return m.TTL - } - return 0 -} - -type LeaseTimeToLiveRequest struct { - // ID is the lease ID for the lease. - ID int64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` - // keys is true to query all the keys attached to this lease. - Keys bool `protobuf:"varint,2,opt,name=keys,proto3" json:"keys,omitempty"` -} - -func (m *LeaseTimeToLiveRequest) Reset() { *m = LeaseTimeToLiveRequest{} } -func (m *LeaseTimeToLiveRequest) String() string { return proto.CompactTextString(m) } -func (*LeaseTimeToLiveRequest) ProtoMessage() {} -func (*LeaseTimeToLiveRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{28} } - -func (m *LeaseTimeToLiveRequest) GetID() int64 { - if m != nil { - return m.ID - } - return 0 -} - -func (m *LeaseTimeToLiveRequest) GetKeys() bool { - if m != nil { - return m.Keys - } - return false -} - -type LeaseTimeToLiveResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - // ID is the lease ID from the keep alive request. - ID int64 `protobuf:"varint,2,opt,name=ID,proto3" json:"ID,omitempty"` - // TTL is the remaining TTL in seconds for the lease; the lease will expire in under TTL+1 seconds. - TTL int64 `protobuf:"varint,3,opt,name=TTL,proto3" json:"TTL,omitempty"` - // GrantedTTL is the initial granted time in seconds upon lease creation/renewal. - GrantedTTL int64 `protobuf:"varint,4,opt,name=grantedTTL,proto3" json:"grantedTTL,omitempty"` - // Keys is the list of keys attached to this lease. - Keys [][]byte `protobuf:"bytes,5,rep,name=keys" json:"keys,omitempty"` -} - -func (m *LeaseTimeToLiveResponse) Reset() { *m = LeaseTimeToLiveResponse{} } -func (m *LeaseTimeToLiveResponse) String() string { return proto.CompactTextString(m) } -func (*LeaseTimeToLiveResponse) ProtoMessage() {} -func (*LeaseTimeToLiveResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{29} } - -func (m *LeaseTimeToLiveResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *LeaseTimeToLiveResponse) GetID() int64 { - if m != nil { - return m.ID - } - return 0 -} - -func (m *LeaseTimeToLiveResponse) GetTTL() int64 { - if m != nil { - return m.TTL - } - return 0 -} - -func (m *LeaseTimeToLiveResponse) GetGrantedTTL() int64 { - if m != nil { - return m.GrantedTTL - } - return 0 -} - -func (m *LeaseTimeToLiveResponse) GetKeys() [][]byte { - if m != nil { - return m.Keys - } - return nil -} - -type Member struct { - // ID is the member ID for this member. - ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` - // name is the human-readable name of the member. If the member is not started, the name will be an empty string. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // peerURLs is the list of URLs the member exposes to the cluster for communication. - PeerURLs []string `protobuf:"bytes,3,rep,name=peerURLs" json:"peerURLs,omitempty"` - // clientURLs is the list of URLs the member exposes to clients for communication. If the member is not started, clientURLs will be empty. - ClientURLs []string `protobuf:"bytes,4,rep,name=clientURLs" json:"clientURLs,omitempty"` -} - -func (m *Member) Reset() { *m = Member{} } -func (m *Member) String() string { return proto.CompactTextString(m) } -func (*Member) ProtoMessage() {} -func (*Member) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{30} } - -func (m *Member) GetID() uint64 { - if m != nil { - return m.ID - } - return 0 -} - -func (m *Member) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *Member) GetPeerURLs() []string { - if m != nil { - return m.PeerURLs - } - return nil -} - -func (m *Member) GetClientURLs() []string { - if m != nil { - return m.ClientURLs - } - return nil -} - -type MemberAddRequest struct { - // peerURLs is the list of URLs the added member will use to communicate with the cluster. - PeerURLs []string `protobuf:"bytes,1,rep,name=peerURLs" json:"peerURLs,omitempty"` -} - -func (m *MemberAddRequest) Reset() { *m = MemberAddRequest{} } -func (m *MemberAddRequest) String() string { return proto.CompactTextString(m) } -func (*MemberAddRequest) ProtoMessage() {} -func (*MemberAddRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{31} } - -func (m *MemberAddRequest) GetPeerURLs() []string { - if m != nil { - return m.PeerURLs - } - return nil -} - -type MemberAddResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - // member is the member information for the added member. - Member *Member `protobuf:"bytes,2,opt,name=member" json:"member,omitempty"` - // members is a list of all members after adding the new member. - Members []*Member `protobuf:"bytes,3,rep,name=members" json:"members,omitempty"` -} - -func (m *MemberAddResponse) Reset() { *m = MemberAddResponse{} } -func (m *MemberAddResponse) String() string { return proto.CompactTextString(m) } -func (*MemberAddResponse) ProtoMessage() {} -func (*MemberAddResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{32} } - -func (m *MemberAddResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *MemberAddResponse) GetMember() *Member { - if m != nil { - return m.Member - } - return nil -} - -func (m *MemberAddResponse) GetMembers() []*Member { - if m != nil { - return m.Members - } - return nil -} - -type MemberRemoveRequest struct { - // ID is the member ID of the member to remove. - ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` -} - -func (m *MemberRemoveRequest) Reset() { *m = MemberRemoveRequest{} } -func (m *MemberRemoveRequest) String() string { return proto.CompactTextString(m) } -func (*MemberRemoveRequest) ProtoMessage() {} -func (*MemberRemoveRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{33} } - -func (m *MemberRemoveRequest) GetID() uint64 { - if m != nil { - return m.ID - } - return 0 -} - -type MemberRemoveResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - // members is a list of all members after removing the member. - Members []*Member `protobuf:"bytes,2,rep,name=members" json:"members,omitempty"` -} - -func (m *MemberRemoveResponse) Reset() { *m = MemberRemoveResponse{} } -func (m *MemberRemoveResponse) String() string { return proto.CompactTextString(m) } -func (*MemberRemoveResponse) ProtoMessage() {} -func (*MemberRemoveResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{34} } - -func (m *MemberRemoveResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *MemberRemoveResponse) GetMembers() []*Member { - if m != nil { - return m.Members - } - return nil -} - -type MemberUpdateRequest struct { - // ID is the member ID of the member to update. - ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` - // peerURLs is the new list of URLs the member will use to communicate with the cluster. - PeerURLs []string `protobuf:"bytes,2,rep,name=peerURLs" json:"peerURLs,omitempty"` -} - -func (m *MemberUpdateRequest) Reset() { *m = MemberUpdateRequest{} } -func (m *MemberUpdateRequest) String() string { return proto.CompactTextString(m) } -func (*MemberUpdateRequest) ProtoMessage() {} -func (*MemberUpdateRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{35} } - -func (m *MemberUpdateRequest) GetID() uint64 { - if m != nil { - return m.ID - } - return 0 -} - -func (m *MemberUpdateRequest) GetPeerURLs() []string { - if m != nil { - return m.PeerURLs - } - return nil -} - -type MemberUpdateResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - // members is a list of all members after updating the member. - Members []*Member `protobuf:"bytes,2,rep,name=members" json:"members,omitempty"` -} - -func (m *MemberUpdateResponse) Reset() { *m = MemberUpdateResponse{} } -func (m *MemberUpdateResponse) String() string { return proto.CompactTextString(m) } -func (*MemberUpdateResponse) ProtoMessage() {} -func (*MemberUpdateResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{36} } - -func (m *MemberUpdateResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *MemberUpdateResponse) GetMembers() []*Member { - if m != nil { - return m.Members - } - return nil -} - -type MemberListRequest struct { -} - -func (m *MemberListRequest) Reset() { *m = MemberListRequest{} } -func (m *MemberListRequest) String() string { return proto.CompactTextString(m) } -func (*MemberListRequest) ProtoMessage() {} -func (*MemberListRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{37} } - -type MemberListResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - // members is a list of all members associated with the cluster. - Members []*Member `protobuf:"bytes,2,rep,name=members" json:"members,omitempty"` -} - -func (m *MemberListResponse) Reset() { *m = MemberListResponse{} } -func (m *MemberListResponse) String() string { return proto.CompactTextString(m) } -func (*MemberListResponse) ProtoMessage() {} -func (*MemberListResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{38} } - -func (m *MemberListResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *MemberListResponse) GetMembers() []*Member { - if m != nil { - return m.Members - } - return nil -} - -type DefragmentRequest struct { -} - -func (m *DefragmentRequest) Reset() { *m = DefragmentRequest{} } -func (m *DefragmentRequest) String() string { return proto.CompactTextString(m) } -func (*DefragmentRequest) ProtoMessage() {} -func (*DefragmentRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{39} } - -type DefragmentResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *DefragmentResponse) Reset() { *m = DefragmentResponse{} } -func (m *DefragmentResponse) String() string { return proto.CompactTextString(m) } -func (*DefragmentResponse) ProtoMessage() {} -func (*DefragmentResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{40} } - -func (m *DefragmentResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -type AlarmRequest struct { - // action is the kind of alarm request to issue. The action - // may GET alarm statuses, ACTIVATE an alarm, or DEACTIVATE a - // raised alarm. - Action AlarmRequest_AlarmAction `protobuf:"varint,1,opt,name=action,proto3,enum=etcdserverpb.AlarmRequest_AlarmAction" json:"action,omitempty"` - // memberID is the ID of the member associated with the alarm. If memberID is 0, the - // alarm request covers all members. - MemberID uint64 `protobuf:"varint,2,opt,name=memberID,proto3" json:"memberID,omitempty"` - // alarm is the type of alarm to consider for this request. - Alarm AlarmType `protobuf:"varint,3,opt,name=alarm,proto3,enum=etcdserverpb.AlarmType" json:"alarm,omitempty"` -} - -func (m *AlarmRequest) Reset() { *m = AlarmRequest{} } -func (m *AlarmRequest) String() string { return proto.CompactTextString(m) } -func (*AlarmRequest) ProtoMessage() {} -func (*AlarmRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{41} } - -func (m *AlarmRequest) GetAction() AlarmRequest_AlarmAction { - if m != nil { - return m.Action - } - return AlarmRequest_GET -} - -func (m *AlarmRequest) GetMemberID() uint64 { - if m != nil { - return m.MemberID - } - return 0 -} - -func (m *AlarmRequest) GetAlarm() AlarmType { - if m != nil { - return m.Alarm - } - return AlarmType_NONE -} - -type AlarmMember struct { - // memberID is the ID of the member associated with the raised alarm. - MemberID uint64 `protobuf:"varint,1,opt,name=memberID,proto3" json:"memberID,omitempty"` - // alarm is the type of alarm which has been raised. - Alarm AlarmType `protobuf:"varint,2,opt,name=alarm,proto3,enum=etcdserverpb.AlarmType" json:"alarm,omitempty"` -} - -func (m *AlarmMember) Reset() { *m = AlarmMember{} } -func (m *AlarmMember) String() string { return proto.CompactTextString(m) } -func (*AlarmMember) ProtoMessage() {} -func (*AlarmMember) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{42} } - -func (m *AlarmMember) GetMemberID() uint64 { - if m != nil { - return m.MemberID - } - return 0 -} - -func (m *AlarmMember) GetAlarm() AlarmType { - if m != nil { - return m.Alarm - } - return AlarmType_NONE -} - -type AlarmResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - // alarms is a list of alarms associated with the alarm request. - Alarms []*AlarmMember `protobuf:"bytes,2,rep,name=alarms" json:"alarms,omitempty"` -} - -func (m *AlarmResponse) Reset() { *m = AlarmResponse{} } -func (m *AlarmResponse) String() string { return proto.CompactTextString(m) } -func (*AlarmResponse) ProtoMessage() {} -func (*AlarmResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{43} } - -func (m *AlarmResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *AlarmResponse) GetAlarms() []*AlarmMember { - if m != nil { - return m.Alarms - } - return nil -} - -type StatusRequest struct { -} - -func (m *StatusRequest) Reset() { *m = StatusRequest{} } -func (m *StatusRequest) String() string { return proto.CompactTextString(m) } -func (*StatusRequest) ProtoMessage() {} -func (*StatusRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{44} } - -type StatusResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - // version is the cluster protocol version used by the responding member. - Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - // dbSize is the size of the backend database, in bytes, of the responding member. - DbSize int64 `protobuf:"varint,3,opt,name=dbSize,proto3" json:"dbSize,omitempty"` - // leader is the member ID which the responding member believes is the current leader. - Leader uint64 `protobuf:"varint,4,opt,name=leader,proto3" json:"leader,omitempty"` - // raftIndex is the current raft index of the responding member. - RaftIndex uint64 `protobuf:"varint,5,opt,name=raftIndex,proto3" json:"raftIndex,omitempty"` - // raftTerm is the current raft term of the responding member. - RaftTerm uint64 `protobuf:"varint,6,opt,name=raftTerm,proto3" json:"raftTerm,omitempty"` -} - -func (m *StatusResponse) Reset() { *m = StatusResponse{} } -func (m *StatusResponse) String() string { return proto.CompactTextString(m) } -func (*StatusResponse) ProtoMessage() {} -func (*StatusResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{45} } - -func (m *StatusResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *StatusResponse) GetVersion() string { - if m != nil { - return m.Version - } - return "" -} - -func (m *StatusResponse) GetDbSize() int64 { - if m != nil { - return m.DbSize - } - return 0 -} - -func (m *StatusResponse) GetLeader() uint64 { - if m != nil { - return m.Leader - } - return 0 -} - -func (m *StatusResponse) GetRaftIndex() uint64 { - if m != nil { - return m.RaftIndex - } - return 0 -} - -func (m *StatusResponse) GetRaftTerm() uint64 { - if m != nil { - return m.RaftTerm - } - return 0 -} - -type AuthEnableRequest struct { -} - -func (m *AuthEnableRequest) Reset() { *m = AuthEnableRequest{} } -func (m *AuthEnableRequest) String() string { return proto.CompactTextString(m) } -func (*AuthEnableRequest) ProtoMessage() {} -func (*AuthEnableRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{46} } - -type AuthDisableRequest struct { -} - -func (m *AuthDisableRequest) Reset() { *m = AuthDisableRequest{} } -func (m *AuthDisableRequest) String() string { return proto.CompactTextString(m) } -func (*AuthDisableRequest) ProtoMessage() {} -func (*AuthDisableRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{47} } - -type AuthenticateRequest struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` -} - -func (m *AuthenticateRequest) Reset() { *m = AuthenticateRequest{} } -func (m *AuthenticateRequest) String() string { return proto.CompactTextString(m) } -func (*AuthenticateRequest) ProtoMessage() {} -func (*AuthenticateRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{48} } - -func (m *AuthenticateRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *AuthenticateRequest) GetPassword() string { - if m != nil { - return m.Password - } - return "" -} - -type AuthUserAddRequest struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` -} - -func (m *AuthUserAddRequest) Reset() { *m = AuthUserAddRequest{} } -func (m *AuthUserAddRequest) String() string { return proto.CompactTextString(m) } -func (*AuthUserAddRequest) ProtoMessage() {} -func (*AuthUserAddRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{49} } - -func (m *AuthUserAddRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *AuthUserAddRequest) GetPassword() string { - if m != nil { - return m.Password - } - return "" -} - -type AuthUserGetRequest struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (m *AuthUserGetRequest) Reset() { *m = AuthUserGetRequest{} } -func (m *AuthUserGetRequest) String() string { return proto.CompactTextString(m) } -func (*AuthUserGetRequest) ProtoMessage() {} -func (*AuthUserGetRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{50} } - -func (m *AuthUserGetRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -type AuthUserDeleteRequest struct { - // name is the name of the user to delete. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (m *AuthUserDeleteRequest) Reset() { *m = AuthUserDeleteRequest{} } -func (m *AuthUserDeleteRequest) String() string { return proto.CompactTextString(m) } -func (*AuthUserDeleteRequest) ProtoMessage() {} -func (*AuthUserDeleteRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{51} } - -func (m *AuthUserDeleteRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -type AuthUserChangePasswordRequest struct { - // name is the name of the user whose password is being changed. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // password is the new password for the user. - Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` -} - -func (m *AuthUserChangePasswordRequest) Reset() { *m = AuthUserChangePasswordRequest{} } -func (m *AuthUserChangePasswordRequest) String() string { return proto.CompactTextString(m) } -func (*AuthUserChangePasswordRequest) ProtoMessage() {} -func (*AuthUserChangePasswordRequest) Descriptor() ([]byte, []int) { - return fileDescriptorRpc, []int{52} -} - -func (m *AuthUserChangePasswordRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *AuthUserChangePasswordRequest) GetPassword() string { - if m != nil { - return m.Password - } - return "" -} - -type AuthUserGrantRoleRequest struct { - // user is the name of the user which should be granted a given role. - User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` - // role is the name of the role to grant to the user. - Role string `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` -} - -func (m *AuthUserGrantRoleRequest) Reset() { *m = AuthUserGrantRoleRequest{} } -func (m *AuthUserGrantRoleRequest) String() string { return proto.CompactTextString(m) } -func (*AuthUserGrantRoleRequest) ProtoMessage() {} -func (*AuthUserGrantRoleRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{53} } - -func (m *AuthUserGrantRoleRequest) GetUser() string { - if m != nil { - return m.User - } - return "" -} - -func (m *AuthUserGrantRoleRequest) GetRole() string { - if m != nil { - return m.Role - } - return "" -} - -type AuthUserRevokeRoleRequest struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Role string `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` -} - -func (m *AuthUserRevokeRoleRequest) Reset() { *m = AuthUserRevokeRoleRequest{} } -func (m *AuthUserRevokeRoleRequest) String() string { return proto.CompactTextString(m) } -func (*AuthUserRevokeRoleRequest) ProtoMessage() {} -func (*AuthUserRevokeRoleRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{54} } - -func (m *AuthUserRevokeRoleRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *AuthUserRevokeRoleRequest) GetRole() string { - if m != nil { - return m.Role - } - return "" -} - -type AuthRoleAddRequest struct { - // name is the name of the role to add to the authentication system. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (m *AuthRoleAddRequest) Reset() { *m = AuthRoleAddRequest{} } -func (m *AuthRoleAddRequest) String() string { return proto.CompactTextString(m) } -func (*AuthRoleAddRequest) ProtoMessage() {} -func (*AuthRoleAddRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{55} } - -func (m *AuthRoleAddRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -type AuthRoleGetRequest struct { - Role string `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` -} - -func (m *AuthRoleGetRequest) Reset() { *m = AuthRoleGetRequest{} } -func (m *AuthRoleGetRequest) String() string { return proto.CompactTextString(m) } -func (*AuthRoleGetRequest) ProtoMessage() {} -func (*AuthRoleGetRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{56} } - -func (m *AuthRoleGetRequest) GetRole() string { - if m != nil { - return m.Role - } - return "" -} - -type AuthUserListRequest struct { -} - -func (m *AuthUserListRequest) Reset() { *m = AuthUserListRequest{} } -func (m *AuthUserListRequest) String() string { return proto.CompactTextString(m) } -func (*AuthUserListRequest) ProtoMessage() {} -func (*AuthUserListRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{57} } - -type AuthRoleListRequest struct { -} - -func (m *AuthRoleListRequest) Reset() { *m = AuthRoleListRequest{} } -func (m *AuthRoleListRequest) String() string { return proto.CompactTextString(m) } -func (*AuthRoleListRequest) ProtoMessage() {} -func (*AuthRoleListRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{58} } - -type AuthRoleDeleteRequest struct { - Role string `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` -} - -func (m *AuthRoleDeleteRequest) Reset() { *m = AuthRoleDeleteRequest{} } -func (m *AuthRoleDeleteRequest) String() string { return proto.CompactTextString(m) } -func (*AuthRoleDeleteRequest) ProtoMessage() {} -func (*AuthRoleDeleteRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{59} } - -func (m *AuthRoleDeleteRequest) GetRole() string { - if m != nil { - return m.Role - } - return "" -} - -type AuthRoleGrantPermissionRequest struct { - // name is the name of the role which will be granted the permission. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // perm is the permission to grant to the role. - Perm *authpb.Permission `protobuf:"bytes,2,opt,name=perm" json:"perm,omitempty"` -} - -func (m *AuthRoleGrantPermissionRequest) Reset() { *m = AuthRoleGrantPermissionRequest{} } -func (m *AuthRoleGrantPermissionRequest) String() string { return proto.CompactTextString(m) } -func (*AuthRoleGrantPermissionRequest) ProtoMessage() {} -func (*AuthRoleGrantPermissionRequest) Descriptor() ([]byte, []int) { - return fileDescriptorRpc, []int{60} -} - -func (m *AuthRoleGrantPermissionRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *AuthRoleGrantPermissionRequest) GetPerm() *authpb.Permission { - if m != nil { - return m.Perm - } - return nil -} - -type AuthRoleRevokePermissionRequest struct { - Role string `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` - Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` - RangeEnd string `protobuf:"bytes,3,opt,name=range_end,json=rangeEnd,proto3" json:"range_end,omitempty"` -} - -func (m *AuthRoleRevokePermissionRequest) Reset() { *m = AuthRoleRevokePermissionRequest{} } -func (m *AuthRoleRevokePermissionRequest) String() string { return proto.CompactTextString(m) } -func (*AuthRoleRevokePermissionRequest) ProtoMessage() {} -func (*AuthRoleRevokePermissionRequest) Descriptor() ([]byte, []int) { - return fileDescriptorRpc, []int{61} -} - -func (m *AuthRoleRevokePermissionRequest) GetRole() string { - if m != nil { - return m.Role - } - return "" -} - -func (m *AuthRoleRevokePermissionRequest) GetKey() string { - if m != nil { - return m.Key - } - return "" -} - -func (m *AuthRoleRevokePermissionRequest) GetRangeEnd() string { - if m != nil { - return m.RangeEnd - } - return "" -} - -type AuthEnableResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *AuthEnableResponse) Reset() { *m = AuthEnableResponse{} } -func (m *AuthEnableResponse) String() string { return proto.CompactTextString(m) } -func (*AuthEnableResponse) ProtoMessage() {} -func (*AuthEnableResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{62} } - -func (m *AuthEnableResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -type AuthDisableResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *AuthDisableResponse) Reset() { *m = AuthDisableResponse{} } -func (m *AuthDisableResponse) String() string { return proto.CompactTextString(m) } -func (*AuthDisableResponse) ProtoMessage() {} -func (*AuthDisableResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{63} } - -func (m *AuthDisableResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -type AuthenticateResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - // token is an authorized token that can be used in succeeding RPCs - Token string `protobuf:"bytes,2,opt,name=token,proto3" json:"token,omitempty"` -} - -func (m *AuthenticateResponse) Reset() { *m = AuthenticateResponse{} } -func (m *AuthenticateResponse) String() string { return proto.CompactTextString(m) } -func (*AuthenticateResponse) ProtoMessage() {} -func (*AuthenticateResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{64} } - -func (m *AuthenticateResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *AuthenticateResponse) GetToken() string { - if m != nil { - return m.Token - } - return "" -} - -type AuthUserAddResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *AuthUserAddResponse) Reset() { *m = AuthUserAddResponse{} } -func (m *AuthUserAddResponse) String() string { return proto.CompactTextString(m) } -func (*AuthUserAddResponse) ProtoMessage() {} -func (*AuthUserAddResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{65} } - -func (m *AuthUserAddResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -type AuthUserGetResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - Roles []string `protobuf:"bytes,2,rep,name=roles" json:"roles,omitempty"` -} - -func (m *AuthUserGetResponse) Reset() { *m = AuthUserGetResponse{} } -func (m *AuthUserGetResponse) String() string { return proto.CompactTextString(m) } -func (*AuthUserGetResponse) ProtoMessage() {} -func (*AuthUserGetResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{66} } - -func (m *AuthUserGetResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *AuthUserGetResponse) GetRoles() []string { - if m != nil { - return m.Roles - } - return nil -} - -type AuthUserDeleteResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *AuthUserDeleteResponse) Reset() { *m = AuthUserDeleteResponse{} } -func (m *AuthUserDeleteResponse) String() string { return proto.CompactTextString(m) } -func (*AuthUserDeleteResponse) ProtoMessage() {} -func (*AuthUserDeleteResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{67} } - -func (m *AuthUserDeleteResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -type AuthUserChangePasswordResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *AuthUserChangePasswordResponse) Reset() { *m = AuthUserChangePasswordResponse{} } -func (m *AuthUserChangePasswordResponse) String() string { return proto.CompactTextString(m) } -func (*AuthUserChangePasswordResponse) ProtoMessage() {} -func (*AuthUserChangePasswordResponse) Descriptor() ([]byte, []int) { - return fileDescriptorRpc, []int{68} -} - -func (m *AuthUserChangePasswordResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -type AuthUserGrantRoleResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *AuthUserGrantRoleResponse) Reset() { *m = AuthUserGrantRoleResponse{} } -func (m *AuthUserGrantRoleResponse) String() string { return proto.CompactTextString(m) } -func (*AuthUserGrantRoleResponse) ProtoMessage() {} -func (*AuthUserGrantRoleResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{69} } - -func (m *AuthUserGrantRoleResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -type AuthUserRevokeRoleResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *AuthUserRevokeRoleResponse) Reset() { *m = AuthUserRevokeRoleResponse{} } -func (m *AuthUserRevokeRoleResponse) String() string { return proto.CompactTextString(m) } -func (*AuthUserRevokeRoleResponse) ProtoMessage() {} -func (*AuthUserRevokeRoleResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{70} } - -func (m *AuthUserRevokeRoleResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -type AuthRoleAddResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *AuthRoleAddResponse) Reset() { *m = AuthRoleAddResponse{} } -func (m *AuthRoleAddResponse) String() string { return proto.CompactTextString(m) } -func (*AuthRoleAddResponse) ProtoMessage() {} -func (*AuthRoleAddResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{71} } - -func (m *AuthRoleAddResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -type AuthRoleGetResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - Perm []*authpb.Permission `protobuf:"bytes,2,rep,name=perm" json:"perm,omitempty"` -} - -func (m *AuthRoleGetResponse) Reset() { *m = AuthRoleGetResponse{} } -func (m *AuthRoleGetResponse) String() string { return proto.CompactTextString(m) } -func (*AuthRoleGetResponse) ProtoMessage() {} -func (*AuthRoleGetResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{72} } - -func (m *AuthRoleGetResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *AuthRoleGetResponse) GetPerm() []*authpb.Permission { - if m != nil { - return m.Perm - } - return nil -} - -type AuthRoleListResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - Roles []string `protobuf:"bytes,2,rep,name=roles" json:"roles,omitempty"` -} - -func (m *AuthRoleListResponse) Reset() { *m = AuthRoleListResponse{} } -func (m *AuthRoleListResponse) String() string { return proto.CompactTextString(m) } -func (*AuthRoleListResponse) ProtoMessage() {} -func (*AuthRoleListResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{73} } - -func (m *AuthRoleListResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *AuthRoleListResponse) GetRoles() []string { - if m != nil { - return m.Roles - } - return nil -} - -type AuthUserListResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - Users []string `protobuf:"bytes,2,rep,name=users" json:"users,omitempty"` -} - -func (m *AuthUserListResponse) Reset() { *m = AuthUserListResponse{} } -func (m *AuthUserListResponse) String() string { return proto.CompactTextString(m) } -func (*AuthUserListResponse) ProtoMessage() {} -func (*AuthUserListResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{74} } - -func (m *AuthUserListResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *AuthUserListResponse) GetUsers() []string { - if m != nil { - return m.Users - } - return nil -} - -type AuthRoleDeleteResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *AuthRoleDeleteResponse) Reset() { *m = AuthRoleDeleteResponse{} } -func (m *AuthRoleDeleteResponse) String() string { return proto.CompactTextString(m) } -func (*AuthRoleDeleteResponse) ProtoMessage() {} -func (*AuthRoleDeleteResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{75} } - -func (m *AuthRoleDeleteResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -type AuthRoleGrantPermissionResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *AuthRoleGrantPermissionResponse) Reset() { *m = AuthRoleGrantPermissionResponse{} } -func (m *AuthRoleGrantPermissionResponse) String() string { return proto.CompactTextString(m) } -func (*AuthRoleGrantPermissionResponse) ProtoMessage() {} -func (*AuthRoleGrantPermissionResponse) Descriptor() ([]byte, []int) { - return fileDescriptorRpc, []int{76} -} - -func (m *AuthRoleGrantPermissionResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -type AuthRoleRevokePermissionResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *AuthRoleRevokePermissionResponse) Reset() { *m = AuthRoleRevokePermissionResponse{} } -func (m *AuthRoleRevokePermissionResponse) String() string { return proto.CompactTextString(m) } -func (*AuthRoleRevokePermissionResponse) ProtoMessage() {} -func (*AuthRoleRevokePermissionResponse) Descriptor() ([]byte, []int) { - return fileDescriptorRpc, []int{77} -} - -func (m *AuthRoleRevokePermissionResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func init() { - proto.RegisterType((*ResponseHeader)(nil), "etcdserverpb.ResponseHeader") - proto.RegisterType((*RangeRequest)(nil), "etcdserverpb.RangeRequest") - proto.RegisterType((*RangeResponse)(nil), "etcdserverpb.RangeResponse") - proto.RegisterType((*PutRequest)(nil), "etcdserverpb.PutRequest") - proto.RegisterType((*PutResponse)(nil), "etcdserverpb.PutResponse") - proto.RegisterType((*DeleteRangeRequest)(nil), "etcdserverpb.DeleteRangeRequest") - proto.RegisterType((*DeleteRangeResponse)(nil), "etcdserverpb.DeleteRangeResponse") - proto.RegisterType((*RequestOp)(nil), "etcdserverpb.RequestOp") - proto.RegisterType((*ResponseOp)(nil), "etcdserverpb.ResponseOp") - proto.RegisterType((*Compare)(nil), "etcdserverpb.Compare") - proto.RegisterType((*TxnRequest)(nil), "etcdserverpb.TxnRequest") - proto.RegisterType((*TxnResponse)(nil), "etcdserverpb.TxnResponse") - proto.RegisterType((*CompactionRequest)(nil), "etcdserverpb.CompactionRequest") - proto.RegisterType((*CompactionResponse)(nil), "etcdserverpb.CompactionResponse") - proto.RegisterType((*HashRequest)(nil), "etcdserverpb.HashRequest") - proto.RegisterType((*HashResponse)(nil), "etcdserverpb.HashResponse") - proto.RegisterType((*SnapshotRequest)(nil), "etcdserverpb.SnapshotRequest") - proto.RegisterType((*SnapshotResponse)(nil), "etcdserverpb.SnapshotResponse") - proto.RegisterType((*WatchRequest)(nil), "etcdserverpb.WatchRequest") - proto.RegisterType((*WatchCreateRequest)(nil), "etcdserverpb.WatchCreateRequest") - proto.RegisterType((*WatchCancelRequest)(nil), "etcdserverpb.WatchCancelRequest") - proto.RegisterType((*WatchResponse)(nil), "etcdserverpb.WatchResponse") - proto.RegisterType((*LeaseGrantRequest)(nil), "etcdserverpb.LeaseGrantRequest") - proto.RegisterType((*LeaseGrantResponse)(nil), "etcdserverpb.LeaseGrantResponse") - proto.RegisterType((*LeaseRevokeRequest)(nil), "etcdserverpb.LeaseRevokeRequest") - proto.RegisterType((*LeaseRevokeResponse)(nil), "etcdserverpb.LeaseRevokeResponse") - proto.RegisterType((*LeaseKeepAliveRequest)(nil), "etcdserverpb.LeaseKeepAliveRequest") - proto.RegisterType((*LeaseKeepAliveResponse)(nil), "etcdserverpb.LeaseKeepAliveResponse") - proto.RegisterType((*LeaseTimeToLiveRequest)(nil), "etcdserverpb.LeaseTimeToLiveRequest") - proto.RegisterType((*LeaseTimeToLiveResponse)(nil), "etcdserverpb.LeaseTimeToLiveResponse") - proto.RegisterType((*Member)(nil), "etcdserverpb.Member") - proto.RegisterType((*MemberAddRequest)(nil), "etcdserverpb.MemberAddRequest") - proto.RegisterType((*MemberAddResponse)(nil), "etcdserverpb.MemberAddResponse") - proto.RegisterType((*MemberRemoveRequest)(nil), "etcdserverpb.MemberRemoveRequest") - proto.RegisterType((*MemberRemoveResponse)(nil), "etcdserverpb.MemberRemoveResponse") - proto.RegisterType((*MemberUpdateRequest)(nil), "etcdserverpb.MemberUpdateRequest") - proto.RegisterType((*MemberUpdateResponse)(nil), "etcdserverpb.MemberUpdateResponse") - proto.RegisterType((*MemberListRequest)(nil), "etcdserverpb.MemberListRequest") - proto.RegisterType((*MemberListResponse)(nil), "etcdserverpb.MemberListResponse") - proto.RegisterType((*DefragmentRequest)(nil), "etcdserverpb.DefragmentRequest") - proto.RegisterType((*DefragmentResponse)(nil), "etcdserverpb.DefragmentResponse") - proto.RegisterType((*AlarmRequest)(nil), "etcdserverpb.AlarmRequest") - proto.RegisterType((*AlarmMember)(nil), "etcdserverpb.AlarmMember") - proto.RegisterType((*AlarmResponse)(nil), "etcdserverpb.AlarmResponse") - proto.RegisterType((*StatusRequest)(nil), "etcdserverpb.StatusRequest") - proto.RegisterType((*StatusResponse)(nil), "etcdserverpb.StatusResponse") - proto.RegisterType((*AuthEnableRequest)(nil), "etcdserverpb.AuthEnableRequest") - proto.RegisterType((*AuthDisableRequest)(nil), "etcdserverpb.AuthDisableRequest") - proto.RegisterType((*AuthenticateRequest)(nil), "etcdserverpb.AuthenticateRequest") - proto.RegisterType((*AuthUserAddRequest)(nil), "etcdserverpb.AuthUserAddRequest") - proto.RegisterType((*AuthUserGetRequest)(nil), "etcdserverpb.AuthUserGetRequest") - proto.RegisterType((*AuthUserDeleteRequest)(nil), "etcdserverpb.AuthUserDeleteRequest") - proto.RegisterType((*AuthUserChangePasswordRequest)(nil), "etcdserverpb.AuthUserChangePasswordRequest") - proto.RegisterType((*AuthUserGrantRoleRequest)(nil), "etcdserverpb.AuthUserGrantRoleRequest") - proto.RegisterType((*AuthUserRevokeRoleRequest)(nil), "etcdserverpb.AuthUserRevokeRoleRequest") - proto.RegisterType((*AuthRoleAddRequest)(nil), "etcdserverpb.AuthRoleAddRequest") - proto.RegisterType((*AuthRoleGetRequest)(nil), "etcdserverpb.AuthRoleGetRequest") - proto.RegisterType((*AuthUserListRequest)(nil), "etcdserverpb.AuthUserListRequest") - proto.RegisterType((*AuthRoleListRequest)(nil), "etcdserverpb.AuthRoleListRequest") - proto.RegisterType((*AuthRoleDeleteRequest)(nil), "etcdserverpb.AuthRoleDeleteRequest") - proto.RegisterType((*AuthRoleGrantPermissionRequest)(nil), "etcdserverpb.AuthRoleGrantPermissionRequest") - proto.RegisterType((*AuthRoleRevokePermissionRequest)(nil), "etcdserverpb.AuthRoleRevokePermissionRequest") - proto.RegisterType((*AuthEnableResponse)(nil), "etcdserverpb.AuthEnableResponse") - proto.RegisterType((*AuthDisableResponse)(nil), "etcdserverpb.AuthDisableResponse") - proto.RegisterType((*AuthenticateResponse)(nil), "etcdserverpb.AuthenticateResponse") - proto.RegisterType((*AuthUserAddResponse)(nil), "etcdserverpb.AuthUserAddResponse") - proto.RegisterType((*AuthUserGetResponse)(nil), "etcdserverpb.AuthUserGetResponse") - proto.RegisterType((*AuthUserDeleteResponse)(nil), "etcdserverpb.AuthUserDeleteResponse") - proto.RegisterType((*AuthUserChangePasswordResponse)(nil), "etcdserverpb.AuthUserChangePasswordResponse") - proto.RegisterType((*AuthUserGrantRoleResponse)(nil), "etcdserverpb.AuthUserGrantRoleResponse") - proto.RegisterType((*AuthUserRevokeRoleResponse)(nil), "etcdserverpb.AuthUserRevokeRoleResponse") - proto.RegisterType((*AuthRoleAddResponse)(nil), "etcdserverpb.AuthRoleAddResponse") - proto.RegisterType((*AuthRoleGetResponse)(nil), "etcdserverpb.AuthRoleGetResponse") - proto.RegisterType((*AuthRoleListResponse)(nil), "etcdserverpb.AuthRoleListResponse") - proto.RegisterType((*AuthUserListResponse)(nil), "etcdserverpb.AuthUserListResponse") - proto.RegisterType((*AuthRoleDeleteResponse)(nil), "etcdserverpb.AuthRoleDeleteResponse") - proto.RegisterType((*AuthRoleGrantPermissionResponse)(nil), "etcdserverpb.AuthRoleGrantPermissionResponse") - proto.RegisterType((*AuthRoleRevokePermissionResponse)(nil), "etcdserverpb.AuthRoleRevokePermissionResponse") - proto.RegisterEnum("etcdserverpb.AlarmType", AlarmType_name, AlarmType_value) - proto.RegisterEnum("etcdserverpb.RangeRequest_SortOrder", RangeRequest_SortOrder_name, RangeRequest_SortOrder_value) - proto.RegisterEnum("etcdserverpb.RangeRequest_SortTarget", RangeRequest_SortTarget_name, RangeRequest_SortTarget_value) - proto.RegisterEnum("etcdserverpb.Compare_CompareResult", Compare_CompareResult_name, Compare_CompareResult_value) - proto.RegisterEnum("etcdserverpb.Compare_CompareTarget", Compare_CompareTarget_name, Compare_CompareTarget_value) - proto.RegisterEnum("etcdserverpb.WatchCreateRequest_FilterType", WatchCreateRequest_FilterType_name, WatchCreateRequest_FilterType_value) - proto.RegisterEnum("etcdserverpb.AlarmRequest_AlarmAction", AlarmRequest_AlarmAction_name, AlarmRequest_AlarmAction_value) -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// Client API for KV service - -type KVClient interface { - // Range gets the keys in the range from the key-value store. - Range(ctx context.Context, in *RangeRequest, opts ...grpc.CallOption) (*RangeResponse, error) - // Put puts the given key into the key-value store. - // A put request increments the revision of the key-value store - // and generates one event in the event history. - Put(ctx context.Context, in *PutRequest, opts ...grpc.CallOption) (*PutResponse, error) - // DeleteRange deletes the given range from the key-value store. - // A delete request increments the revision of the key-value store - // and generates a delete event in the event history for every deleted key. - DeleteRange(ctx context.Context, in *DeleteRangeRequest, opts ...grpc.CallOption) (*DeleteRangeResponse, error) - // Txn processes multiple requests in a single transaction. - // A txn request increments the revision of the key-value store - // and generates events with the same revision for every completed request. - // It is not allowed to modify the same key several times within one txn. - Txn(ctx context.Context, in *TxnRequest, opts ...grpc.CallOption) (*TxnResponse, error) - // Compact compacts the event history in the etcd key-value store. The key-value - // store should be periodically compacted or the event history will continue to grow - // indefinitely. - Compact(ctx context.Context, in *CompactionRequest, opts ...grpc.CallOption) (*CompactionResponse, error) -} - -type kVClient struct { - cc *grpc.ClientConn -} - -func NewKVClient(cc *grpc.ClientConn) KVClient { - return &kVClient{cc} -} - -func (c *kVClient) Range(ctx context.Context, in *RangeRequest, opts ...grpc.CallOption) (*RangeResponse, error) { - out := new(RangeResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.KV/Range", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *kVClient) Put(ctx context.Context, in *PutRequest, opts ...grpc.CallOption) (*PutResponse, error) { - out := new(PutResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.KV/Put", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *kVClient) DeleteRange(ctx context.Context, in *DeleteRangeRequest, opts ...grpc.CallOption) (*DeleteRangeResponse, error) { - out := new(DeleteRangeResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.KV/DeleteRange", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *kVClient) Txn(ctx context.Context, in *TxnRequest, opts ...grpc.CallOption) (*TxnResponse, error) { - out := new(TxnResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.KV/Txn", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *kVClient) Compact(ctx context.Context, in *CompactionRequest, opts ...grpc.CallOption) (*CompactionResponse, error) { - out := new(CompactionResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.KV/Compact", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Server API for KV service - -type KVServer interface { - // Range gets the keys in the range from the key-value store. - Range(context.Context, *RangeRequest) (*RangeResponse, error) - // Put puts the given key into the key-value store. - // A put request increments the revision of the key-value store - // and generates one event in the event history. - Put(context.Context, *PutRequest) (*PutResponse, error) - // DeleteRange deletes the given range from the key-value store. - // A delete request increments the revision of the key-value store - // and generates a delete event in the event history for every deleted key. - DeleteRange(context.Context, *DeleteRangeRequest) (*DeleteRangeResponse, error) - // Txn processes multiple requests in a single transaction. - // A txn request increments the revision of the key-value store - // and generates events with the same revision for every completed request. - // It is not allowed to modify the same key several times within one txn. - Txn(context.Context, *TxnRequest) (*TxnResponse, error) - // Compact compacts the event history in the etcd key-value store. The key-value - // store should be periodically compacted or the event history will continue to grow - // indefinitely. - Compact(context.Context, *CompactionRequest) (*CompactionResponse, error) -} - -func RegisterKVServer(s *grpc.Server, srv KVServer) { - s.RegisterService(&_KV_serviceDesc, srv) -} - -func _KV_Range_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RangeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(KVServer).Range(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.KV/Range", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(KVServer).Range(ctx, req.(*RangeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _KV_Put_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PutRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(KVServer).Put(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.KV/Put", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(KVServer).Put(ctx, req.(*PutRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _KV_DeleteRange_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteRangeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(KVServer).DeleteRange(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.KV/DeleteRange", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(KVServer).DeleteRange(ctx, req.(*DeleteRangeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _KV_Txn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(TxnRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(KVServer).Txn(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.KV/Txn", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(KVServer).Txn(ctx, req.(*TxnRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _KV_Compact_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CompactionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(KVServer).Compact(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.KV/Compact", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(KVServer).Compact(ctx, req.(*CompactionRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _KV_serviceDesc = grpc.ServiceDesc{ - ServiceName: "etcdserverpb.KV", - HandlerType: (*KVServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Range", - Handler: _KV_Range_Handler, - }, - { - MethodName: "Put", - Handler: _KV_Put_Handler, - }, - { - MethodName: "DeleteRange", - Handler: _KV_DeleteRange_Handler, - }, - { - MethodName: "Txn", - Handler: _KV_Txn_Handler, - }, - { - MethodName: "Compact", - Handler: _KV_Compact_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "rpc.proto", -} - -// Client API for Watch service - -type WatchClient interface { - // Watch watches for events happening or that have happened. Both input and output - // are streams; the input stream is for creating and canceling watchers and the output - // stream sends events. One watch RPC can watch on multiple key ranges, streaming events - // for several watches at once. The entire event history can be watched starting from the - // last compaction revision. - Watch(ctx context.Context, opts ...grpc.CallOption) (Watch_WatchClient, error) -} - -type watchClient struct { - cc *grpc.ClientConn -} - -func NewWatchClient(cc *grpc.ClientConn) WatchClient { - return &watchClient{cc} -} - -func (c *watchClient) Watch(ctx context.Context, opts ...grpc.CallOption) (Watch_WatchClient, error) { - stream, err := grpc.NewClientStream(ctx, &_Watch_serviceDesc.Streams[0], c.cc, "/etcdserverpb.Watch/Watch", opts...) - if err != nil { - return nil, err - } - x := &watchWatchClient{stream} - return x, nil -} - -type Watch_WatchClient interface { - Send(*WatchRequest) error - Recv() (*WatchResponse, error) - grpc.ClientStream -} - -type watchWatchClient struct { - grpc.ClientStream -} - -func (x *watchWatchClient) Send(m *WatchRequest) error { - return x.ClientStream.SendMsg(m) -} - -func (x *watchWatchClient) Recv() (*WatchResponse, error) { - m := new(WatchResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -// Server API for Watch service - -type WatchServer interface { - // Watch watches for events happening or that have happened. Both input and output - // are streams; the input stream is for creating and canceling watchers and the output - // stream sends events. One watch RPC can watch on multiple key ranges, streaming events - // for several watches at once. The entire event history can be watched starting from the - // last compaction revision. - Watch(Watch_WatchServer) error -} - -func RegisterWatchServer(s *grpc.Server, srv WatchServer) { - s.RegisterService(&_Watch_serviceDesc, srv) -} - -func _Watch_Watch_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(WatchServer).Watch(&watchWatchServer{stream}) -} - -type Watch_WatchServer interface { - Send(*WatchResponse) error - Recv() (*WatchRequest, error) - grpc.ServerStream -} - -type watchWatchServer struct { - grpc.ServerStream -} - -func (x *watchWatchServer) Send(m *WatchResponse) error { - return x.ServerStream.SendMsg(m) -} - -func (x *watchWatchServer) Recv() (*WatchRequest, error) { - m := new(WatchRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -var _Watch_serviceDesc = grpc.ServiceDesc{ - ServiceName: "etcdserverpb.Watch", - HandlerType: (*WatchServer)(nil), - Methods: []grpc.MethodDesc{}, - Streams: []grpc.StreamDesc{ - { - StreamName: "Watch", - Handler: _Watch_Watch_Handler, - ServerStreams: true, - ClientStreams: true, - }, - }, - Metadata: "rpc.proto", -} - -// Client API for Lease service - -type LeaseClient interface { - // LeaseGrant creates a lease which expires if the server does not receive a keepAlive - // within a given time to live period. All keys attached to the lease will be expired and - // deleted if the lease expires. Each expired key generates a delete event in the event history. - LeaseGrant(ctx context.Context, in *LeaseGrantRequest, opts ...grpc.CallOption) (*LeaseGrantResponse, error) - // LeaseRevoke revokes a lease. All keys attached to the lease will expire and be deleted. - LeaseRevoke(ctx context.Context, in *LeaseRevokeRequest, opts ...grpc.CallOption) (*LeaseRevokeResponse, error) - // LeaseKeepAlive keeps the lease alive by streaming keep alive requests from the client - // to the server and streaming keep alive responses from the server to the client. - LeaseKeepAlive(ctx context.Context, opts ...grpc.CallOption) (Lease_LeaseKeepAliveClient, error) - // LeaseTimeToLive retrieves lease information. - LeaseTimeToLive(ctx context.Context, in *LeaseTimeToLiveRequest, opts ...grpc.CallOption) (*LeaseTimeToLiveResponse, error) -} - -type leaseClient struct { - cc *grpc.ClientConn -} - -func NewLeaseClient(cc *grpc.ClientConn) LeaseClient { - return &leaseClient{cc} -} - -func (c *leaseClient) LeaseGrant(ctx context.Context, in *LeaseGrantRequest, opts ...grpc.CallOption) (*LeaseGrantResponse, error) { - out := new(LeaseGrantResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Lease/LeaseGrant", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *leaseClient) LeaseRevoke(ctx context.Context, in *LeaseRevokeRequest, opts ...grpc.CallOption) (*LeaseRevokeResponse, error) { - out := new(LeaseRevokeResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Lease/LeaseRevoke", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *leaseClient) LeaseKeepAlive(ctx context.Context, opts ...grpc.CallOption) (Lease_LeaseKeepAliveClient, error) { - stream, err := grpc.NewClientStream(ctx, &_Lease_serviceDesc.Streams[0], c.cc, "/etcdserverpb.Lease/LeaseKeepAlive", opts...) - if err != nil { - return nil, err - } - x := &leaseLeaseKeepAliveClient{stream} - return x, nil -} - -type Lease_LeaseKeepAliveClient interface { - Send(*LeaseKeepAliveRequest) error - Recv() (*LeaseKeepAliveResponse, error) - grpc.ClientStream -} - -type leaseLeaseKeepAliveClient struct { - grpc.ClientStream -} - -func (x *leaseLeaseKeepAliveClient) Send(m *LeaseKeepAliveRequest) error { - return x.ClientStream.SendMsg(m) -} - -func (x *leaseLeaseKeepAliveClient) Recv() (*LeaseKeepAliveResponse, error) { - m := new(LeaseKeepAliveResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *leaseClient) LeaseTimeToLive(ctx context.Context, in *LeaseTimeToLiveRequest, opts ...grpc.CallOption) (*LeaseTimeToLiveResponse, error) { - out := new(LeaseTimeToLiveResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Lease/LeaseTimeToLive", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Server API for Lease service - -type LeaseServer interface { - // LeaseGrant creates a lease which expires if the server does not receive a keepAlive - // within a given time to live period. All keys attached to the lease will be expired and - // deleted if the lease expires. Each expired key generates a delete event in the event history. - LeaseGrant(context.Context, *LeaseGrantRequest) (*LeaseGrantResponse, error) - // LeaseRevoke revokes a lease. All keys attached to the lease will expire and be deleted. - LeaseRevoke(context.Context, *LeaseRevokeRequest) (*LeaseRevokeResponse, error) - // LeaseKeepAlive keeps the lease alive by streaming keep alive requests from the client - // to the server and streaming keep alive responses from the server to the client. - LeaseKeepAlive(Lease_LeaseKeepAliveServer) error - // LeaseTimeToLive retrieves lease information. - LeaseTimeToLive(context.Context, *LeaseTimeToLiveRequest) (*LeaseTimeToLiveResponse, error) -} - -func RegisterLeaseServer(s *grpc.Server, srv LeaseServer) { - s.RegisterService(&_Lease_serviceDesc, srv) -} - -func _Lease_LeaseGrant_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(LeaseGrantRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(LeaseServer).LeaseGrant(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Lease/LeaseGrant", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(LeaseServer).LeaseGrant(ctx, req.(*LeaseGrantRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Lease_LeaseRevoke_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(LeaseRevokeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(LeaseServer).LeaseRevoke(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Lease/LeaseRevoke", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(LeaseServer).LeaseRevoke(ctx, req.(*LeaseRevokeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Lease_LeaseKeepAlive_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(LeaseServer).LeaseKeepAlive(&leaseLeaseKeepAliveServer{stream}) -} - -type Lease_LeaseKeepAliveServer interface { - Send(*LeaseKeepAliveResponse) error - Recv() (*LeaseKeepAliveRequest, error) - grpc.ServerStream -} - -type leaseLeaseKeepAliveServer struct { - grpc.ServerStream -} - -func (x *leaseLeaseKeepAliveServer) Send(m *LeaseKeepAliveResponse) error { - return x.ServerStream.SendMsg(m) -} - -func (x *leaseLeaseKeepAliveServer) Recv() (*LeaseKeepAliveRequest, error) { - m := new(LeaseKeepAliveRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func _Lease_LeaseTimeToLive_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(LeaseTimeToLiveRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(LeaseServer).LeaseTimeToLive(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Lease/LeaseTimeToLive", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(LeaseServer).LeaseTimeToLive(ctx, req.(*LeaseTimeToLiveRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _Lease_serviceDesc = grpc.ServiceDesc{ - ServiceName: "etcdserverpb.Lease", - HandlerType: (*LeaseServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "LeaseGrant", - Handler: _Lease_LeaseGrant_Handler, - }, - { - MethodName: "LeaseRevoke", - Handler: _Lease_LeaseRevoke_Handler, - }, - { - MethodName: "LeaseTimeToLive", - Handler: _Lease_LeaseTimeToLive_Handler, - }, - }, - Streams: []grpc.StreamDesc{ - { - StreamName: "LeaseKeepAlive", - Handler: _Lease_LeaseKeepAlive_Handler, - ServerStreams: true, - ClientStreams: true, - }, - }, - Metadata: "rpc.proto", -} - -// Client API for Cluster service - -type ClusterClient interface { - // MemberAdd adds a member into the cluster. - MemberAdd(ctx context.Context, in *MemberAddRequest, opts ...grpc.CallOption) (*MemberAddResponse, error) - // MemberRemove removes an existing member from the cluster. - MemberRemove(ctx context.Context, in *MemberRemoveRequest, opts ...grpc.CallOption) (*MemberRemoveResponse, error) - // MemberUpdate updates the member configuration. - MemberUpdate(ctx context.Context, in *MemberUpdateRequest, opts ...grpc.CallOption) (*MemberUpdateResponse, error) - // MemberList lists all the members in the cluster. - MemberList(ctx context.Context, in *MemberListRequest, opts ...grpc.CallOption) (*MemberListResponse, error) -} - -type clusterClient struct { - cc *grpc.ClientConn -} - -func NewClusterClient(cc *grpc.ClientConn) ClusterClient { - return &clusterClient{cc} -} - -func (c *clusterClient) MemberAdd(ctx context.Context, in *MemberAddRequest, opts ...grpc.CallOption) (*MemberAddResponse, error) { - out := new(MemberAddResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Cluster/MemberAdd", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *clusterClient) MemberRemove(ctx context.Context, in *MemberRemoveRequest, opts ...grpc.CallOption) (*MemberRemoveResponse, error) { - out := new(MemberRemoveResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Cluster/MemberRemove", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *clusterClient) MemberUpdate(ctx context.Context, in *MemberUpdateRequest, opts ...grpc.CallOption) (*MemberUpdateResponse, error) { - out := new(MemberUpdateResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Cluster/MemberUpdate", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *clusterClient) MemberList(ctx context.Context, in *MemberListRequest, opts ...grpc.CallOption) (*MemberListResponse, error) { - out := new(MemberListResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Cluster/MemberList", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Server API for Cluster service - -type ClusterServer interface { - // MemberAdd adds a member into the cluster. - MemberAdd(context.Context, *MemberAddRequest) (*MemberAddResponse, error) - // MemberRemove removes an existing member from the cluster. - MemberRemove(context.Context, *MemberRemoveRequest) (*MemberRemoveResponse, error) - // MemberUpdate updates the member configuration. - MemberUpdate(context.Context, *MemberUpdateRequest) (*MemberUpdateResponse, error) - // MemberList lists all the members in the cluster. - MemberList(context.Context, *MemberListRequest) (*MemberListResponse, error) -} - -func RegisterClusterServer(s *grpc.Server, srv ClusterServer) { - s.RegisterService(&_Cluster_serviceDesc, srv) -} - -func _Cluster_MemberAdd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MemberAddRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ClusterServer).MemberAdd(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Cluster/MemberAdd", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ClusterServer).MemberAdd(ctx, req.(*MemberAddRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Cluster_MemberRemove_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MemberRemoveRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ClusterServer).MemberRemove(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Cluster/MemberRemove", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ClusterServer).MemberRemove(ctx, req.(*MemberRemoveRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Cluster_MemberUpdate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MemberUpdateRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ClusterServer).MemberUpdate(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Cluster/MemberUpdate", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ClusterServer).MemberUpdate(ctx, req.(*MemberUpdateRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Cluster_MemberList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MemberListRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ClusterServer).MemberList(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Cluster/MemberList", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ClusterServer).MemberList(ctx, req.(*MemberListRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _Cluster_serviceDesc = grpc.ServiceDesc{ - ServiceName: "etcdserverpb.Cluster", - HandlerType: (*ClusterServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "MemberAdd", - Handler: _Cluster_MemberAdd_Handler, - }, - { - MethodName: "MemberRemove", - Handler: _Cluster_MemberRemove_Handler, - }, - { - MethodName: "MemberUpdate", - Handler: _Cluster_MemberUpdate_Handler, - }, - { - MethodName: "MemberList", - Handler: _Cluster_MemberList_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "rpc.proto", -} - -// Client API for Maintenance service - -type MaintenanceClient interface { - // Alarm activates, deactivates, and queries alarms regarding cluster health. - Alarm(ctx context.Context, in *AlarmRequest, opts ...grpc.CallOption) (*AlarmResponse, error) - // Status gets the status of the member. - Status(ctx context.Context, in *StatusRequest, opts ...grpc.CallOption) (*StatusResponse, error) - // Defragment defragments a member's backend database to recover storage space. - Defragment(ctx context.Context, in *DefragmentRequest, opts ...grpc.CallOption) (*DefragmentResponse, error) - // Hash returns the hash of the local KV state for consistency checking purpose. - // This is designed for testing; do not use this in production when there - // are ongoing transactions. - Hash(ctx context.Context, in *HashRequest, opts ...grpc.CallOption) (*HashResponse, error) - // Snapshot sends a snapshot of the entire backend from a member over a stream to a client. - Snapshot(ctx context.Context, in *SnapshotRequest, opts ...grpc.CallOption) (Maintenance_SnapshotClient, error) -} - -type maintenanceClient struct { - cc *grpc.ClientConn -} - -func NewMaintenanceClient(cc *grpc.ClientConn) MaintenanceClient { - return &maintenanceClient{cc} -} - -func (c *maintenanceClient) Alarm(ctx context.Context, in *AlarmRequest, opts ...grpc.CallOption) (*AlarmResponse, error) { - out := new(AlarmResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Maintenance/Alarm", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *maintenanceClient) Status(ctx context.Context, in *StatusRequest, opts ...grpc.CallOption) (*StatusResponse, error) { - out := new(StatusResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Maintenance/Status", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *maintenanceClient) Defragment(ctx context.Context, in *DefragmentRequest, opts ...grpc.CallOption) (*DefragmentResponse, error) { - out := new(DefragmentResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Maintenance/Defragment", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *maintenanceClient) Hash(ctx context.Context, in *HashRequest, opts ...grpc.CallOption) (*HashResponse, error) { - out := new(HashResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Maintenance/Hash", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *maintenanceClient) Snapshot(ctx context.Context, in *SnapshotRequest, opts ...grpc.CallOption) (Maintenance_SnapshotClient, error) { - stream, err := grpc.NewClientStream(ctx, &_Maintenance_serviceDesc.Streams[0], c.cc, "/etcdserverpb.Maintenance/Snapshot", opts...) - if err != nil { - return nil, err - } - x := &maintenanceSnapshotClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type Maintenance_SnapshotClient interface { - Recv() (*SnapshotResponse, error) - grpc.ClientStream -} - -type maintenanceSnapshotClient struct { - grpc.ClientStream -} - -func (x *maintenanceSnapshotClient) Recv() (*SnapshotResponse, error) { - m := new(SnapshotResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -// Server API for Maintenance service - -type MaintenanceServer interface { - // Alarm activates, deactivates, and queries alarms regarding cluster health. - Alarm(context.Context, *AlarmRequest) (*AlarmResponse, error) - // Status gets the status of the member. - Status(context.Context, *StatusRequest) (*StatusResponse, error) - // Defragment defragments a member's backend database to recover storage space. - Defragment(context.Context, *DefragmentRequest) (*DefragmentResponse, error) - // Hash returns the hash of the local KV state for consistency checking purpose. - // This is designed for testing; do not use this in production when there - // are ongoing transactions. - Hash(context.Context, *HashRequest) (*HashResponse, error) - // Snapshot sends a snapshot of the entire backend from a member over a stream to a client. - Snapshot(*SnapshotRequest, Maintenance_SnapshotServer) error -} - -func RegisterMaintenanceServer(s *grpc.Server, srv MaintenanceServer) { - s.RegisterService(&_Maintenance_serviceDesc, srv) -} - -func _Maintenance_Alarm_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AlarmRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MaintenanceServer).Alarm(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Maintenance/Alarm", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MaintenanceServer).Alarm(ctx, req.(*AlarmRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Maintenance_Status_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(StatusRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MaintenanceServer).Status(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Maintenance/Status", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MaintenanceServer).Status(ctx, req.(*StatusRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Maintenance_Defragment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DefragmentRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MaintenanceServer).Defragment(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Maintenance/Defragment", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MaintenanceServer).Defragment(ctx, req.(*DefragmentRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Maintenance_Hash_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(HashRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MaintenanceServer).Hash(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Maintenance/Hash", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MaintenanceServer).Hash(ctx, req.(*HashRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Maintenance_Snapshot_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(SnapshotRequest) - if err := stream.RecvMsg(m); err != nil { - return err - } - return srv.(MaintenanceServer).Snapshot(m, &maintenanceSnapshotServer{stream}) -} - -type Maintenance_SnapshotServer interface { - Send(*SnapshotResponse) error - grpc.ServerStream -} - -type maintenanceSnapshotServer struct { - grpc.ServerStream -} - -func (x *maintenanceSnapshotServer) Send(m *SnapshotResponse) error { - return x.ServerStream.SendMsg(m) -} - -var _Maintenance_serviceDesc = grpc.ServiceDesc{ - ServiceName: "etcdserverpb.Maintenance", - HandlerType: (*MaintenanceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Alarm", - Handler: _Maintenance_Alarm_Handler, - }, - { - MethodName: "Status", - Handler: _Maintenance_Status_Handler, - }, - { - MethodName: "Defragment", - Handler: _Maintenance_Defragment_Handler, - }, - { - MethodName: "Hash", - Handler: _Maintenance_Hash_Handler, - }, - }, - Streams: []grpc.StreamDesc{ - { - StreamName: "Snapshot", - Handler: _Maintenance_Snapshot_Handler, - ServerStreams: true, - }, - }, - Metadata: "rpc.proto", -} - -// Client API for Auth service - -type AuthClient interface { - // AuthEnable enables authentication. - AuthEnable(ctx context.Context, in *AuthEnableRequest, opts ...grpc.CallOption) (*AuthEnableResponse, error) - // AuthDisable disables authentication. - AuthDisable(ctx context.Context, in *AuthDisableRequest, opts ...grpc.CallOption) (*AuthDisableResponse, error) - // Authenticate processes an authenticate request. - Authenticate(ctx context.Context, in *AuthenticateRequest, opts ...grpc.CallOption) (*AuthenticateResponse, error) - // UserAdd adds a new user. - UserAdd(ctx context.Context, in *AuthUserAddRequest, opts ...grpc.CallOption) (*AuthUserAddResponse, error) - // UserGet gets detailed user information. - UserGet(ctx context.Context, in *AuthUserGetRequest, opts ...grpc.CallOption) (*AuthUserGetResponse, error) - // UserList gets a list of all users. - UserList(ctx context.Context, in *AuthUserListRequest, opts ...grpc.CallOption) (*AuthUserListResponse, error) - // UserDelete deletes a specified user. - UserDelete(ctx context.Context, in *AuthUserDeleteRequest, opts ...grpc.CallOption) (*AuthUserDeleteResponse, error) - // UserChangePassword changes the password of a specified user. - UserChangePassword(ctx context.Context, in *AuthUserChangePasswordRequest, opts ...grpc.CallOption) (*AuthUserChangePasswordResponse, error) - // UserGrant grants a role to a specified user. - UserGrantRole(ctx context.Context, in *AuthUserGrantRoleRequest, opts ...grpc.CallOption) (*AuthUserGrantRoleResponse, error) - // UserRevokeRole revokes a role of specified user. - UserRevokeRole(ctx context.Context, in *AuthUserRevokeRoleRequest, opts ...grpc.CallOption) (*AuthUserRevokeRoleResponse, error) - // RoleAdd adds a new role. - RoleAdd(ctx context.Context, in *AuthRoleAddRequest, opts ...grpc.CallOption) (*AuthRoleAddResponse, error) - // RoleGet gets detailed role information. - RoleGet(ctx context.Context, in *AuthRoleGetRequest, opts ...grpc.CallOption) (*AuthRoleGetResponse, error) - // RoleList gets lists of all roles. - RoleList(ctx context.Context, in *AuthRoleListRequest, opts ...grpc.CallOption) (*AuthRoleListResponse, error) - // RoleDelete deletes a specified role. - RoleDelete(ctx context.Context, in *AuthRoleDeleteRequest, opts ...grpc.CallOption) (*AuthRoleDeleteResponse, error) - // RoleGrantPermission grants a permission of a specified key or range to a specified role. - RoleGrantPermission(ctx context.Context, in *AuthRoleGrantPermissionRequest, opts ...grpc.CallOption) (*AuthRoleGrantPermissionResponse, error) - // RoleRevokePermission revokes a key or range permission of a specified role. - RoleRevokePermission(ctx context.Context, in *AuthRoleRevokePermissionRequest, opts ...grpc.CallOption) (*AuthRoleRevokePermissionResponse, error) -} - -type authClient struct { - cc *grpc.ClientConn -} - -func NewAuthClient(cc *grpc.ClientConn) AuthClient { - return &authClient{cc} -} - -func (c *authClient) AuthEnable(ctx context.Context, in *AuthEnableRequest, opts ...grpc.CallOption) (*AuthEnableResponse, error) { - out := new(AuthEnableResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Auth/AuthEnable", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authClient) AuthDisable(ctx context.Context, in *AuthDisableRequest, opts ...grpc.CallOption) (*AuthDisableResponse, error) { - out := new(AuthDisableResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Auth/AuthDisable", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authClient) Authenticate(ctx context.Context, in *AuthenticateRequest, opts ...grpc.CallOption) (*AuthenticateResponse, error) { - out := new(AuthenticateResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Auth/Authenticate", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authClient) UserAdd(ctx context.Context, in *AuthUserAddRequest, opts ...grpc.CallOption) (*AuthUserAddResponse, error) { - out := new(AuthUserAddResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Auth/UserAdd", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authClient) UserGet(ctx context.Context, in *AuthUserGetRequest, opts ...grpc.CallOption) (*AuthUserGetResponse, error) { - out := new(AuthUserGetResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Auth/UserGet", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authClient) UserList(ctx context.Context, in *AuthUserListRequest, opts ...grpc.CallOption) (*AuthUserListResponse, error) { - out := new(AuthUserListResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Auth/UserList", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authClient) UserDelete(ctx context.Context, in *AuthUserDeleteRequest, opts ...grpc.CallOption) (*AuthUserDeleteResponse, error) { - out := new(AuthUserDeleteResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Auth/UserDelete", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authClient) UserChangePassword(ctx context.Context, in *AuthUserChangePasswordRequest, opts ...grpc.CallOption) (*AuthUserChangePasswordResponse, error) { - out := new(AuthUserChangePasswordResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Auth/UserChangePassword", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authClient) UserGrantRole(ctx context.Context, in *AuthUserGrantRoleRequest, opts ...grpc.CallOption) (*AuthUserGrantRoleResponse, error) { - out := new(AuthUserGrantRoleResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Auth/UserGrantRole", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authClient) UserRevokeRole(ctx context.Context, in *AuthUserRevokeRoleRequest, opts ...grpc.CallOption) (*AuthUserRevokeRoleResponse, error) { - out := new(AuthUserRevokeRoleResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Auth/UserRevokeRole", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authClient) RoleAdd(ctx context.Context, in *AuthRoleAddRequest, opts ...grpc.CallOption) (*AuthRoleAddResponse, error) { - out := new(AuthRoleAddResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Auth/RoleAdd", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authClient) RoleGet(ctx context.Context, in *AuthRoleGetRequest, opts ...grpc.CallOption) (*AuthRoleGetResponse, error) { - out := new(AuthRoleGetResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Auth/RoleGet", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authClient) RoleList(ctx context.Context, in *AuthRoleListRequest, opts ...grpc.CallOption) (*AuthRoleListResponse, error) { - out := new(AuthRoleListResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Auth/RoleList", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authClient) RoleDelete(ctx context.Context, in *AuthRoleDeleteRequest, opts ...grpc.CallOption) (*AuthRoleDeleteResponse, error) { - out := new(AuthRoleDeleteResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Auth/RoleDelete", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authClient) RoleGrantPermission(ctx context.Context, in *AuthRoleGrantPermissionRequest, opts ...grpc.CallOption) (*AuthRoleGrantPermissionResponse, error) { - out := new(AuthRoleGrantPermissionResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Auth/RoleGrantPermission", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authClient) RoleRevokePermission(ctx context.Context, in *AuthRoleRevokePermissionRequest, opts ...grpc.CallOption) (*AuthRoleRevokePermissionResponse, error) { - out := new(AuthRoleRevokePermissionResponse) - err := grpc.Invoke(ctx, "/etcdserverpb.Auth/RoleRevokePermission", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Server API for Auth service - -type AuthServer interface { - // AuthEnable enables authentication. - AuthEnable(context.Context, *AuthEnableRequest) (*AuthEnableResponse, error) - // AuthDisable disables authentication. - AuthDisable(context.Context, *AuthDisableRequest) (*AuthDisableResponse, error) - // Authenticate processes an authenticate request. - Authenticate(context.Context, *AuthenticateRequest) (*AuthenticateResponse, error) - // UserAdd adds a new user. - UserAdd(context.Context, *AuthUserAddRequest) (*AuthUserAddResponse, error) - // UserGet gets detailed user information. - UserGet(context.Context, *AuthUserGetRequest) (*AuthUserGetResponse, error) - // UserList gets a list of all users. - UserList(context.Context, *AuthUserListRequest) (*AuthUserListResponse, error) - // UserDelete deletes a specified user. - UserDelete(context.Context, *AuthUserDeleteRequest) (*AuthUserDeleteResponse, error) - // UserChangePassword changes the password of a specified user. - UserChangePassword(context.Context, *AuthUserChangePasswordRequest) (*AuthUserChangePasswordResponse, error) - // UserGrant grants a role to a specified user. - UserGrantRole(context.Context, *AuthUserGrantRoleRequest) (*AuthUserGrantRoleResponse, error) - // UserRevokeRole revokes a role of specified user. - UserRevokeRole(context.Context, *AuthUserRevokeRoleRequest) (*AuthUserRevokeRoleResponse, error) - // RoleAdd adds a new role. - RoleAdd(context.Context, *AuthRoleAddRequest) (*AuthRoleAddResponse, error) - // RoleGet gets detailed role information. - RoleGet(context.Context, *AuthRoleGetRequest) (*AuthRoleGetResponse, error) - // RoleList gets lists of all roles. - RoleList(context.Context, *AuthRoleListRequest) (*AuthRoleListResponse, error) - // RoleDelete deletes a specified role. - RoleDelete(context.Context, *AuthRoleDeleteRequest) (*AuthRoleDeleteResponse, error) - // RoleGrantPermission grants a permission of a specified key or range to a specified role. - RoleGrantPermission(context.Context, *AuthRoleGrantPermissionRequest) (*AuthRoleGrantPermissionResponse, error) - // RoleRevokePermission revokes a key or range permission of a specified role. - RoleRevokePermission(context.Context, *AuthRoleRevokePermissionRequest) (*AuthRoleRevokePermissionResponse, error) -} - -func RegisterAuthServer(s *grpc.Server, srv AuthServer) { - s.RegisterService(&_Auth_serviceDesc, srv) -} - -func _Auth_AuthEnable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AuthEnableRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthServer).AuthEnable(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Auth/AuthEnable", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthServer).AuthEnable(ctx, req.(*AuthEnableRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Auth_AuthDisable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AuthDisableRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthServer).AuthDisable(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Auth/AuthDisable", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthServer).AuthDisable(ctx, req.(*AuthDisableRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Auth_Authenticate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AuthenticateRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthServer).Authenticate(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Auth/Authenticate", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthServer).Authenticate(ctx, req.(*AuthenticateRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Auth_UserAdd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AuthUserAddRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthServer).UserAdd(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Auth/UserAdd", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthServer).UserAdd(ctx, req.(*AuthUserAddRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Auth_UserGet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AuthUserGetRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthServer).UserGet(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Auth/UserGet", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthServer).UserGet(ctx, req.(*AuthUserGetRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Auth_UserList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AuthUserListRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthServer).UserList(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Auth/UserList", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthServer).UserList(ctx, req.(*AuthUserListRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Auth_UserDelete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AuthUserDeleteRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthServer).UserDelete(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Auth/UserDelete", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthServer).UserDelete(ctx, req.(*AuthUserDeleteRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Auth_UserChangePassword_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AuthUserChangePasswordRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthServer).UserChangePassword(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Auth/UserChangePassword", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthServer).UserChangePassword(ctx, req.(*AuthUserChangePasswordRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Auth_UserGrantRole_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AuthUserGrantRoleRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthServer).UserGrantRole(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Auth/UserGrantRole", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthServer).UserGrantRole(ctx, req.(*AuthUserGrantRoleRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Auth_UserRevokeRole_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AuthUserRevokeRoleRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthServer).UserRevokeRole(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Auth/UserRevokeRole", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthServer).UserRevokeRole(ctx, req.(*AuthUserRevokeRoleRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Auth_RoleAdd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AuthRoleAddRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthServer).RoleAdd(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Auth/RoleAdd", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthServer).RoleAdd(ctx, req.(*AuthRoleAddRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Auth_RoleGet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AuthRoleGetRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthServer).RoleGet(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Auth/RoleGet", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthServer).RoleGet(ctx, req.(*AuthRoleGetRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Auth_RoleList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AuthRoleListRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthServer).RoleList(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Auth/RoleList", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthServer).RoleList(ctx, req.(*AuthRoleListRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Auth_RoleDelete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AuthRoleDeleteRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthServer).RoleDelete(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Auth/RoleDelete", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthServer).RoleDelete(ctx, req.(*AuthRoleDeleteRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Auth_RoleGrantPermission_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AuthRoleGrantPermissionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthServer).RoleGrantPermission(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Auth/RoleGrantPermission", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthServer).RoleGrantPermission(ctx, req.(*AuthRoleGrantPermissionRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Auth_RoleRevokePermission_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AuthRoleRevokePermissionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthServer).RoleRevokePermission(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/etcdserverpb.Auth/RoleRevokePermission", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthServer).RoleRevokePermission(ctx, req.(*AuthRoleRevokePermissionRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _Auth_serviceDesc = grpc.ServiceDesc{ - ServiceName: "etcdserverpb.Auth", - HandlerType: (*AuthServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "AuthEnable", - Handler: _Auth_AuthEnable_Handler, - }, - { - MethodName: "AuthDisable", - Handler: _Auth_AuthDisable_Handler, - }, - { - MethodName: "Authenticate", - Handler: _Auth_Authenticate_Handler, - }, - { - MethodName: "UserAdd", - Handler: _Auth_UserAdd_Handler, - }, - { - MethodName: "UserGet", - Handler: _Auth_UserGet_Handler, - }, - { - MethodName: "UserList", - Handler: _Auth_UserList_Handler, - }, - { - MethodName: "UserDelete", - Handler: _Auth_UserDelete_Handler, - }, - { - MethodName: "UserChangePassword", - Handler: _Auth_UserChangePassword_Handler, - }, - { - MethodName: "UserGrantRole", - Handler: _Auth_UserGrantRole_Handler, - }, - { - MethodName: "UserRevokeRole", - Handler: _Auth_UserRevokeRole_Handler, - }, - { - MethodName: "RoleAdd", - Handler: _Auth_RoleAdd_Handler, - }, - { - MethodName: "RoleGet", - Handler: _Auth_RoleGet_Handler, - }, - { - MethodName: "RoleList", - Handler: _Auth_RoleList_Handler, - }, - { - MethodName: "RoleDelete", - Handler: _Auth_RoleDelete_Handler, - }, - { - MethodName: "RoleGrantPermission", - Handler: _Auth_RoleGrantPermission_Handler, - }, - { - MethodName: "RoleRevokePermission", - Handler: _Auth_RoleRevokePermission_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "rpc.proto", -} - -func (m *ResponseHeader) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ResponseHeader) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.ClusterId != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.ClusterId)) - } - if m.MemberId != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.MemberId)) - } - if m.Revision != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Revision)) - } - if m.RaftTerm != 0 { - dAtA[i] = 0x20 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.RaftTerm)) - } - return i, nil -} - -func (m *RangeRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RangeRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Key) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - } - if len(m.RangeEnd) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.RangeEnd))) - i += copy(dAtA[i:], m.RangeEnd) - } - if m.Limit != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Limit)) - } - if m.Revision != 0 { - dAtA[i] = 0x20 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Revision)) - } - if m.SortOrder != 0 { - dAtA[i] = 0x28 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.SortOrder)) - } - if m.SortTarget != 0 { - dAtA[i] = 0x30 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.SortTarget)) - } - if m.Serializable { - dAtA[i] = 0x38 - i++ - if m.Serializable { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.KeysOnly { - dAtA[i] = 0x40 - i++ - if m.KeysOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.CountOnly { - dAtA[i] = 0x48 - i++ - if m.CountOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.MinModRevision != 0 { - dAtA[i] = 0x50 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.MinModRevision)) - } - if m.MaxModRevision != 0 { - dAtA[i] = 0x58 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.MaxModRevision)) - } - if m.MinCreateRevision != 0 { - dAtA[i] = 0x60 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.MinCreateRevision)) - } - if m.MaxCreateRevision != 0 { - dAtA[i] = 0x68 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.MaxCreateRevision)) - } - return i, nil -} - -func (m *RangeResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RangeResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n1, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if len(m.Kvs) > 0 { - for _, msg := range m.Kvs { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.More { - dAtA[i] = 0x18 - i++ - if m.More { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.Count != 0 { - dAtA[i] = 0x20 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Count)) - } - return i, nil -} - -func (m *PutRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *PutRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Key) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - } - if len(m.Value) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Value))) - i += copy(dAtA[i:], m.Value) - } - if m.Lease != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Lease)) - } - if m.PrevKv { - dAtA[i] = 0x20 - i++ - if m.PrevKv { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.IgnoreValue { - dAtA[i] = 0x28 - i++ - if m.IgnoreValue { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.IgnoreLease { - dAtA[i] = 0x30 - i++ - if m.IgnoreLease { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - return i, nil -} - -func (m *PutResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *PutResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n2, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.PrevKv != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.PrevKv.Size())) - n3, err := m.PrevKv.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - return i, nil -} - -func (m *DeleteRangeRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *DeleteRangeRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Key) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - } - if len(m.RangeEnd) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.RangeEnd))) - i += copy(dAtA[i:], m.RangeEnd) - } - if m.PrevKv { - dAtA[i] = 0x18 - i++ - if m.PrevKv { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - return i, nil -} - -func (m *DeleteRangeResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *DeleteRangeResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n4, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if m.Deleted != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Deleted)) - } - if len(m.PrevKvs) > 0 { - for _, msg := range m.PrevKvs { - dAtA[i] = 0x1a - i++ - i = encodeVarintRpc(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *RequestOp) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RequestOp) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Request != nil { - nn5, err := m.Request.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn5 - } - return i, nil -} - -func (m *RequestOp_RequestRange) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.RequestRange != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.RequestRange.Size())) - n6, err := m.RequestRange.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - return i, nil -} -func (m *RequestOp_RequestPut) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.RequestPut != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.RequestPut.Size())) - n7, err := m.RequestPut.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - } - return i, nil -} -func (m *RequestOp_RequestDeleteRange) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.RequestDeleteRange != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.RequestDeleteRange.Size())) - n8, err := m.RequestDeleteRange.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 - } - return i, nil -} -func (m *ResponseOp) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ResponseOp) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Response != nil { - nn9, err := m.Response.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn9 - } - return i, nil -} - -func (m *ResponseOp_ResponseRange) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.ResponseRange != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.ResponseRange.Size())) - n10, err := m.ResponseRange.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 - } - return i, nil -} -func (m *ResponseOp_ResponsePut) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.ResponsePut != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.ResponsePut.Size())) - n11, err := m.ResponsePut.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n11 - } - return i, nil -} -func (m *ResponseOp_ResponseDeleteRange) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.ResponseDeleteRange != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.ResponseDeleteRange.Size())) - n12, err := m.ResponseDeleteRange.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n12 - } - return i, nil -} -func (m *Compare) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Compare) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Result != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Result)) - } - if m.Target != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Target)) - } - if len(m.Key) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - } - if m.TargetUnion != nil { - nn13, err := m.TargetUnion.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn13 - } - return i, nil -} - -func (m *Compare_Version) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x20 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Version)) - return i, nil -} -func (m *Compare_CreateRevision) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x28 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.CreateRevision)) - return i, nil -} -func (m *Compare_ModRevision) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x30 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.ModRevision)) - return i, nil -} -func (m *Compare_Value) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Value != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Value))) - i += copy(dAtA[i:], m.Value) - } - return i, nil -} -func (m *TxnRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *TxnRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Compare) > 0 { - for _, msg := range m.Compare { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.Success) > 0 { - for _, msg := range m.Success { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.Failure) > 0 { - for _, msg := range m.Failure { - dAtA[i] = 0x1a - i++ - i = encodeVarintRpc(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *TxnResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *TxnResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n14, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n14 - } - if m.Succeeded { - dAtA[i] = 0x10 - i++ - if m.Succeeded { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if len(m.Responses) > 0 { - for _, msg := range m.Responses { - dAtA[i] = 0x1a - i++ - i = encodeVarintRpc(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *CompactionRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *CompactionRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Revision != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Revision)) - } - if m.Physical { - dAtA[i] = 0x10 - i++ - if m.Physical { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - return i, nil -} - -func (m *CompactionResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *CompactionResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n15, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n15 - } - return i, nil -} - -func (m *HashRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HashRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - return i, nil -} - -func (m *HashResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HashResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n16, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n16 - } - if m.Hash != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Hash)) - } - return i, nil -} - -func (m *SnapshotRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *SnapshotRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - return i, nil -} - -func (m *SnapshotResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *SnapshotResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n17, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n17 - } - if m.RemainingBytes != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.RemainingBytes)) - } - if len(m.Blob) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Blob))) - i += copy(dAtA[i:], m.Blob) - } - return i, nil -} - -func (m *WatchRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *WatchRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RequestUnion != nil { - nn18, err := m.RequestUnion.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn18 - } - return i, nil -} - -func (m *WatchRequest_CreateRequest) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.CreateRequest != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.CreateRequest.Size())) - n19, err := m.CreateRequest.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n19 - } - return i, nil -} -func (m *WatchRequest_CancelRequest) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.CancelRequest != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.CancelRequest.Size())) - n20, err := m.CancelRequest.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n20 - } - return i, nil -} -func (m *WatchCreateRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *WatchCreateRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Key) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - } - if len(m.RangeEnd) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.RangeEnd))) - i += copy(dAtA[i:], m.RangeEnd) - } - if m.StartRevision != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.StartRevision)) - } - if m.ProgressNotify { - dAtA[i] = 0x20 - i++ - if m.ProgressNotify { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if len(m.Filters) > 0 { - dAtA22 := make([]byte, len(m.Filters)*10) - var j21 int - for _, num := range m.Filters { - for num >= 1<<7 { - dAtA22[j21] = uint8(uint64(num)&0x7f | 0x80) - num >>= 7 - j21++ - } - dAtA22[j21] = uint8(num) - j21++ - } - dAtA[i] = 0x2a - i++ - i = encodeVarintRpc(dAtA, i, uint64(j21)) - i += copy(dAtA[i:], dAtA22[:j21]) - } - if m.PrevKv { - dAtA[i] = 0x30 - i++ - if m.PrevKv { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - return i, nil -} - -func (m *WatchCancelRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *WatchCancelRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.WatchId != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.WatchId)) - } - return i, nil -} - -func (m *WatchResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *WatchResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n23, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n23 - } - if m.WatchId != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.WatchId)) - } - if m.Created { - dAtA[i] = 0x18 - i++ - if m.Created { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.Canceled { - dAtA[i] = 0x20 - i++ - if m.Canceled { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.CompactRevision != 0 { - dAtA[i] = 0x28 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.CompactRevision)) - } - if len(m.CancelReason) > 0 { - dAtA[i] = 0x32 - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.CancelReason))) - i += copy(dAtA[i:], m.CancelReason) - } - if len(m.Events) > 0 { - for _, msg := range m.Events { - dAtA[i] = 0x5a - i++ - i = encodeVarintRpc(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *LeaseGrantRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *LeaseGrantRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.TTL != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.TTL)) - } - if m.ID != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.ID)) - } - return i, nil -} - -func (m *LeaseGrantResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *LeaseGrantResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n24, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n24 - } - if m.ID != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.ID)) - } - if m.TTL != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.TTL)) - } - if len(m.Error) > 0 { - dAtA[i] = 0x22 - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Error))) - i += copy(dAtA[i:], m.Error) - } - return i, nil -} - -func (m *LeaseRevokeRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *LeaseRevokeRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.ID != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.ID)) - } - return i, nil -} - -func (m *LeaseRevokeResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *LeaseRevokeResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n25, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n25 - } - return i, nil -} - -func (m *LeaseKeepAliveRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *LeaseKeepAliveRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.ID != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.ID)) - } - return i, nil -} - -func (m *LeaseKeepAliveResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *LeaseKeepAliveResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n26, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n26 - } - if m.ID != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.ID)) - } - if m.TTL != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.TTL)) - } - return i, nil -} - -func (m *LeaseTimeToLiveRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *LeaseTimeToLiveRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.ID != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.ID)) - } - if m.Keys { - dAtA[i] = 0x10 - i++ - if m.Keys { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - return i, nil -} - -func (m *LeaseTimeToLiveResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *LeaseTimeToLiveResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n27, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n27 - } - if m.ID != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.ID)) - } - if m.TTL != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.TTL)) - } - if m.GrantedTTL != 0 { - dAtA[i] = 0x20 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.GrantedTTL)) - } - if len(m.Keys) > 0 { - for _, b := range m.Keys { - dAtA[i] = 0x2a - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(b))) - i += copy(dAtA[i:], b) - } - } - return i, nil -} - -func (m *Member) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Member) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.ID != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.ID)) - } - if len(m.Name) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if len(m.PeerURLs) > 0 { - for _, s := range m.PeerURLs { - dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.ClientURLs) > 0 { - for _, s := range m.ClientURLs { - dAtA[i] = 0x22 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - return i, nil -} - -func (m *MemberAddRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MemberAddRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.PeerURLs) > 0 { - for _, s := range m.PeerURLs { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - return i, nil -} - -func (m *MemberAddResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MemberAddResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n28, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n28 - } - if m.Member != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Member.Size())) - n29, err := m.Member.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n29 - } - if len(m.Members) > 0 { - for _, msg := range m.Members { - dAtA[i] = 0x1a - i++ - i = encodeVarintRpc(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *MemberRemoveRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MemberRemoveRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.ID != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.ID)) - } - return i, nil -} - -func (m *MemberRemoveResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MemberRemoveResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n30, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n30 - } - if len(m.Members) > 0 { - for _, msg := range m.Members { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *MemberUpdateRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MemberUpdateRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.ID != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.ID)) - } - if len(m.PeerURLs) > 0 { - for _, s := range m.PeerURLs { - dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - return i, nil -} - -func (m *MemberUpdateResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MemberUpdateResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n31, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n31 - } - if len(m.Members) > 0 { - for _, msg := range m.Members { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *MemberListRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MemberListRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - return i, nil -} - -func (m *MemberListResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MemberListResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n32, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n32 - } - if len(m.Members) > 0 { - for _, msg := range m.Members { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *DefragmentRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *DefragmentRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - return i, nil -} - -func (m *DefragmentResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *DefragmentResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n33, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n33 - } - return i, nil -} - -func (m *AlarmRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AlarmRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Action != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Action)) - } - if m.MemberID != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.MemberID)) - } - if m.Alarm != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Alarm)) - } - return i, nil -} - -func (m *AlarmMember) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AlarmMember) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.MemberID != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.MemberID)) - } - if m.Alarm != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Alarm)) - } - return i, nil -} - -func (m *AlarmResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AlarmResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n34, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n34 - } - if len(m.Alarms) > 0 { - for _, msg := range m.Alarms { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *StatusRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *StatusRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - return i, nil -} - -func (m *StatusResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *StatusResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n35, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n35 - } - if len(m.Version) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Version))) - i += copy(dAtA[i:], m.Version) - } - if m.DbSize != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.DbSize)) - } - if m.Leader != 0 { - dAtA[i] = 0x20 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Leader)) - } - if m.RaftIndex != 0 { - dAtA[i] = 0x28 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.RaftIndex)) - } - if m.RaftTerm != 0 { - dAtA[i] = 0x30 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.RaftTerm)) - } - return i, nil -} - -func (m *AuthEnableRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthEnableRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - return i, nil -} - -func (m *AuthDisableRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthDisableRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - return i, nil -} - -func (m *AuthenticateRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthenticateRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if len(m.Password) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Password))) - i += copy(dAtA[i:], m.Password) - } - return i, nil -} - -func (m *AuthUserAddRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthUserAddRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if len(m.Password) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Password))) - i += copy(dAtA[i:], m.Password) - } - return i, nil -} - -func (m *AuthUserGetRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthUserGetRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - return i, nil -} - -func (m *AuthUserDeleteRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthUserDeleteRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - return i, nil -} - -func (m *AuthUserChangePasswordRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthUserChangePasswordRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if len(m.Password) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Password))) - i += copy(dAtA[i:], m.Password) - } - return i, nil -} - -func (m *AuthUserGrantRoleRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthUserGrantRoleRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.User) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.User))) - i += copy(dAtA[i:], m.User) - } - if len(m.Role) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Role))) - i += copy(dAtA[i:], m.Role) - } - return i, nil -} - -func (m *AuthUserRevokeRoleRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthUserRevokeRoleRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if len(m.Role) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Role))) - i += copy(dAtA[i:], m.Role) - } - return i, nil -} - -func (m *AuthRoleAddRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthRoleAddRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - return i, nil -} - -func (m *AuthRoleGetRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthRoleGetRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Role) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Role))) - i += copy(dAtA[i:], m.Role) - } - return i, nil -} - -func (m *AuthUserListRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthUserListRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - return i, nil -} - -func (m *AuthRoleListRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthRoleListRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - return i, nil -} - -func (m *AuthRoleDeleteRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthRoleDeleteRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Role) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Role))) - i += copy(dAtA[i:], m.Role) - } - return i, nil -} - -func (m *AuthRoleGrantPermissionRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthRoleGrantPermissionRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if m.Perm != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Perm.Size())) - n36, err := m.Perm.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n36 - } - return i, nil -} - -func (m *AuthRoleRevokePermissionRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthRoleRevokePermissionRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Role) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Role))) - i += copy(dAtA[i:], m.Role) - } - if len(m.Key) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - } - if len(m.RangeEnd) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.RangeEnd))) - i += copy(dAtA[i:], m.RangeEnd) - } - return i, nil -} - -func (m *AuthEnableResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthEnableResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n37, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n37 - } - return i, nil -} - -func (m *AuthDisableResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthDisableResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n38, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n38 - } - return i, nil -} - -func (m *AuthenticateResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthenticateResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n39, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n39 - } - if len(m.Token) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(len(m.Token))) - i += copy(dAtA[i:], m.Token) - } - return i, nil -} - -func (m *AuthUserAddResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthUserAddResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n40, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n40 - } - return i, nil -} - -func (m *AuthUserGetResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthUserGetResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n41, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n41 - } - if len(m.Roles) > 0 { - for _, s := range m.Roles { - dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - return i, nil -} - -func (m *AuthUserDeleteResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthUserDeleteResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n42, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n42 - } - return i, nil -} - -func (m *AuthUserChangePasswordResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthUserChangePasswordResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n43, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n43 - } - return i, nil -} - -func (m *AuthUserGrantRoleResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthUserGrantRoleResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n44, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n44 - } - return i, nil -} - -func (m *AuthUserRevokeRoleResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthUserRevokeRoleResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n45, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n45 - } - return i, nil -} - -func (m *AuthRoleAddResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthRoleAddResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n46, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n46 - } - return i, nil -} - -func (m *AuthRoleGetResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthRoleGetResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n47, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n47 - } - if len(m.Perm) > 0 { - for _, msg := range m.Perm { - dAtA[i] = 0x12 - i++ - i = encodeVarintRpc(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *AuthRoleListResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthRoleListResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n48, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n48 - } - if len(m.Roles) > 0 { - for _, s := range m.Roles { - dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - return i, nil -} - -func (m *AuthUserListResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthUserListResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n49, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n49 - } - if len(m.Users) > 0 { - for _, s := range m.Users { - dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - return i, nil -} - -func (m *AuthRoleDeleteResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthRoleDeleteResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n50, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n50 - } - return i, nil -} - -func (m *AuthRoleGrantPermissionResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthRoleGrantPermissionResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n51, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n51 - } - return i, nil -} - -func (m *AuthRoleRevokePermissionResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AuthRoleRevokePermissionResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRpc(dAtA, i, uint64(m.Header.Size())) - n52, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n52 - } - return i, nil -} - -func encodeFixed64Rpc(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Rpc(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintRpc(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *ResponseHeader) Size() (n int) { - var l int - _ = l - if m.ClusterId != 0 { - n += 1 + sovRpc(uint64(m.ClusterId)) - } - if m.MemberId != 0 { - n += 1 + sovRpc(uint64(m.MemberId)) - } - if m.Revision != 0 { - n += 1 + sovRpc(uint64(m.Revision)) - } - if m.RaftTerm != 0 { - n += 1 + sovRpc(uint64(m.RaftTerm)) - } - return n -} - -func (m *RangeRequest) Size() (n int) { - var l int - _ = l - l = len(m.Key) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - l = len(m.RangeEnd) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - if m.Limit != 0 { - n += 1 + sovRpc(uint64(m.Limit)) - } - if m.Revision != 0 { - n += 1 + sovRpc(uint64(m.Revision)) - } - if m.SortOrder != 0 { - n += 1 + sovRpc(uint64(m.SortOrder)) - } - if m.SortTarget != 0 { - n += 1 + sovRpc(uint64(m.SortTarget)) - } - if m.Serializable { - n += 2 - } - if m.KeysOnly { - n += 2 - } - if m.CountOnly { - n += 2 - } - if m.MinModRevision != 0 { - n += 1 + sovRpc(uint64(m.MinModRevision)) - } - if m.MaxModRevision != 0 { - n += 1 + sovRpc(uint64(m.MaxModRevision)) - } - if m.MinCreateRevision != 0 { - n += 1 + sovRpc(uint64(m.MinCreateRevision)) - } - if m.MaxCreateRevision != 0 { - n += 1 + sovRpc(uint64(m.MaxCreateRevision)) - } - return n -} - -func (m *RangeResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - if len(m.Kvs) > 0 { - for _, e := range m.Kvs { - l = e.Size() - n += 1 + l + sovRpc(uint64(l)) - } - } - if m.More { - n += 2 - } - if m.Count != 0 { - n += 1 + sovRpc(uint64(m.Count)) - } - return n -} - -func (m *PutRequest) Size() (n int) { - var l int - _ = l - l = len(m.Key) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - l = len(m.Value) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - if m.Lease != 0 { - n += 1 + sovRpc(uint64(m.Lease)) - } - if m.PrevKv { - n += 2 - } - if m.IgnoreValue { - n += 2 - } - if m.IgnoreLease { - n += 2 - } - return n -} - -func (m *PutResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - if m.PrevKv != nil { - l = m.PrevKv.Size() - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *DeleteRangeRequest) Size() (n int) { - var l int - _ = l - l = len(m.Key) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - l = len(m.RangeEnd) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - if m.PrevKv { - n += 2 - } - return n -} - -func (m *DeleteRangeResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - if m.Deleted != 0 { - n += 1 + sovRpc(uint64(m.Deleted)) - } - if len(m.PrevKvs) > 0 { - for _, e := range m.PrevKvs { - l = e.Size() - n += 1 + l + sovRpc(uint64(l)) - } - } - return n -} - -func (m *RequestOp) Size() (n int) { - var l int - _ = l - if m.Request != nil { - n += m.Request.Size() - } - return n -} - -func (m *RequestOp_RequestRange) Size() (n int) { - var l int - _ = l - if m.RequestRange != nil { - l = m.RequestRange.Size() - n += 1 + l + sovRpc(uint64(l)) - } - return n -} -func (m *RequestOp_RequestPut) Size() (n int) { - var l int - _ = l - if m.RequestPut != nil { - l = m.RequestPut.Size() - n += 1 + l + sovRpc(uint64(l)) - } - return n -} -func (m *RequestOp_RequestDeleteRange) Size() (n int) { - var l int - _ = l - if m.RequestDeleteRange != nil { - l = m.RequestDeleteRange.Size() - n += 1 + l + sovRpc(uint64(l)) - } - return n -} -func (m *ResponseOp) Size() (n int) { - var l int - _ = l - if m.Response != nil { - n += m.Response.Size() - } - return n -} - -func (m *ResponseOp_ResponseRange) Size() (n int) { - var l int - _ = l - if m.ResponseRange != nil { - l = m.ResponseRange.Size() - n += 1 + l + sovRpc(uint64(l)) - } - return n -} -func (m *ResponseOp_ResponsePut) Size() (n int) { - var l int - _ = l - if m.ResponsePut != nil { - l = m.ResponsePut.Size() - n += 1 + l + sovRpc(uint64(l)) - } - return n -} -func (m *ResponseOp_ResponseDeleteRange) Size() (n int) { - var l int - _ = l - if m.ResponseDeleteRange != nil { - l = m.ResponseDeleteRange.Size() - n += 1 + l + sovRpc(uint64(l)) - } - return n -} -func (m *Compare) Size() (n int) { - var l int - _ = l - if m.Result != 0 { - n += 1 + sovRpc(uint64(m.Result)) - } - if m.Target != 0 { - n += 1 + sovRpc(uint64(m.Target)) - } - l = len(m.Key) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - if m.TargetUnion != nil { - n += m.TargetUnion.Size() - } - return n -} - -func (m *Compare_Version) Size() (n int) { - var l int - _ = l - n += 1 + sovRpc(uint64(m.Version)) - return n -} -func (m *Compare_CreateRevision) Size() (n int) { - var l int - _ = l - n += 1 + sovRpc(uint64(m.CreateRevision)) - return n -} -func (m *Compare_ModRevision) Size() (n int) { - var l int - _ = l - n += 1 + sovRpc(uint64(m.ModRevision)) - return n -} -func (m *Compare_Value) Size() (n int) { - var l int - _ = l - if m.Value != nil { - l = len(m.Value) - n += 1 + l + sovRpc(uint64(l)) - } - return n -} -func (m *TxnRequest) Size() (n int) { - var l int - _ = l - if len(m.Compare) > 0 { - for _, e := range m.Compare { - l = e.Size() - n += 1 + l + sovRpc(uint64(l)) - } - } - if len(m.Success) > 0 { - for _, e := range m.Success { - l = e.Size() - n += 1 + l + sovRpc(uint64(l)) - } - } - if len(m.Failure) > 0 { - for _, e := range m.Failure { - l = e.Size() - n += 1 + l + sovRpc(uint64(l)) - } - } - return n -} - -func (m *TxnResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - if m.Succeeded { - n += 2 - } - if len(m.Responses) > 0 { - for _, e := range m.Responses { - l = e.Size() - n += 1 + l + sovRpc(uint64(l)) - } - } - return n -} - -func (m *CompactionRequest) Size() (n int) { - var l int - _ = l - if m.Revision != 0 { - n += 1 + sovRpc(uint64(m.Revision)) - } - if m.Physical { - n += 2 - } - return n -} - -func (m *CompactionResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *HashRequest) Size() (n int) { - var l int - _ = l - return n -} - -func (m *HashResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - if m.Hash != 0 { - n += 1 + sovRpc(uint64(m.Hash)) - } - return n -} - -func (m *SnapshotRequest) Size() (n int) { - var l int - _ = l - return n -} - -func (m *SnapshotResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - if m.RemainingBytes != 0 { - n += 1 + sovRpc(uint64(m.RemainingBytes)) - } - l = len(m.Blob) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *WatchRequest) Size() (n int) { - var l int - _ = l - if m.RequestUnion != nil { - n += m.RequestUnion.Size() - } - return n -} - -func (m *WatchRequest_CreateRequest) Size() (n int) { - var l int - _ = l - if m.CreateRequest != nil { - l = m.CreateRequest.Size() - n += 1 + l + sovRpc(uint64(l)) - } - return n -} -func (m *WatchRequest_CancelRequest) Size() (n int) { - var l int - _ = l - if m.CancelRequest != nil { - l = m.CancelRequest.Size() - n += 1 + l + sovRpc(uint64(l)) - } - return n -} -func (m *WatchCreateRequest) Size() (n int) { - var l int - _ = l - l = len(m.Key) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - l = len(m.RangeEnd) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - if m.StartRevision != 0 { - n += 1 + sovRpc(uint64(m.StartRevision)) - } - if m.ProgressNotify { - n += 2 - } - if len(m.Filters) > 0 { - l = 0 - for _, e := range m.Filters { - l += sovRpc(uint64(e)) - } - n += 1 + sovRpc(uint64(l)) + l - } - if m.PrevKv { - n += 2 - } - return n -} - -func (m *WatchCancelRequest) Size() (n int) { - var l int - _ = l - if m.WatchId != 0 { - n += 1 + sovRpc(uint64(m.WatchId)) - } - return n -} - -func (m *WatchResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - if m.WatchId != 0 { - n += 1 + sovRpc(uint64(m.WatchId)) - } - if m.Created { - n += 2 - } - if m.Canceled { - n += 2 - } - if m.CompactRevision != 0 { - n += 1 + sovRpc(uint64(m.CompactRevision)) - } - l = len(m.CancelReason) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - if len(m.Events) > 0 { - for _, e := range m.Events { - l = e.Size() - n += 1 + l + sovRpc(uint64(l)) - } - } - return n -} - -func (m *LeaseGrantRequest) Size() (n int) { - var l int - _ = l - if m.TTL != 0 { - n += 1 + sovRpc(uint64(m.TTL)) - } - if m.ID != 0 { - n += 1 + sovRpc(uint64(m.ID)) - } - return n -} - -func (m *LeaseGrantResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - if m.ID != 0 { - n += 1 + sovRpc(uint64(m.ID)) - } - if m.TTL != 0 { - n += 1 + sovRpc(uint64(m.TTL)) - } - l = len(m.Error) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *LeaseRevokeRequest) Size() (n int) { - var l int - _ = l - if m.ID != 0 { - n += 1 + sovRpc(uint64(m.ID)) - } - return n -} - -func (m *LeaseRevokeResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *LeaseKeepAliveRequest) Size() (n int) { - var l int - _ = l - if m.ID != 0 { - n += 1 + sovRpc(uint64(m.ID)) - } - return n -} - -func (m *LeaseKeepAliveResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - if m.ID != 0 { - n += 1 + sovRpc(uint64(m.ID)) - } - if m.TTL != 0 { - n += 1 + sovRpc(uint64(m.TTL)) - } - return n -} - -func (m *LeaseTimeToLiveRequest) Size() (n int) { - var l int - _ = l - if m.ID != 0 { - n += 1 + sovRpc(uint64(m.ID)) - } - if m.Keys { - n += 2 - } - return n -} - -func (m *LeaseTimeToLiveResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - if m.ID != 0 { - n += 1 + sovRpc(uint64(m.ID)) - } - if m.TTL != 0 { - n += 1 + sovRpc(uint64(m.TTL)) - } - if m.GrantedTTL != 0 { - n += 1 + sovRpc(uint64(m.GrantedTTL)) - } - if len(m.Keys) > 0 { - for _, b := range m.Keys { - l = len(b) - n += 1 + l + sovRpc(uint64(l)) - } - } - return n -} - -func (m *Member) Size() (n int) { - var l int - _ = l - if m.ID != 0 { - n += 1 + sovRpc(uint64(m.ID)) - } - l = len(m.Name) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - if len(m.PeerURLs) > 0 { - for _, s := range m.PeerURLs { - l = len(s) - n += 1 + l + sovRpc(uint64(l)) - } - } - if len(m.ClientURLs) > 0 { - for _, s := range m.ClientURLs { - l = len(s) - n += 1 + l + sovRpc(uint64(l)) - } - } - return n -} - -func (m *MemberAddRequest) Size() (n int) { - var l int - _ = l - if len(m.PeerURLs) > 0 { - for _, s := range m.PeerURLs { - l = len(s) - n += 1 + l + sovRpc(uint64(l)) - } - } - return n -} - -func (m *MemberAddResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - if m.Member != nil { - l = m.Member.Size() - n += 1 + l + sovRpc(uint64(l)) - } - if len(m.Members) > 0 { - for _, e := range m.Members { - l = e.Size() - n += 1 + l + sovRpc(uint64(l)) - } - } - return n -} - -func (m *MemberRemoveRequest) Size() (n int) { - var l int - _ = l - if m.ID != 0 { - n += 1 + sovRpc(uint64(m.ID)) - } - return n -} - -func (m *MemberRemoveResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - if len(m.Members) > 0 { - for _, e := range m.Members { - l = e.Size() - n += 1 + l + sovRpc(uint64(l)) - } - } - return n -} - -func (m *MemberUpdateRequest) Size() (n int) { - var l int - _ = l - if m.ID != 0 { - n += 1 + sovRpc(uint64(m.ID)) - } - if len(m.PeerURLs) > 0 { - for _, s := range m.PeerURLs { - l = len(s) - n += 1 + l + sovRpc(uint64(l)) - } - } - return n -} - -func (m *MemberUpdateResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - if len(m.Members) > 0 { - for _, e := range m.Members { - l = e.Size() - n += 1 + l + sovRpc(uint64(l)) - } - } - return n -} - -func (m *MemberListRequest) Size() (n int) { - var l int - _ = l - return n -} - -func (m *MemberListResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - if len(m.Members) > 0 { - for _, e := range m.Members { - l = e.Size() - n += 1 + l + sovRpc(uint64(l)) - } - } - return n -} - -func (m *DefragmentRequest) Size() (n int) { - var l int - _ = l - return n -} - -func (m *DefragmentResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *AlarmRequest) Size() (n int) { - var l int - _ = l - if m.Action != 0 { - n += 1 + sovRpc(uint64(m.Action)) - } - if m.MemberID != 0 { - n += 1 + sovRpc(uint64(m.MemberID)) - } - if m.Alarm != 0 { - n += 1 + sovRpc(uint64(m.Alarm)) - } - return n -} - -func (m *AlarmMember) Size() (n int) { - var l int - _ = l - if m.MemberID != 0 { - n += 1 + sovRpc(uint64(m.MemberID)) - } - if m.Alarm != 0 { - n += 1 + sovRpc(uint64(m.Alarm)) - } - return n -} - -func (m *AlarmResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - if len(m.Alarms) > 0 { - for _, e := range m.Alarms { - l = e.Size() - n += 1 + l + sovRpc(uint64(l)) - } - } - return n -} - -func (m *StatusRequest) Size() (n int) { - var l int - _ = l - return n -} - -func (m *StatusResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - l = len(m.Version) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - if m.DbSize != 0 { - n += 1 + sovRpc(uint64(m.DbSize)) - } - if m.Leader != 0 { - n += 1 + sovRpc(uint64(m.Leader)) - } - if m.RaftIndex != 0 { - n += 1 + sovRpc(uint64(m.RaftIndex)) - } - if m.RaftTerm != 0 { - n += 1 + sovRpc(uint64(m.RaftTerm)) - } - return n -} - -func (m *AuthEnableRequest) Size() (n int) { - var l int - _ = l - return n -} - -func (m *AuthDisableRequest) Size() (n int) { - var l int - _ = l - return n -} - -func (m *AuthenticateRequest) Size() (n int) { - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - l = len(m.Password) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *AuthUserAddRequest) Size() (n int) { - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - l = len(m.Password) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *AuthUserGetRequest) Size() (n int) { - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *AuthUserDeleteRequest) Size() (n int) { - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *AuthUserChangePasswordRequest) Size() (n int) { - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - l = len(m.Password) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *AuthUserGrantRoleRequest) Size() (n int) { - var l int - _ = l - l = len(m.User) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - l = len(m.Role) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *AuthUserRevokeRoleRequest) Size() (n int) { - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - l = len(m.Role) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *AuthRoleAddRequest) Size() (n int) { - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *AuthRoleGetRequest) Size() (n int) { - var l int - _ = l - l = len(m.Role) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *AuthUserListRequest) Size() (n int) { - var l int - _ = l - return n -} - -func (m *AuthRoleListRequest) Size() (n int) { - var l int - _ = l - return n -} - -func (m *AuthRoleDeleteRequest) Size() (n int) { - var l int - _ = l - l = len(m.Role) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *AuthRoleGrantPermissionRequest) Size() (n int) { - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - if m.Perm != nil { - l = m.Perm.Size() - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *AuthRoleRevokePermissionRequest) Size() (n int) { - var l int - _ = l - l = len(m.Role) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - l = len(m.Key) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - l = len(m.RangeEnd) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *AuthEnableResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *AuthDisableResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *AuthenticateResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - l = len(m.Token) - if l > 0 { - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *AuthUserAddResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *AuthUserGetResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - if len(m.Roles) > 0 { - for _, s := range m.Roles { - l = len(s) - n += 1 + l + sovRpc(uint64(l)) - } - } - return n -} - -func (m *AuthUserDeleteResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *AuthUserChangePasswordResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *AuthUserGrantRoleResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *AuthUserRevokeRoleResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *AuthRoleAddResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *AuthRoleGetResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - if len(m.Perm) > 0 { - for _, e := range m.Perm { - l = e.Size() - n += 1 + l + sovRpc(uint64(l)) - } - } - return n -} - -func (m *AuthRoleListResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - if len(m.Roles) > 0 { - for _, s := range m.Roles { - l = len(s) - n += 1 + l + sovRpc(uint64(l)) - } - } - return n -} - -func (m *AuthUserListResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - if len(m.Users) > 0 { - for _, s := range m.Users { - l = len(s) - n += 1 + l + sovRpc(uint64(l)) - } - } - return n -} - -func (m *AuthRoleDeleteResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *AuthRoleGrantPermissionResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func (m *AuthRoleRevokePermissionResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRpc(uint64(l)) - } - return n -} - -func sovRpc(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozRpc(x uint64) (n int) { - return sovRpc(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *ResponseHeader) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ResponseHeader: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ResponseHeader: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType) - } - m.ClusterId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ClusterId |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MemberId", wireType) - } - m.MemberId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.MemberId |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Revision", wireType) - } - m.Revision = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Revision |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RaftTerm", wireType) - } - m.RaftTerm = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RaftTerm |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RangeRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RangeRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RangeRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...) - if m.Key == nil { - m.Key = []byte{} - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RangeEnd", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RangeEnd = append(m.RangeEnd[:0], dAtA[iNdEx:postIndex]...) - if m.RangeEnd == nil { - m.RangeEnd = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Limit", wireType) - } - m.Limit = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Limit |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Revision", wireType) - } - m.Revision = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Revision |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field SortOrder", wireType) - } - m.SortOrder = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.SortOrder |= (RangeRequest_SortOrder(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field SortTarget", wireType) - } - m.SortTarget = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.SortTarget |= (RangeRequest_SortTarget(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 7: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Serializable", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Serializable = bool(v != 0) - case 8: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field KeysOnly", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.KeysOnly = bool(v != 0) - case 9: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CountOnly", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.CountOnly = bool(v != 0) - case 10: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MinModRevision", wireType) - } - m.MinModRevision = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.MinModRevision |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 11: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxModRevision", wireType) - } - m.MaxModRevision = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.MaxModRevision |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 12: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MinCreateRevision", wireType) - } - m.MinCreateRevision = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.MinCreateRevision |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 13: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxCreateRevision", wireType) - } - m.MaxCreateRevision = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.MaxCreateRevision |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RangeResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RangeResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RangeResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Kvs", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Kvs = append(m.Kvs, &mvccpb.KeyValue{}) - if err := m.Kvs[len(m.Kvs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field More", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.More = bool(v != 0) - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Count", wireType) - } - m.Count = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Count |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PutRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PutRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PutRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...) - if m.Key == nil { - m.Key = []byte{} - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Value = append(m.Value[:0], dAtA[iNdEx:postIndex]...) - if m.Value == nil { - m.Value = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Lease", wireType) - } - m.Lease = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Lease |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PrevKv", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.PrevKv = bool(v != 0) - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field IgnoreValue", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.IgnoreValue = bool(v != 0) - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field IgnoreLease", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.IgnoreLease = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PutResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PutResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PutResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PrevKv", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.PrevKv == nil { - m.PrevKv = &mvccpb.KeyValue{} - } - if err := m.PrevKv.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *DeleteRangeRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: DeleteRangeRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DeleteRangeRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...) - if m.Key == nil { - m.Key = []byte{} - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RangeEnd", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RangeEnd = append(m.RangeEnd[:0], dAtA[iNdEx:postIndex]...) - if m.RangeEnd == nil { - m.RangeEnd = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PrevKv", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.PrevKv = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *DeleteRangeResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: DeleteRangeResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DeleteRangeResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Deleted", wireType) - } - m.Deleted = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Deleted |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PrevKvs", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PrevKvs = append(m.PrevKvs, &mvccpb.KeyValue{}) - if err := m.PrevKvs[len(m.PrevKvs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RequestOp) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RequestOp: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RequestOp: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestRange", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &RangeRequest{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Request = &RequestOp_RequestRange{v} - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestPut", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &PutRequest{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Request = &RequestOp_RequestPut{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestDeleteRange", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &DeleteRangeRequest{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Request = &RequestOp_RequestDeleteRange{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ResponseOp) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ResponseOp: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ResponseOp: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResponseRange", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &RangeResponse{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Response = &ResponseOp_ResponseRange{v} - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResponsePut", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &PutResponse{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Response = &ResponseOp_ResponsePut{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResponseDeleteRange", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &DeleteRangeResponse{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Response = &ResponseOp_ResponseDeleteRange{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Compare) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Compare: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Compare: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Result", wireType) - } - m.Result = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Result |= (Compare_CompareResult(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Target", wireType) - } - m.Target = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Target |= (Compare_CompareTarget(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...) - if m.Key == nil { - m.Key = []byte{} - } - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) - } - var v int64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.TargetUnion = &Compare_Version{v} - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CreateRevision", wireType) - } - var v int64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.TargetUnion = &Compare_CreateRevision{v} - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ModRevision", wireType) - } - var v int64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.TargetUnion = &Compare_ModRevision{v} - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := make([]byte, postIndex-iNdEx) - copy(v, dAtA[iNdEx:postIndex]) - m.TargetUnion = &Compare_Value{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *TxnRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: TxnRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TxnRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Compare", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Compare = append(m.Compare, &Compare{}) - if err := m.Compare[len(m.Compare)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Success", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Success = append(m.Success, &RequestOp{}) - if err := m.Success[len(m.Success)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Failure", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Failure = append(m.Failure, &RequestOp{}) - if err := m.Failure[len(m.Failure)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *TxnResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: TxnResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TxnResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Succeeded", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Succeeded = bool(v != 0) - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Responses", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Responses = append(m.Responses, &ResponseOp{}) - if err := m.Responses[len(m.Responses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CompactionRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CompactionRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CompactionRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Revision", wireType) - } - m.Revision = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Revision |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Physical", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Physical = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CompactionResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CompactionResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CompactionResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HashRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HashRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HashRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HashResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HashResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HashResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Hash", wireType) - } - m.Hash = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Hash |= (uint32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SnapshotRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SnapshotRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SnapshotRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SnapshotResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SnapshotResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SnapshotResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RemainingBytes", wireType) - } - m.RemainingBytes = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RemainingBytes |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Blob", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Blob = append(m.Blob[:0], dAtA[iNdEx:postIndex]...) - if m.Blob == nil { - m.Blob = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *WatchRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: WatchRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: WatchRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CreateRequest", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &WatchCreateRequest{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.RequestUnion = &WatchRequest_CreateRequest{v} - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CancelRequest", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &WatchCancelRequest{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.RequestUnion = &WatchRequest_CancelRequest{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *WatchCreateRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: WatchCreateRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: WatchCreateRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...) - if m.Key == nil { - m.Key = []byte{} - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RangeEnd", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RangeEnd = append(m.RangeEnd[:0], dAtA[iNdEx:postIndex]...) - if m.RangeEnd == nil { - m.RangeEnd = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StartRevision", wireType) - } - m.StartRevision = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.StartRevision |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ProgressNotify", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.ProgressNotify = bool(v != 0) - case 5: - if wireType == 0 { - var v WatchCreateRequest_FilterType - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (WatchCreateRequest_FilterType(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Filters = append(m.Filters, v) - } else if wireType == 2 { - var packedLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - packedLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if packedLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + packedLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - for iNdEx < postIndex { - var v WatchCreateRequest_FilterType - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (WatchCreateRequest_FilterType(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Filters = append(m.Filters, v) - } - } else { - return fmt.Errorf("proto: wrong wireType = %d for field Filters", wireType) - } - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PrevKv", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.PrevKv = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *WatchCancelRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: WatchCancelRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: WatchCancelRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field WatchId", wireType) - } - m.WatchId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.WatchId |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *WatchResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: WatchResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: WatchResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field WatchId", wireType) - } - m.WatchId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.WatchId |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Created", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Created = bool(v != 0) - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Canceled", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Canceled = bool(v != 0) - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CompactRevision", wireType) - } - m.CompactRevision = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.CompactRevision |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CancelReason", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CancelReason = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Events", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Events = append(m.Events, &mvccpb.Event{}) - if err := m.Events[len(m.Events)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *LeaseGrantRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: LeaseGrantRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LeaseGrantRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TTL", wireType) - } - m.TTL = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.TTL |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - m.ID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ID |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *LeaseGrantResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: LeaseGrantResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LeaseGrantResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - m.ID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ID |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TTL", wireType) - } - m.TTL = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.TTL |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Error = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *LeaseRevokeRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: LeaseRevokeRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LeaseRevokeRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - m.ID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ID |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *LeaseRevokeResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: LeaseRevokeResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LeaseRevokeResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *LeaseKeepAliveRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: LeaseKeepAliveRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LeaseKeepAliveRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - m.ID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ID |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *LeaseKeepAliveResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: LeaseKeepAliveResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LeaseKeepAliveResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - m.ID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ID |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TTL", wireType) - } - m.TTL = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.TTL |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *LeaseTimeToLiveRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: LeaseTimeToLiveRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LeaseTimeToLiveRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - m.ID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ID |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Keys", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Keys = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *LeaseTimeToLiveResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: LeaseTimeToLiveResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LeaseTimeToLiveResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - m.ID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ID |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TTL", wireType) - } - m.TTL = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.TTL |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field GrantedTTL", wireType) - } - m.GrantedTTL = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.GrantedTTL |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Keys", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Keys = append(m.Keys, make([]byte, postIndex-iNdEx)) - copy(m.Keys[len(m.Keys)-1], dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Member) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Member: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Member: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - m.ID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ID |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PeerURLs", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PeerURLs = append(m.PeerURLs, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClientURLs", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ClientURLs = append(m.ClientURLs, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MemberAddRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MemberAddRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MemberAddRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PeerURLs", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PeerURLs = append(m.PeerURLs, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MemberAddResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MemberAddResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MemberAddResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Member", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Member == nil { - m.Member = &Member{} - } - if err := m.Member.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Members", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Members = append(m.Members, &Member{}) - if err := m.Members[len(m.Members)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MemberRemoveRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MemberRemoveRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MemberRemoveRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - m.ID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ID |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MemberRemoveResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MemberRemoveResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MemberRemoveResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Members", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Members = append(m.Members, &Member{}) - if err := m.Members[len(m.Members)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MemberUpdateRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MemberUpdateRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MemberUpdateRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - m.ID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ID |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PeerURLs", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PeerURLs = append(m.PeerURLs, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MemberUpdateResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MemberUpdateResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MemberUpdateResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Members", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Members = append(m.Members, &Member{}) - if err := m.Members[len(m.Members)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MemberListRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MemberListRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MemberListRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MemberListResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MemberListResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MemberListResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Members", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Members = append(m.Members, &Member{}) - if err := m.Members[len(m.Members)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *DefragmentRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: DefragmentRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DefragmentRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *DefragmentResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: DefragmentResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DefragmentResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AlarmRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AlarmRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AlarmRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Action", wireType) - } - m.Action = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Action |= (AlarmRequest_AlarmAction(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MemberID", wireType) - } - m.MemberID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.MemberID |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Alarm", wireType) - } - m.Alarm = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Alarm |= (AlarmType(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AlarmMember) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AlarmMember: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AlarmMember: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MemberID", wireType) - } - m.MemberID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.MemberID |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Alarm", wireType) - } - m.Alarm = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Alarm |= (AlarmType(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AlarmResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AlarmResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AlarmResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Alarms", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Alarms = append(m.Alarms, &AlarmMember{}) - if err := m.Alarms[len(m.Alarms)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *StatusRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: StatusRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: StatusRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *StatusResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: StatusResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: StatusResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Version = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field DbSize", wireType) - } - m.DbSize = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.DbSize |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Leader", wireType) - } - m.Leader = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Leader |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RaftIndex", wireType) - } - m.RaftIndex = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RaftIndex |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RaftTerm", wireType) - } - m.RaftTerm = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RaftTerm |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthEnableRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthEnableRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthEnableRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthDisableRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthDisableRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthDisableRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthenticateRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthenticateRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthenticateRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Password", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Password = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthUserAddRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthUserAddRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthUserAddRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Password", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Password = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthUserGetRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthUserGetRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthUserGetRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthUserDeleteRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthUserDeleteRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthUserDeleteRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthUserChangePasswordRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthUserChangePasswordRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthUserChangePasswordRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Password", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Password = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthUserGrantRoleRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthUserGrantRoleRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthUserGrantRoleRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.User = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Role = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthUserRevokeRoleRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthUserRevokeRoleRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthUserRevokeRoleRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Role = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthRoleAddRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthRoleAddRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthRoleAddRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthRoleGetRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthRoleGetRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthRoleGetRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Role = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthUserListRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthUserListRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthUserListRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthRoleListRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthRoleListRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthRoleListRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthRoleDeleteRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthRoleDeleteRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthRoleDeleteRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Role = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthRoleGrantPermissionRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthRoleGrantPermissionRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthRoleGrantPermissionRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Perm", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Perm == nil { - m.Perm = &authpb.Permission{} - } - if err := m.Perm.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthRoleRevokePermissionRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthRoleRevokePermissionRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthRoleRevokePermissionRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Role = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RangeEnd", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RangeEnd = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthEnableResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthEnableResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthEnableResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthDisableResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthDisableResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthDisableResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthenticateResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthenticateResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthenticateResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Token", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Token = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthUserAddResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthUserAddResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthUserAddResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthUserGetResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthUserGetResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthUserGetResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Roles", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Roles = append(m.Roles, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthUserDeleteResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthUserDeleteResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthUserDeleteResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthUserChangePasswordResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthUserChangePasswordResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthUserChangePasswordResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthUserGrantRoleResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthUserGrantRoleResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthUserGrantRoleResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthUserRevokeRoleResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthUserRevokeRoleResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthUserRevokeRoleResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthRoleAddResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthRoleAddResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthRoleAddResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthRoleGetResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthRoleGetResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthRoleGetResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Perm", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Perm = append(m.Perm, &authpb.Permission{}) - if err := m.Perm[len(m.Perm)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthRoleListResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthRoleListResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthRoleListResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Roles", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Roles = append(m.Roles, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthUserListResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthUserListResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthUserListResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Users", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Users = append(m.Users, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthRoleDeleteResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthRoleDeleteResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthRoleDeleteResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthRoleGrantPermissionResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthRoleGrantPermissionResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthRoleGrantPermissionResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AuthRoleRevokePermissionResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AuthRoleRevokePermissionResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AuthRoleRevokePermissionResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRpc - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRpc(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRpc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipRpc(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRpc - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRpc - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRpc - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - iNdEx += length - if length < 0 { - return 0, ErrInvalidLengthRpc - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRpc - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipRpc(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthRpc = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowRpc = fmt.Errorf("proto: integer overflow") -) - -func init() { proto.RegisterFile("rpc.proto", fileDescriptorRpc) } - -var fileDescriptorRpc = []byte{ - // 3450 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x3b, 0x5b, 0x6f, 0x1b, 0xc7, - 0xb9, 0x5a, 0x5e, 0xc5, 0x8f, 0x17, 0xd1, 0x23, 0xd9, 0xa6, 0x68, 0x5b, 0x96, 0xc7, 0x37, 0xd9, - 0x4e, 0xa4, 0x44, 0xc9, 0x39, 0x0f, 0x3e, 0x41, 0x70, 0x64, 0x89, 0xb1, 0x74, 0x24, 0x4b, 0xce, - 0x4a, 0x76, 0x72, 0x80, 0xa0, 0xc4, 0x8a, 0x1c, 0x53, 0x0b, 0x91, 0xbb, 0xcc, 0xee, 0x92, 0x96, - 0xd2, 0x14, 0x28, 0xd2, 0x04, 0x45, 0x0b, 0xf4, 0xa5, 0x79, 0xe8, 0xed, 0xb1, 0x28, 0x8a, 0xfc, - 0x80, 0xbe, 0xf5, 0x07, 0x14, 0x7d, 0x69, 0x81, 0xfe, 0x81, 0x22, 0xed, 0x63, 0xdf, 0xfb, 0x54, - 0xb4, 0x98, 0xdb, 0xee, 0xec, 0x72, 0x97, 0x52, 0xca, 0x26, 0x2f, 0xd6, 0xce, 0x37, 0xdf, 0x7c, - 0xb7, 0x99, 0xef, 0x32, 0xdf, 0xd0, 0x50, 0x70, 0xfa, 0xad, 0xe5, 0xbe, 0x63, 0x7b, 0x36, 0x2a, - 0x11, 0xaf, 0xd5, 0x76, 0x89, 0x33, 0x24, 0x4e, 0xff, 0xb0, 0x3e, 0xd7, 0xb1, 0x3b, 0x36, 0x9b, - 0x58, 0xa1, 0x5f, 0x1c, 0xa7, 0x3e, 0x4f, 0x71, 0x56, 0x7a, 0xc3, 0x56, 0x8b, 0xfd, 0xd3, 0x3f, - 0x5c, 0x39, 0x1e, 0x8a, 0xa9, 0x2b, 0x6c, 0xca, 0x18, 0x78, 0x47, 0xec, 0x9f, 0xfe, 0x21, 0xfb, - 0x23, 0x26, 0xaf, 0x76, 0x6c, 0xbb, 0xd3, 0x25, 0x2b, 0x46, 0xdf, 0x5c, 0x31, 0x2c, 0xcb, 0xf6, - 0x0c, 0xcf, 0xb4, 0x2d, 0x97, 0xcf, 0xe2, 0xcf, 0x34, 0xa8, 0xe8, 0xc4, 0xed, 0xdb, 0x96, 0x4b, - 0x36, 0x89, 0xd1, 0x26, 0x0e, 0xba, 0x06, 0xd0, 0xea, 0x0e, 0x5c, 0x8f, 0x38, 0x4d, 0xb3, 0x5d, - 0xd3, 0x16, 0xb5, 0xa5, 0x8c, 0x5e, 0x10, 0x90, 0xad, 0x36, 0xba, 0x02, 0x85, 0x1e, 0xe9, 0x1d, - 0xf2, 0xd9, 0x14, 0x9b, 0x9d, 0xe6, 0x80, 0xad, 0x36, 0xaa, 0xc3, 0xb4, 0x43, 0x86, 0xa6, 0x6b, - 0xda, 0x56, 0x2d, 0xbd, 0xa8, 0x2d, 0xa5, 0x75, 0x7f, 0x4c, 0x17, 0x3a, 0xc6, 0x0b, 0xaf, 0xe9, - 0x11, 0xa7, 0x57, 0xcb, 0xf0, 0x85, 0x14, 0x70, 0x40, 0x9c, 0x1e, 0xfe, 0x34, 0x0b, 0x25, 0xdd, - 0xb0, 0x3a, 0x44, 0x27, 0x1f, 0x0e, 0x88, 0xeb, 0xa1, 0x2a, 0xa4, 0x8f, 0xc9, 0x29, 0x63, 0x5f, - 0xd2, 0xe9, 0x27, 0x5f, 0x6f, 0x75, 0x48, 0x93, 0x58, 0x9c, 0x71, 0x89, 0xae, 0xb7, 0x3a, 0xa4, - 0x61, 0xb5, 0xd1, 0x1c, 0x64, 0xbb, 0x66, 0xcf, 0xf4, 0x04, 0x57, 0x3e, 0x08, 0x89, 0x93, 0x89, - 0x88, 0xb3, 0x0e, 0xe0, 0xda, 0x8e, 0xd7, 0xb4, 0x9d, 0x36, 0x71, 0x6a, 0xd9, 0x45, 0x6d, 0xa9, - 0xb2, 0x7a, 0x6b, 0x59, 0xdd, 0x88, 0x65, 0x55, 0xa0, 0xe5, 0x7d, 0xdb, 0xf1, 0xf6, 0x28, 0xae, - 0x5e, 0x70, 0xe5, 0x27, 0x7a, 0x07, 0x8a, 0x8c, 0x88, 0x67, 0x38, 0x1d, 0xe2, 0xd5, 0x72, 0x8c, - 0xca, 0xed, 0x33, 0xa8, 0x1c, 0x30, 0x64, 0x9d, 0xb1, 0xe7, 0xdf, 0x08, 0x43, 0xc9, 0x25, 0x8e, - 0x69, 0x74, 0xcd, 0x8f, 0x8c, 0xc3, 0x2e, 0xa9, 0xe5, 0x17, 0xb5, 0xa5, 0x69, 0x3d, 0x04, 0xa3, - 0xfa, 0x1f, 0x93, 0x53, 0xb7, 0x69, 0x5b, 0xdd, 0xd3, 0xda, 0x34, 0x43, 0x98, 0xa6, 0x80, 0x3d, - 0xab, 0x7b, 0xca, 0x36, 0xcd, 0x1e, 0x58, 0x1e, 0x9f, 0x2d, 0xb0, 0xd9, 0x02, 0x83, 0xb0, 0xe9, - 0x25, 0xa8, 0xf6, 0x4c, 0xab, 0xd9, 0xb3, 0xdb, 0x4d, 0xdf, 0x20, 0xc0, 0x0c, 0x52, 0xe9, 0x99, - 0xd6, 0x13, 0xbb, 0xad, 0x4b, 0xb3, 0x50, 0x4c, 0xe3, 0x24, 0x8c, 0x59, 0x14, 0x98, 0xc6, 0x89, - 0x8a, 0xb9, 0x0c, 0xb3, 0x94, 0x66, 0xcb, 0x21, 0x86, 0x47, 0x02, 0xe4, 0x12, 0x43, 0xbe, 0xd0, - 0x33, 0xad, 0x75, 0x36, 0x13, 0xc2, 0x37, 0x4e, 0x46, 0xf0, 0xcb, 0x02, 0xdf, 0x38, 0x09, 0xe3, - 0xe3, 0x65, 0x28, 0xf8, 0x36, 0x47, 0xd3, 0x90, 0xd9, 0xdd, 0xdb, 0x6d, 0x54, 0xa7, 0x10, 0x40, - 0x6e, 0x6d, 0x7f, 0xbd, 0xb1, 0xbb, 0x51, 0xd5, 0x50, 0x11, 0xf2, 0x1b, 0x0d, 0x3e, 0x48, 0xe1, - 0x47, 0x00, 0x81, 0x75, 0x51, 0x1e, 0xd2, 0xdb, 0x8d, 0xff, 0xaf, 0x4e, 0x51, 0x9c, 0xe7, 0x0d, - 0x7d, 0x7f, 0x6b, 0x6f, 0xb7, 0xaa, 0xd1, 0xc5, 0xeb, 0x7a, 0x63, 0xed, 0xa0, 0x51, 0x4d, 0x51, - 0x8c, 0x27, 0x7b, 0x1b, 0xd5, 0x34, 0x2a, 0x40, 0xf6, 0xf9, 0xda, 0xce, 0xb3, 0x46, 0x35, 0x83, - 0x3f, 0xd7, 0xa0, 0x2c, 0xf6, 0x8b, 0xfb, 0x04, 0x7a, 0x13, 0x72, 0x47, 0xcc, 0x2f, 0xd8, 0x51, - 0x2c, 0xae, 0x5e, 0x8d, 0x6c, 0x6e, 0xc8, 0x77, 0x74, 0x81, 0x8b, 0x30, 0xa4, 0x8f, 0x87, 0x6e, - 0x2d, 0xb5, 0x98, 0x5e, 0x2a, 0xae, 0x56, 0x97, 0xb9, 0xc3, 0x2e, 0x6f, 0x93, 0xd3, 0xe7, 0x46, - 0x77, 0x40, 0x74, 0x3a, 0x89, 0x10, 0x64, 0x7a, 0xb6, 0x43, 0xd8, 0x89, 0x9d, 0xd6, 0xd9, 0x37, - 0x3d, 0xc6, 0x6c, 0xd3, 0xc4, 0x69, 0xe5, 0x03, 0xfc, 0x85, 0x06, 0xf0, 0x74, 0xe0, 0x25, 0xbb, - 0xc6, 0x1c, 0x64, 0x87, 0x94, 0xb0, 0x70, 0x0b, 0x3e, 0x60, 0x3e, 0x41, 0x0c, 0x97, 0xf8, 0x3e, - 0x41, 0x07, 0xe8, 0x32, 0xe4, 0xfb, 0x0e, 0x19, 0x36, 0x8f, 0x87, 0x8c, 0xc9, 0xb4, 0x9e, 0xa3, - 0xc3, 0xed, 0x21, 0xba, 0x01, 0x25, 0xb3, 0x63, 0xd9, 0x0e, 0x69, 0x72, 0x5a, 0x59, 0x36, 0x5b, - 0xe4, 0x30, 0x26, 0xb7, 0x82, 0xc2, 0x09, 0xe7, 0x54, 0x94, 0x1d, 0x0a, 0xc2, 0x16, 0x14, 0x99, - 0xa8, 0x13, 0x99, 0xef, 0x5e, 0x20, 0x63, 0x8a, 0x2d, 0x1b, 0x35, 0xa1, 0x90, 0x1a, 0x7f, 0x00, - 0x68, 0x83, 0x74, 0x89, 0x47, 0x26, 0x89, 0x1e, 0x8a, 0x4d, 0xd2, 0xaa, 0x4d, 0xf0, 0x8f, 0x35, - 0x98, 0x0d, 0x91, 0x9f, 0x48, 0xad, 0x1a, 0xe4, 0xdb, 0x8c, 0x18, 0x97, 0x20, 0xad, 0xcb, 0x21, - 0x7a, 0x00, 0xd3, 0x42, 0x00, 0xb7, 0x96, 0x4e, 0x38, 0x34, 0x79, 0x2e, 0x93, 0x8b, 0xff, 0xa6, - 0x41, 0x41, 0x28, 0xba, 0xd7, 0x47, 0x6b, 0x50, 0x76, 0xf8, 0xa0, 0xc9, 0xf4, 0x11, 0x12, 0xd5, - 0x93, 0x83, 0xd0, 0xe6, 0x94, 0x5e, 0x12, 0x4b, 0x18, 0x18, 0xfd, 0x0f, 0x14, 0x25, 0x89, 0xfe, - 0xc0, 0x13, 0x26, 0xaf, 0x85, 0x09, 0x04, 0xe7, 0x6f, 0x73, 0x4a, 0x07, 0x81, 0xfe, 0x74, 0xe0, - 0xa1, 0x03, 0x98, 0x93, 0x8b, 0xb9, 0x36, 0x42, 0x8c, 0x34, 0xa3, 0xb2, 0x18, 0xa6, 0x32, 0xba, - 0x55, 0x9b, 0x53, 0x3a, 0x12, 0xeb, 0x95, 0xc9, 0x47, 0x05, 0xc8, 0x0b, 0x28, 0xfe, 0xbb, 0x06, - 0x20, 0x0d, 0xba, 0xd7, 0x47, 0x1b, 0x50, 0x71, 0xc4, 0x28, 0xa4, 0xf0, 0x95, 0x58, 0x85, 0xc5, - 0x3e, 0x4c, 0xe9, 0x65, 0xb9, 0x88, 0xab, 0xfc, 0x36, 0x94, 0x7c, 0x2a, 0x81, 0xce, 0xf3, 0x31, - 0x3a, 0xfb, 0x14, 0x8a, 0x72, 0x01, 0xd5, 0xfa, 0x3d, 0xb8, 0xe8, 0xaf, 0x8f, 0x51, 0xfb, 0xc6, - 0x18, 0xb5, 0x7d, 0x82, 0xb3, 0x92, 0x82, 0xaa, 0x38, 0xd0, 0x94, 0xc5, 0xc1, 0xf8, 0x8b, 0x34, - 0xe4, 0xd7, 0xed, 0x5e, 0xdf, 0x70, 0xe8, 0x1e, 0xe5, 0x1c, 0xe2, 0x0e, 0xba, 0x1e, 0x53, 0xb7, - 0xb2, 0x7a, 0x33, 0xcc, 0x41, 0xa0, 0xc9, 0xbf, 0x3a, 0x43, 0xd5, 0xc5, 0x12, 0xba, 0x58, 0x64, - 0xa8, 0xd4, 0x39, 0x16, 0x8b, 0xfc, 0x24, 0x96, 0x48, 0x5f, 0x4a, 0x07, 0xbe, 0x54, 0x87, 0xfc, - 0x90, 0x38, 0x41, 0x56, 0xdd, 0x9c, 0xd2, 0x25, 0x00, 0xdd, 0x83, 0x99, 0x68, 0x84, 0xcf, 0x0a, - 0x9c, 0x4a, 0x2b, 0x9c, 0x10, 0x6e, 0x42, 0x29, 0x94, 0x66, 0x72, 0x02, 0xaf, 0xd8, 0x53, 0xb2, - 0xcc, 0x25, 0x19, 0xda, 0x68, 0x4a, 0x2c, 0x6d, 0x4e, 0x89, 0xe0, 0x86, 0xff, 0x17, 0xca, 0x21, - 0x5d, 0x69, 0x14, 0x6f, 0xbc, 0xfb, 0x6c, 0x6d, 0x87, 0x87, 0xfc, 0xc7, 0x2c, 0xca, 0xeb, 0x55, - 0x8d, 0x66, 0x8e, 0x9d, 0xc6, 0xfe, 0x7e, 0x35, 0x85, 0xca, 0x50, 0xd8, 0xdd, 0x3b, 0x68, 0x72, - 0xac, 0x34, 0x7e, 0xcb, 0xa7, 0x20, 0x52, 0x86, 0x92, 0x29, 0xa6, 0x94, 0x4c, 0xa1, 0xc9, 0x4c, - 0x91, 0x0a, 0x32, 0x45, 0xfa, 0x51, 0x05, 0x4a, 0xdc, 0x3e, 0xcd, 0x81, 0x45, 0xb3, 0xd5, 0x2f, - 0x35, 0x80, 0x83, 0x13, 0x4b, 0x06, 0xa0, 0x15, 0xc8, 0xb7, 0x38, 0xf1, 0x9a, 0xc6, 0xfc, 0xf9, - 0x62, 0xac, 0xc9, 0x75, 0x89, 0x85, 0x5e, 0x87, 0xbc, 0x3b, 0x68, 0xb5, 0x88, 0x2b, 0xb3, 0xc6, - 0xe5, 0x68, 0x48, 0x11, 0x0e, 0xaf, 0x4b, 0x3c, 0xba, 0xe4, 0x85, 0x61, 0x76, 0x07, 0x2c, 0x87, - 0x8c, 0x5f, 0x22, 0xf0, 0xf0, 0xcf, 0x34, 0x28, 0x32, 0x29, 0x27, 0x8a, 0x63, 0x57, 0xa1, 0xc0, - 0x64, 0x20, 0x6d, 0x11, 0xc9, 0xa6, 0xf5, 0x00, 0x80, 0xfe, 0x1b, 0x0a, 0xf2, 0x04, 0xcb, 0x60, - 0x56, 0x8b, 0x27, 0xbb, 0xd7, 0xd7, 0x03, 0x54, 0xbc, 0x0d, 0x17, 0x98, 0x55, 0x5a, 0xb4, 0x3e, - 0x95, 0x76, 0x54, 0x2b, 0x38, 0x2d, 0x52, 0xc1, 0xd5, 0x61, 0xba, 0x7f, 0x74, 0xea, 0x9a, 0x2d, - 0xa3, 0x2b, 0xa4, 0xf0, 0xc7, 0xf8, 0xff, 0x00, 0xa9, 0xc4, 0x26, 0x51, 0x17, 0x97, 0xa1, 0xb8, - 0x69, 0xb8, 0x47, 0x42, 0x24, 0xfc, 0x3e, 0x94, 0xf8, 0x70, 0x22, 0x1b, 0x22, 0xc8, 0x1c, 0x19, - 0xee, 0x11, 0x13, 0xbc, 0xac, 0xb3, 0x6f, 0x7c, 0x01, 0x66, 0xf6, 0x2d, 0xa3, 0xef, 0x1e, 0xd9, - 0x32, 0xd6, 0xd2, 0xfa, 0xbc, 0x1a, 0xc0, 0x26, 0xe2, 0x78, 0x17, 0x66, 0x1c, 0xd2, 0x33, 0x4c, - 0xcb, 0xb4, 0x3a, 0xcd, 0xc3, 0x53, 0x8f, 0xb8, 0xa2, 0x7c, 0xaf, 0xf8, 0xe0, 0x47, 0x14, 0x4a, - 0x45, 0x3b, 0xec, 0xda, 0x87, 0xc2, 0xe3, 0xd9, 0x37, 0xfe, 0x8d, 0x06, 0xa5, 0xf7, 0x0c, 0xaf, - 0x25, 0xad, 0x80, 0xb6, 0xa0, 0xe2, 0xfb, 0x39, 0x83, 0x08, 0x59, 0x22, 0x01, 0x9f, 0xad, 0x91, - 0x85, 0x9d, 0x0c, 0xf8, 0xe5, 0x96, 0x0a, 0x60, 0xa4, 0x0c, 0xab, 0x45, 0xba, 0x3e, 0xa9, 0x54, - 0x32, 0x29, 0x86, 0xa8, 0x92, 0x52, 0x01, 0x8f, 0x66, 0x82, 0x64, 0xc8, 0xdd, 0xf2, 0xe7, 0x29, - 0x40, 0xa3, 0x32, 0x7c, 0xd5, 0xfa, 0xe0, 0x36, 0x54, 0x5c, 0xcf, 0x70, 0xbc, 0x66, 0xe4, 0x72, - 0x53, 0x66, 0x50, 0x3f, 0x56, 0xdd, 0x85, 0x99, 0xbe, 0x63, 0x77, 0x1c, 0xe2, 0xba, 0x4d, 0xcb, - 0xf6, 0xcc, 0x17, 0xa7, 0xa2, 0xc4, 0xaa, 0x48, 0xf0, 0x2e, 0x83, 0xa2, 0x06, 0xe4, 0x5f, 0x98, - 0x5d, 0x8f, 0x38, 0x6e, 0x2d, 0xbb, 0x98, 0x5e, 0xaa, 0xac, 0x3e, 0x38, 0xcb, 0x6a, 0xcb, 0xef, - 0x30, 0xfc, 0x83, 0xd3, 0x3e, 0xd1, 0xe5, 0x5a, 0xb5, 0x6c, 0xc9, 0x85, 0xca, 0x96, 0xdb, 0x00, - 0x01, 0x3e, 0x8d, 0x5a, 0xbb, 0x7b, 0x4f, 0x9f, 0x1d, 0x54, 0xa7, 0x50, 0x09, 0xa6, 0x77, 0xf7, - 0x36, 0x1a, 0x3b, 0x0d, 0x1a, 0xd7, 0xf0, 0x8a, 0xb4, 0x8d, 0x6a, 0x43, 0x34, 0x0f, 0xd3, 0x2f, - 0x29, 0x54, 0xde, 0xfe, 0xd2, 0x7a, 0x9e, 0x8d, 0xb7, 0xda, 0xf8, 0x47, 0x29, 0x28, 0x8b, 0x53, - 0x30, 0xd1, 0x51, 0x54, 0x59, 0xa4, 0x42, 0x2c, 0x68, 0x8d, 0xc4, 0x4f, 0x47, 0x5b, 0x94, 0x62, - 0x72, 0x48, 0xdd, 0x9d, 0x6f, 0x36, 0x69, 0x0b, 0xb3, 0xfa, 0x63, 0x74, 0x0f, 0xaa, 0x2d, 0xee, - 0xee, 0x91, 0xb4, 0xa3, 0xcf, 0x08, 0xb8, 0x92, 0x75, 0xca, 0xfe, 0x69, 0x33, 0x5c, 0x91, 0x76, - 0x0a, 0x7a, 0x49, 0x1e, 0x24, 0x0a, 0x43, 0xb7, 0x21, 0x47, 0x86, 0xc4, 0xf2, 0xdc, 0x5a, 0x91, - 0x05, 0xb0, 0xb2, 0xac, 0xc6, 0x1a, 0x14, 0xaa, 0x8b, 0x49, 0xfc, 0x5f, 0x70, 0x81, 0x55, 0xbd, - 0x8f, 0x1d, 0xc3, 0x52, 0xcb, 0xf3, 0x83, 0x83, 0x1d, 0x61, 0x3a, 0xfa, 0x89, 0x2a, 0x90, 0xda, - 0xda, 0x10, 0x8a, 0xa6, 0xb6, 0x36, 0xf0, 0x27, 0x1a, 0x20, 0x75, 0xdd, 0x44, 0xb6, 0x8c, 0x10, - 0x97, 0xec, 0xd3, 0x01, 0xfb, 0x39, 0xc8, 0x12, 0xc7, 0xb1, 0x1d, 0x66, 0xb5, 0x82, 0xce, 0x07, - 0xf8, 0x96, 0x90, 0x41, 0x27, 0x43, 0xfb, 0xd8, 0x77, 0x0c, 0x4e, 0x4d, 0xf3, 0x45, 0xdd, 0x86, - 0xd9, 0x10, 0xd6, 0x44, 0x81, 0xf4, 0x2e, 0x5c, 0x64, 0xc4, 0xb6, 0x09, 0xe9, 0xaf, 0x75, 0xcd, - 0x61, 0x22, 0xd7, 0x3e, 0x5c, 0x8a, 0x22, 0x7e, 0xbd, 0x36, 0xc2, 0x6f, 0x09, 0x8e, 0x07, 0x66, - 0x8f, 0x1c, 0xd8, 0x3b, 0xc9, 0xb2, 0xd1, 0xe8, 0x48, 0x6f, 0xdd, 0x22, 0xe3, 0xb0, 0x6f, 0xfc, - 0x2b, 0x0d, 0x2e, 0x8f, 0x2c, 0xff, 0x9a, 0x77, 0x75, 0x01, 0xa0, 0x43, 0x8f, 0x0f, 0x69, 0xd3, - 0x09, 0x7e, 0x5f, 0x54, 0x20, 0xbe, 0x9c, 0x34, 0xc0, 0x94, 0x84, 0x9c, 0x47, 0x90, 0x7b, 0xc2, - 0x5a, 0x35, 0x8a, 0x56, 0x19, 0xa9, 0x95, 0x65, 0xf4, 0xf8, 0x05, 0xb2, 0xa0, 0xb3, 0x6f, 0x96, - 0x5f, 0x09, 0x71, 0x9e, 0xe9, 0x3b, 0x3c, 0x8f, 0x17, 0x74, 0x7f, 0x4c, 0xb9, 0xb7, 0xba, 0x26, - 0xb1, 0x3c, 0x36, 0x9b, 0x61, 0xb3, 0x0a, 0x04, 0x2f, 0x43, 0x95, 0x73, 0x5a, 0x6b, 0xb7, 0x95, - 0x5c, 0xee, 0xd3, 0xd3, 0xc2, 0xf4, 0xf0, 0xaf, 0x35, 0xb8, 0xa0, 0x2c, 0x98, 0xc8, 0x76, 0xaf, - 0x40, 0x8e, 0x37, 0xa4, 0x44, 0x1e, 0x99, 0x0b, 0xaf, 0xe2, 0x6c, 0x74, 0x81, 0x83, 0x96, 0x21, - 0xcf, 0xbf, 0x64, 0xb1, 0x12, 0x8f, 0x2e, 0x91, 0xf0, 0x6d, 0x98, 0x15, 0x20, 0xd2, 0xb3, 0xe3, - 0x8e, 0x09, 0x33, 0x28, 0xfe, 0x18, 0xe6, 0xc2, 0x68, 0x13, 0xa9, 0xa4, 0x08, 0x99, 0x3a, 0x8f, - 0x90, 0x6b, 0x52, 0xc8, 0x67, 0xfd, 0xb6, 0x92, 0xf6, 0xa2, 0xbb, 0xae, 0xee, 0x48, 0x2a, 0xb2, - 0x23, 0xbe, 0x02, 0x92, 0xc4, 0x37, 0xaa, 0xc0, 0xac, 0x3c, 0x0e, 0x3b, 0xa6, 0xeb, 0x17, 0x43, - 0x1f, 0x01, 0x52, 0x81, 0xdf, 0xb4, 0x40, 0x1b, 0xe4, 0x85, 0x63, 0x74, 0x7a, 0xc4, 0x0f, 0xf5, - 0xb4, 0xca, 0x54, 0x81, 0x13, 0x05, 0xc7, 0x3f, 0x68, 0x50, 0x5a, 0xeb, 0x1a, 0x4e, 0x4f, 0x6e, - 0xd6, 0xdb, 0x90, 0xe3, 0xe5, 0xab, 0xb8, 0xf1, 0xdd, 0x09, 0x93, 0x51, 0x71, 0xf9, 0x60, 0x8d, - 0x17, 0xbb, 0x62, 0x15, 0xdd, 0x5c, 0xd1, 0x97, 0xdd, 0x88, 0xf4, 0x69, 0x37, 0xd0, 0xab, 0x90, - 0x35, 0xe8, 0x12, 0x16, 0x50, 0x2a, 0xd1, 0x8b, 0x03, 0xa3, 0xc6, 0x4a, 0x0d, 0x8e, 0x85, 0xdf, - 0x84, 0xa2, 0xc2, 0x81, 0xde, 0x87, 0x1e, 0x37, 0x44, 0x39, 0xb1, 0xb6, 0x7e, 0xb0, 0xf5, 0x9c, - 0x5f, 0x93, 0x2a, 0x00, 0x1b, 0x0d, 0x7f, 0x9c, 0xc2, 0xef, 0x8b, 0x55, 0x22, 0xe4, 0xa8, 0xf2, - 0x68, 0x49, 0xf2, 0xa4, 0xce, 0x25, 0xcf, 0x09, 0x94, 0x85, 0xfa, 0x13, 0x9d, 0x81, 0xd7, 0x21, - 0xc7, 0xe8, 0xc9, 0x23, 0x30, 0x1f, 0xc3, 0x56, 0x46, 0x0b, 0x8e, 0x88, 0x67, 0xa0, 0xbc, 0xef, - 0x19, 0xde, 0xc0, 0x95, 0x47, 0xe0, 0xf7, 0x1a, 0x54, 0x24, 0x64, 0xd2, 0xe6, 0x90, 0xbc, 0x54, - 0xf3, 0x20, 0xec, 0x5f, 0xa9, 0x2f, 0x41, 0xae, 0x7d, 0xb8, 0x6f, 0x7e, 0x24, 0x1b, 0x79, 0x62, - 0x44, 0xe1, 0x5d, 0xce, 0x87, 0x77, 0xd3, 0xc5, 0x88, 0x5e, 0xcf, 0x1c, 0xe3, 0x85, 0xb7, 0x65, - 0xb5, 0xc9, 0x09, 0xab, 0x82, 0x32, 0x7a, 0x00, 0x60, 0x37, 0x2a, 0xd1, 0x75, 0x67, 0xa5, 0x8f, - 0xda, 0x85, 0x9f, 0x85, 0x0b, 0x6b, 0x03, 0xef, 0xa8, 0x61, 0x19, 0x87, 0x5d, 0x19, 0x34, 0xf0, - 0x1c, 0x20, 0x0a, 0xdc, 0x30, 0x5d, 0x15, 0xda, 0x80, 0x59, 0x0a, 0x25, 0x96, 0x67, 0xb6, 0x94, - 0x08, 0x23, 0xf3, 0x88, 0x16, 0xc9, 0x23, 0x86, 0xeb, 0xbe, 0xb4, 0x9d, 0xb6, 0x50, 0xcd, 0x1f, - 0xe3, 0x0d, 0x4e, 0xfc, 0x99, 0x1b, 0xca, 0x14, 0x5f, 0x95, 0xca, 0x52, 0x40, 0xe5, 0x31, 0xf1, - 0xc6, 0x50, 0xc1, 0x0f, 0xe0, 0xa2, 0xc4, 0x14, 0x5d, 0x97, 0x31, 0xc8, 0x7b, 0x70, 0x4d, 0x22, - 0xaf, 0x1f, 0xd1, 0xbb, 0xc0, 0x53, 0xc1, 0xf0, 0xdf, 0x95, 0xf3, 0x11, 0xd4, 0x7c, 0x39, 0x59, - 0xe9, 0x67, 0x77, 0x55, 0x01, 0x06, 0xae, 0x38, 0x33, 0x05, 0x9d, 0x7d, 0x53, 0x98, 0x63, 0x77, - 0xfd, 0xac, 0x4c, 0xbf, 0xf1, 0x3a, 0xcc, 0x4b, 0x1a, 0xa2, 0x28, 0x0b, 0x13, 0x19, 0x11, 0x28, - 0x8e, 0x88, 0x30, 0x18, 0x5d, 0x3a, 0xde, 0xec, 0x2a, 0x66, 0xd8, 0xb4, 0x8c, 0xa6, 0xa6, 0xd0, - 0xbc, 0xc8, 0x4f, 0x04, 0x15, 0x4c, 0x0d, 0xda, 0x02, 0x4c, 0x09, 0xa8, 0x60, 0xb1, 0x11, 0x14, - 0x3c, 0xb2, 0x11, 0x23, 0xa4, 0x3f, 0x80, 0x05, 0x5f, 0x08, 0x6a, 0xb7, 0xa7, 0xc4, 0xe9, 0x99, - 0xae, 0xab, 0xf4, 0x09, 0xe2, 0x14, 0xbf, 0x03, 0x99, 0x3e, 0x11, 0x31, 0xa5, 0xb8, 0x8a, 0x96, - 0xf9, 0xdb, 0xd8, 0xb2, 0xb2, 0x98, 0xcd, 0xe3, 0x36, 0x5c, 0x97, 0xd4, 0xb9, 0x45, 0x63, 0xc9, - 0x47, 0x85, 0x92, 0x77, 0x48, 0x6e, 0xd6, 0xd1, 0x3b, 0x64, 0x9a, 0xef, 0xbd, 0xbc, 0x43, 0xd2, - 0x5c, 0xa1, 0xfa, 0xd6, 0x44, 0xb9, 0x62, 0x9b, 0xdb, 0xd4, 0x77, 0xc9, 0x89, 0x88, 0x1d, 0xc2, - 0x5c, 0xd8, 0x93, 0x27, 0x0a, 0x63, 0x73, 0x90, 0xf5, 0xec, 0x63, 0x22, 0x83, 0x18, 0x1f, 0x48, - 0x81, 0x7d, 0x37, 0x9f, 0x48, 0x60, 0x23, 0x20, 0xc6, 0x8e, 0xe4, 0xa4, 0xf2, 0xd2, 0xdd, 0x94, - 0xf5, 0x0f, 0x1f, 0xe0, 0x5d, 0xb8, 0x14, 0x0d, 0x13, 0x13, 0x89, 0xfc, 0x9c, 0x1f, 0xe0, 0xb8, - 0x48, 0x32, 0x11, 0xdd, 0x77, 0x83, 0x60, 0xa0, 0x04, 0x94, 0x89, 0x48, 0xea, 0x50, 0x8f, 0x8b, - 0x2f, 0xff, 0x89, 0xf3, 0xea, 0x87, 0x9b, 0x89, 0x88, 0xb9, 0x01, 0xb1, 0xc9, 0xb7, 0x3f, 0x88, - 0x11, 0xe9, 0xb1, 0x31, 0x42, 0x38, 0x49, 0x10, 0xc5, 0xbe, 0x86, 0x43, 0x27, 0x78, 0x04, 0x01, - 0x74, 0x52, 0x1e, 0x34, 0x87, 0xf8, 0x3c, 0xd8, 0x40, 0x1e, 0x6c, 0x35, 0xec, 0x4e, 0xb4, 0x19, - 0xef, 0x05, 0xb1, 0x73, 0x24, 0x32, 0x4f, 0x44, 0xf8, 0x7d, 0x58, 0x4c, 0x0e, 0xca, 0x93, 0x50, - 0xbe, 0x8f, 0xa1, 0xe0, 0x17, 0x94, 0xca, 0xbb, 0x72, 0x11, 0xf2, 0xbb, 0x7b, 0xfb, 0x4f, 0xd7, - 0xd6, 0x1b, 0x55, 0x6d, 0xf5, 0x1f, 0x69, 0x48, 0x6d, 0x3f, 0x47, 0xdf, 0x82, 0x2c, 0x7f, 0x2e, - 0x1a, 0xf3, 0x9a, 0x56, 0x1f, 0xf7, 0xf0, 0x84, 0xaf, 0x7e, 0xf2, 0xa7, 0xbf, 0x7e, 0x9e, 0xba, - 0x84, 0x2f, 0xac, 0x0c, 0xdf, 0x30, 0xba, 0xfd, 0x23, 0x63, 0xe5, 0x78, 0xb8, 0xc2, 0x72, 0xc2, - 0x43, 0xed, 0x3e, 0x7a, 0x0e, 0xe9, 0xa7, 0x03, 0x0f, 0x25, 0x3e, 0xb5, 0xd5, 0x93, 0x1f, 0xa4, - 0x70, 0x9d, 0x51, 0x9e, 0xc3, 0x33, 0x2a, 0xe5, 0xfe, 0xc0, 0xa3, 0x74, 0x87, 0x50, 0x54, 0xde, - 0x94, 0xd0, 0x99, 0x8f, 0x70, 0xf5, 0xb3, 0xdf, 0xab, 0x30, 0x66, 0xfc, 0xae, 0xe2, 0xcb, 0x2a, - 0x3f, 0xfe, 0xf4, 0xa5, 0xea, 0x73, 0x70, 0x62, 0x45, 0xf5, 0x09, 0x9e, 0x45, 0xa2, 0xfa, 0x28, - 0x4f, 0x11, 0xf1, 0xfa, 0x78, 0x27, 0x16, 0xa5, 0x6b, 0x8b, 0x77, 0xb0, 0x96, 0x87, 0xae, 0xc7, - 0xbc, 0xa3, 0xa8, 0x2f, 0x06, 0xf5, 0xc5, 0x64, 0x04, 0xc1, 0xe9, 0x06, 0xe3, 0x74, 0x05, 0x5f, - 0x52, 0x39, 0xb5, 0x7c, 0xbc, 0x87, 0xda, 0xfd, 0xd5, 0x23, 0xc8, 0xb2, 0x3e, 0x27, 0x6a, 0xca, - 0x8f, 0x7a, 0x4c, 0x87, 0x36, 0xe1, 0x04, 0x84, 0x3a, 0xa4, 0x78, 0x9e, 0x71, 0x9b, 0xc5, 0x15, - 0x9f, 0x1b, 0x6b, 0x75, 0x3e, 0xd4, 0xee, 0x2f, 0x69, 0xaf, 0x69, 0xab, 0xdf, 0xcb, 0x40, 0x96, - 0xb5, 0x8e, 0x50, 0x1f, 0x20, 0x68, 0x0a, 0x46, 0xf5, 0x1c, 0x69, 0x33, 0x46, 0xf5, 0x1c, 0xed, - 0x27, 0xe2, 0xeb, 0x8c, 0xf3, 0x3c, 0x9e, 0xf3, 0x39, 0xb3, 0x57, 0xfb, 0x15, 0xd6, 0x24, 0xa2, - 0x66, 0x7d, 0x09, 0x45, 0xa5, 0xb9, 0x87, 0xe2, 0x28, 0x86, 0xba, 0x83, 0xd1, 0x63, 0x12, 0xd3, - 0x19, 0xc4, 0x37, 0x19, 0xd3, 0x6b, 0xb8, 0xa6, 0x1a, 0x97, 0xf3, 0x75, 0x18, 0x26, 0x65, 0xfc, - 0xa9, 0x06, 0x95, 0x70, 0x83, 0x0f, 0xdd, 0x8c, 0x21, 0x1d, 0xed, 0x13, 0xd6, 0x6f, 0x8d, 0x47, - 0x4a, 0x14, 0x81, 0xf3, 0x3f, 0x26, 0xa4, 0x6f, 0x50, 0x4c, 0x61, 0x7b, 0xf4, 0x7d, 0x0d, 0x66, - 0x22, 0x6d, 0x3b, 0x14, 0xc7, 0x62, 0xa4, 0x29, 0x58, 0xbf, 0x7d, 0x06, 0x96, 0x90, 0xe4, 0x2e, - 0x93, 0xe4, 0x06, 0xbe, 0x3a, 0x6a, 0x0c, 0xcf, 0xec, 0x11, 0xcf, 0x16, 0xd2, 0xac, 0xfe, 0x33, - 0x0d, 0xf9, 0x75, 0xfe, 0x13, 0x2b, 0xe4, 0x41, 0xc1, 0xef, 0x84, 0xa1, 0x85, 0xb8, 0xae, 0x44, - 0x50, 0xb2, 0xd7, 0xaf, 0x27, 0xce, 0x0b, 0x11, 0xee, 0x30, 0x11, 0x16, 0xf1, 0x15, 0x5f, 0x04, - 0xf1, 0x53, 0xae, 0x15, 0x7e, 0xf9, 0x5e, 0x31, 0xda, 0x6d, 0xba, 0x25, 0xdf, 0xd5, 0xa0, 0xa4, - 0x36, 0xac, 0xd0, 0x8d, 0xd8, 0x7e, 0x88, 0xda, 0xf3, 0xaa, 0xe3, 0x71, 0x28, 0x82, 0xff, 0x3d, - 0xc6, 0xff, 0x26, 0x5e, 0x48, 0xe2, 0xef, 0x30, 0xfc, 0xb0, 0x08, 0xbc, 0xe5, 0x14, 0x2f, 0x42, - 0xa8, 0xa3, 0x15, 0x2f, 0x42, 0xb8, 0x63, 0x75, 0xb6, 0x08, 0x03, 0x86, 0x4f, 0x45, 0x38, 0x01, - 0x08, 0x3a, 0x4c, 0x28, 0xd6, 0xb8, 0xca, 0x25, 0x26, 0xea, 0x83, 0xa3, 0xcd, 0xa9, 0x98, 0x13, - 0x10, 0xe1, 0xdd, 0x35, 0x5d, 0xea, 0x8b, 0xab, 0xbf, 0xcd, 0x40, 0xf1, 0x89, 0x61, 0x5a, 0x1e, - 0xb1, 0x0c, 0xab, 0x45, 0x50, 0x07, 0xb2, 0x2c, 0x4b, 0x45, 0x03, 0x8f, 0xda, 0xf6, 0x89, 0x06, - 0x9e, 0x50, 0x4f, 0x04, 0xdf, 0x66, 0xac, 0xaf, 0xe3, 0xba, 0xcf, 0xba, 0x17, 0xd0, 0x5f, 0x61, - 0xfd, 0x0c, 0xaa, 0xf2, 0x31, 0xe4, 0x78, 0xff, 0x02, 0x45, 0xa8, 0x85, 0xfa, 0x1c, 0xf5, 0xab, - 0xf1, 0x93, 0x89, 0xa7, 0x4c, 0xe5, 0xe5, 0x32, 0x64, 0xca, 0xec, 0xdb, 0x00, 0x41, 0xc3, 0x2c, - 0x6a, 0xdf, 0x91, 0xfe, 0x5a, 0x7d, 0x31, 0x19, 0x41, 0x30, 0xbe, 0xcf, 0x18, 0xdf, 0xc2, 0xd7, - 0x63, 0x19, 0xb7, 0xfd, 0x05, 0x94, 0x79, 0x0b, 0x32, 0x9b, 0x86, 0x7b, 0x84, 0x22, 0x49, 0x48, - 0x79, 0xdb, 0xad, 0xd7, 0xe3, 0xa6, 0x04, 0xab, 0x5b, 0x8c, 0xd5, 0x02, 0x9e, 0x8f, 0x65, 0x75, - 0x64, 0xb8, 0x34, 0xa6, 0xa3, 0x01, 0x4c, 0xcb, 0xf7, 0x5a, 0x74, 0x2d, 0x62, 0xb3, 0xf0, 0xdb, - 0x6e, 0x7d, 0x21, 0x69, 0x5a, 0x30, 0x5c, 0x62, 0x0c, 0x31, 0xbe, 0x16, 0x6f, 0x54, 0x81, 0xfe, - 0x50, 0xbb, 0xff, 0x9a, 0xb6, 0xfa, 0xc3, 0x2a, 0x64, 0x68, 0xbd, 0x44, 0xb3, 0x48, 0x70, 0xcd, - 0x8c, 0x5a, 0x78, 0xa4, 0xb9, 0x13, 0xb5, 0xf0, 0xe8, 0x0d, 0x35, 0x26, 0x8b, 0xb0, 0x1f, 0x9a, - 0x12, 0x86, 0x45, 0x35, 0xf6, 0xa0, 0xa8, 0x5c, 0x46, 0x51, 0x0c, 0xc5, 0x70, 0xeb, 0x28, 0x9a, - 0x45, 0x62, 0x6e, 0xb2, 0x78, 0x91, 0x31, 0xad, 0xe3, 0x8b, 0x61, 0xa6, 0x6d, 0x8e, 0x46, 0xb9, - 0x7e, 0x0c, 0x25, 0xf5, 0xd6, 0x8a, 0x62, 0x88, 0x46, 0x7a, 0x53, 0xd1, 0x58, 0x11, 0x77, 0xe9, - 0x8d, 0x71, 0x1a, 0xff, 0x67, 0xb5, 0x12, 0x97, 0x72, 0xff, 0x10, 0xf2, 0xe2, 0x2e, 0x1b, 0xa7, - 0x6f, 0xb8, 0x9b, 0x15, 0xa7, 0x6f, 0xe4, 0x22, 0x1c, 0x53, 0x92, 0x30, 0xb6, 0xb4, 0x66, 0x97, - 0x01, 0x5a, 0xb0, 0x7c, 0x4c, 0xbc, 0x24, 0x96, 0x41, 0x7f, 0x26, 0x89, 0xa5, 0x72, 0x5f, 0x1a, - 0xcb, 0xb2, 0x43, 0x3c, 0x71, 0x96, 0xe5, 0x65, 0x04, 0x25, 0x50, 0x54, 0xa3, 0x21, 0x1e, 0x87, - 0x92, 0x58, 0x45, 0x06, 0x5c, 0x45, 0x28, 0x44, 0xdf, 0x01, 0x08, 0x2e, 0xde, 0xd1, 0xc2, 0x20, - 0xb6, 0x7b, 0x17, 0x2d, 0x0c, 0xe2, 0xef, 0xee, 0x31, 0x1e, 0x1c, 0x30, 0xe7, 0x95, 0x2c, 0x65, - 0xff, 0x13, 0x0d, 0xd0, 0xe8, 0x45, 0x1d, 0x3d, 0x88, 0x67, 0x11, 0xdb, 0x18, 0xac, 0xbf, 0x72, - 0x3e, 0xe4, 0xc4, 0xe8, 0x19, 0xc8, 0xd5, 0x62, 0x4b, 0xfa, 0x2f, 0xa9, 0x64, 0x9f, 0x69, 0x50, - 0x0e, 0x5d, 0xf5, 0xd1, 0x9d, 0x84, 0x7d, 0x8e, 0x34, 0x17, 0xeb, 0x77, 0xcf, 0xc4, 0x4b, 0xac, - 0x9d, 0x94, 0x53, 0x21, 0xeb, 0xc6, 0x1f, 0x68, 0x50, 0x09, 0xf7, 0x07, 0x50, 0x02, 0x83, 0x91, - 0x0e, 0x65, 0x7d, 0xe9, 0x6c, 0xc4, 0x73, 0xec, 0x56, 0x50, 0x4a, 0x7e, 0x08, 0x79, 0xd1, 0x56, - 0x88, 0x73, 0x8b, 0x70, 0x83, 0x33, 0xce, 0x2d, 0x22, 0x3d, 0x89, 0x24, 0xb7, 0xa0, 0x37, 0x74, - 0xc5, 0x13, 0x45, 0xf3, 0x21, 0x89, 0xe5, 0x78, 0x4f, 0x8c, 0x74, 0x2e, 0xc6, 0xb2, 0x0c, 0x3c, - 0x51, 0xb6, 0x1e, 0x50, 0x02, 0xc5, 0x33, 0x3c, 0x31, 0xda, 0xb9, 0x48, 0xf2, 0x44, 0xc6, 0x55, - 0xf1, 0xc4, 0xa0, 0x53, 0x10, 0xe7, 0x89, 0x23, 0xed, 0xdb, 0x38, 0x4f, 0x1c, 0x6d, 0x36, 0x24, - 0xed, 0x2d, 0x63, 0x1e, 0xf2, 0xc4, 0xd9, 0x98, 0xce, 0x02, 0x7a, 0x25, 0xc1, 0xa6, 0xb1, 0xad, - 0xe1, 0xfa, 0xab, 0xe7, 0xc4, 0x1e, 0xef, 0x01, 0x7c, 0x37, 0xa4, 0x07, 0xfc, 0x42, 0x83, 0xb9, - 0xb8, 0xd6, 0x04, 0x4a, 0x60, 0x96, 0xd0, 0x57, 0xae, 0x2f, 0x9f, 0x17, 0xfd, 0x1c, 0x76, 0xf3, - 0x7d, 0xe2, 0x51, 0xf5, 0x77, 0x5f, 0x2e, 0x68, 0x7f, 0xfc, 0x72, 0x41, 0xfb, 0xf3, 0x97, 0x0b, - 0xda, 0x4f, 0xff, 0xb2, 0x30, 0x75, 0x98, 0x63, 0xff, 0xdb, 0xe3, 0x8d, 0x7f, 0x05, 0x00, 0x00, - 0xff, 0xff, 0x63, 0x1c, 0x78, 0x24, 0x74, 0x32, 0x00, 0x00, -} diff --git a/vendor/github.com/coreos/etcd/mvcc/mvccpb/kv.pb.go b/vendor/github.com/coreos/etcd/mvcc/mvccpb/kv.pb.go deleted file mode 100644 index 7033f13..0000000 --- a/vendor/github.com/coreos/etcd/mvcc/mvccpb/kv.pb.go +++ /dev/null @@ -1,735 +0,0 @@ -// Code generated by protoc-gen-gogo. -// source: kv.proto -// DO NOT EDIT! - -/* - Package mvccpb is a generated protocol buffer package. - - It is generated from these files: - kv.proto - - It has these top-level messages: - KeyValue - Event -*/ -package mvccpb - -import ( - "fmt" - - proto "github.com/golang/protobuf/proto" - - math "math" - - io "io" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -type Event_EventType int32 - -const ( - PUT Event_EventType = 0 - DELETE Event_EventType = 1 -) - -var Event_EventType_name = map[int32]string{ - 0: "PUT", - 1: "DELETE", -} -var Event_EventType_value = map[string]int32{ - "PUT": 0, - "DELETE": 1, -} - -func (x Event_EventType) String() string { - return proto.EnumName(Event_EventType_name, int32(x)) -} -func (Event_EventType) EnumDescriptor() ([]byte, []int) { return fileDescriptorKv, []int{1, 0} } - -type KeyValue struct { - // key is the key in bytes. An empty key is not allowed. - Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - // create_revision is the revision of last creation on this key. - CreateRevision int64 `protobuf:"varint,2,opt,name=create_revision,json=createRevision,proto3" json:"create_revision,omitempty"` - // mod_revision is the revision of last modification on this key. - ModRevision int64 `protobuf:"varint,3,opt,name=mod_revision,json=modRevision,proto3" json:"mod_revision,omitempty"` - // version is the version of the key. A deletion resets - // the version to zero and any modification of the key - // increases its version. - Version int64 `protobuf:"varint,4,opt,name=version,proto3" json:"version,omitempty"` - // value is the value held by the key, in bytes. - Value []byte `protobuf:"bytes,5,opt,name=value,proto3" json:"value,omitempty"` - // lease is the ID of the lease that attached to key. - // When the attached lease expires, the key will be deleted. - // If lease is 0, then no lease is attached to the key. - Lease int64 `protobuf:"varint,6,opt,name=lease,proto3" json:"lease,omitempty"` -} - -func (m *KeyValue) Reset() { *m = KeyValue{} } -func (m *KeyValue) String() string { return proto.CompactTextString(m) } -func (*KeyValue) ProtoMessage() {} -func (*KeyValue) Descriptor() ([]byte, []int) { return fileDescriptorKv, []int{0} } - -type Event struct { - // type is the kind of event. If type is a PUT, it indicates - // new data has been stored to the key. If type is a DELETE, - // it indicates the key was deleted. - Type Event_EventType `protobuf:"varint,1,opt,name=type,proto3,enum=mvccpb.Event_EventType" json:"type,omitempty"` - // kv holds the KeyValue for the event. - // A PUT event contains current kv pair. - // A PUT event with kv.Version=1 indicates the creation of a key. - // A DELETE/EXPIRE event contains the deleted key with - // its modification revision set to the revision of deletion. - Kv *KeyValue `protobuf:"bytes,2,opt,name=kv" json:"kv,omitempty"` - // prev_kv holds the key-value pair before the event happens. - PrevKv *KeyValue `protobuf:"bytes,3,opt,name=prev_kv,json=prevKv" json:"prev_kv,omitempty"` -} - -func (m *Event) Reset() { *m = Event{} } -func (m *Event) String() string { return proto.CompactTextString(m) } -func (*Event) ProtoMessage() {} -func (*Event) Descriptor() ([]byte, []int) { return fileDescriptorKv, []int{1} } - -func init() { - proto.RegisterType((*KeyValue)(nil), "mvccpb.KeyValue") - proto.RegisterType((*Event)(nil), "mvccpb.Event") - proto.RegisterEnum("mvccpb.Event_EventType", Event_EventType_name, Event_EventType_value) -} -func (m *KeyValue) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *KeyValue) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Key) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintKv(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - } - if m.CreateRevision != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintKv(dAtA, i, uint64(m.CreateRevision)) - } - if m.ModRevision != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintKv(dAtA, i, uint64(m.ModRevision)) - } - if m.Version != 0 { - dAtA[i] = 0x20 - i++ - i = encodeVarintKv(dAtA, i, uint64(m.Version)) - } - if len(m.Value) > 0 { - dAtA[i] = 0x2a - i++ - i = encodeVarintKv(dAtA, i, uint64(len(m.Value))) - i += copy(dAtA[i:], m.Value) - } - if m.Lease != 0 { - dAtA[i] = 0x30 - i++ - i = encodeVarintKv(dAtA, i, uint64(m.Lease)) - } - return i, nil -} - -func (m *Event) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Event) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Type != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintKv(dAtA, i, uint64(m.Type)) - } - if m.Kv != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintKv(dAtA, i, uint64(m.Kv.Size())) - n1, err := m.Kv.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if m.PrevKv != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintKv(dAtA, i, uint64(m.PrevKv.Size())) - n2, err := m.PrevKv.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - return i, nil -} - -func encodeFixed64Kv(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Kv(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintKv(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *KeyValue) Size() (n int) { - var l int - _ = l - l = len(m.Key) - if l > 0 { - n += 1 + l + sovKv(uint64(l)) - } - if m.CreateRevision != 0 { - n += 1 + sovKv(uint64(m.CreateRevision)) - } - if m.ModRevision != 0 { - n += 1 + sovKv(uint64(m.ModRevision)) - } - if m.Version != 0 { - n += 1 + sovKv(uint64(m.Version)) - } - l = len(m.Value) - if l > 0 { - n += 1 + l + sovKv(uint64(l)) - } - if m.Lease != 0 { - n += 1 + sovKv(uint64(m.Lease)) - } - return n -} - -func (m *Event) Size() (n int) { - var l int - _ = l - if m.Type != 0 { - n += 1 + sovKv(uint64(m.Type)) - } - if m.Kv != nil { - l = m.Kv.Size() - n += 1 + l + sovKv(uint64(l)) - } - if m.PrevKv != nil { - l = m.PrevKv.Size() - n += 1 + l + sovKv(uint64(l)) - } - return n -} - -func sovKv(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozKv(x uint64) (n int) { - return sovKv(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *KeyValue) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKv - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: KeyValue: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: KeyValue: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKv - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKv - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...) - if m.Key == nil { - m.Key = []byte{} - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CreateRevision", wireType) - } - m.CreateRevision = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKv - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.CreateRevision |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ModRevision", wireType) - } - m.ModRevision = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKv - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ModRevision |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) - } - m.Version = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKv - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Version |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKv - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKv - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Value = append(m.Value[:0], dAtA[iNdEx:postIndex]...) - if m.Value == nil { - m.Value = []byte{} - } - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Lease", wireType) - } - m.Lease = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKv - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Lease |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipKv(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKv - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Event) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKv - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Event: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Event: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) - } - m.Type = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKv - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Type |= (Event_EventType(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Kv", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKv - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKv - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Kv == nil { - m.Kv = &KeyValue{} - } - if err := m.Kv.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PrevKv", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKv - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKv - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.PrevKv == nil { - m.PrevKv = &KeyValue{} - } - if err := m.PrevKv.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKv(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKv - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipKv(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowKv - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowKv - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowKv - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - iNdEx += length - if length < 0 { - return 0, ErrInvalidLengthKv - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowKv - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipKv(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthKv = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowKv = fmt.Errorf("proto: integer overflow") -) - -func init() { proto.RegisterFile("kv.proto", fileDescriptorKv) } - -var fileDescriptorKv = []byte{ - // 303 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0x41, 0x4e, 0xc2, 0x40, - 0x14, 0x86, 0x3b, 0x14, 0x0a, 0x3e, 0x08, 0x36, 0x13, 0x12, 0x27, 0x2e, 0x26, 0x95, 0x8d, 0x18, - 0x13, 0x4c, 0xf0, 0x06, 0xc6, 0xae, 0x70, 0x61, 0x1a, 0x74, 0x4b, 0x4a, 0x79, 0x21, 0xa4, 0x94, - 0x69, 0x4a, 0x9d, 0xa4, 0x37, 0x71, 0xef, 0xde, 0x73, 0xb0, 0xe4, 0x08, 0x52, 0x2f, 0x62, 0xfa, - 0xc6, 0xe2, 0xc6, 0xcd, 0xe4, 0xfd, 0xff, 0xff, 0x65, 0xe6, 0x7f, 0x03, 0x9d, 0x58, 0x8f, 0xd3, - 0x4c, 0xe5, 0x8a, 0x3b, 0x89, 0x8e, 0xa2, 0x74, 0x71, 0x39, 0x58, 0xa9, 0x95, 0x22, 0xeb, 0xae, - 0x9a, 0x4c, 0x3a, 0xfc, 0x64, 0xd0, 0x99, 0x62, 0xf1, 0x1a, 0x6e, 0xde, 0x90, 0xbb, 0x60, 0xc7, - 0x58, 0x08, 0xe6, 0xb1, 0x51, 0x2f, 0xa8, 0x46, 0x7e, 0x0d, 0xe7, 0x51, 0x86, 0x61, 0x8e, 0xf3, - 0x0c, 0xf5, 0x7a, 0xb7, 0x56, 0x5b, 0xd1, 0xf0, 0xd8, 0xc8, 0x0e, 0xfa, 0xc6, 0x0e, 0x7e, 0x5d, - 0x7e, 0x05, 0xbd, 0x44, 0x2d, 0xff, 0x28, 0x9b, 0xa8, 0x6e, 0xa2, 0x96, 0x27, 0x44, 0x40, 0x5b, - 0x63, 0x46, 0x69, 0x93, 0xd2, 0x5a, 0xf2, 0x01, 0xb4, 0x74, 0x55, 0x40, 0xb4, 0xe8, 0x65, 0x23, - 0x2a, 0x77, 0x83, 0xe1, 0x0e, 0x85, 0x43, 0xb4, 0x11, 0xc3, 0x0f, 0x06, 0x2d, 0x5f, 0xe3, 0x36, - 0xe7, 0xb7, 0xd0, 0xcc, 0x8b, 0x14, 0xa9, 0x6e, 0x7f, 0x72, 0x31, 0x36, 0x7b, 0x8e, 0x29, 0x34, - 0xe7, 0xac, 0x48, 0x31, 0x20, 0x88, 0x7b, 0xd0, 0x88, 0x35, 0x75, 0xef, 0x4e, 0xdc, 0x1a, 0xad, - 0x17, 0x0f, 0x1a, 0xb1, 0xe6, 0x37, 0xd0, 0x4e, 0x33, 0xd4, 0xf3, 0x58, 0x53, 0xf9, 0xff, 0x30, - 0xa7, 0x02, 0xa6, 0x7a, 0xe8, 0xc1, 0xd9, 0xe9, 0x7e, 0xde, 0x06, 0xfb, 0xf9, 0x65, 0xe6, 0x5a, - 0x1c, 0xc0, 0x79, 0xf4, 0x9f, 0xfc, 0x99, 0xef, 0xb2, 0x07, 0xb1, 0x3f, 0x4a, 0xeb, 0x70, 0x94, - 0xd6, 0xbe, 0x94, 0xec, 0x50, 0x4a, 0xf6, 0x55, 0x4a, 0xf6, 0xfe, 0x2d, 0xad, 0x85, 0x43, 0xff, - 0x7e, 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0xb5, 0x45, 0x92, 0x5d, 0xa1, 0x01, 0x00, 0x00, -} diff --git a/vendor/github.com/coreos/etcd/pkg/types/doc.go b/vendor/github.com/coreos/etcd/pkg/types/doc.go deleted file mode 100644 index de8ef0b..0000000 --- a/vendor/github.com/coreos/etcd/pkg/types/doc.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2015 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package types declares various data types and implements type-checking -// functions. -package types diff --git a/vendor/github.com/coreos/etcd/pkg/types/id.go b/vendor/github.com/coreos/etcd/pkg/types/id.go deleted file mode 100644 index 1b042d9..0000000 --- a/vendor/github.com/coreos/etcd/pkg/types/id.go +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2015 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -import ( - "strconv" -) - -// ID represents a generic identifier which is canonically -// stored as a uint64 but is typically represented as a -// base-16 string for input/output -type ID uint64 - -func (i ID) String() string { - return strconv.FormatUint(uint64(i), 16) -} - -// IDFromString attempts to create an ID from a base-16 string. -func IDFromString(s string) (ID, error) { - i, err := strconv.ParseUint(s, 16, 64) - return ID(i), err -} - -// IDSlice implements the sort interface -type IDSlice []ID - -func (p IDSlice) Len() int { return len(p) } -func (p IDSlice) Less(i, j int) bool { return uint64(p[i]) < uint64(p[j]) } -func (p IDSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } diff --git a/vendor/github.com/coreos/etcd/pkg/types/set.go b/vendor/github.com/coreos/etcd/pkg/types/set.go deleted file mode 100644 index 73ef431..0000000 --- a/vendor/github.com/coreos/etcd/pkg/types/set.go +++ /dev/null @@ -1,178 +0,0 @@ -// Copyright 2015 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -import ( - "reflect" - "sort" - "sync" -) - -type Set interface { - Add(string) - Remove(string) - Contains(string) bool - Equals(Set) bool - Length() int - Values() []string - Copy() Set - Sub(Set) Set -} - -func NewUnsafeSet(values ...string) *unsafeSet { - set := &unsafeSet{make(map[string]struct{})} - for _, v := range values { - set.Add(v) - } - return set -} - -func NewThreadsafeSet(values ...string) *tsafeSet { - us := NewUnsafeSet(values...) - return &tsafeSet{us, sync.RWMutex{}} -} - -type unsafeSet struct { - d map[string]struct{} -} - -// Add adds a new value to the set (no-op if the value is already present) -func (us *unsafeSet) Add(value string) { - us.d[value] = struct{}{} -} - -// Remove removes the given value from the set -func (us *unsafeSet) Remove(value string) { - delete(us.d, value) -} - -// Contains returns whether the set contains the given value -func (us *unsafeSet) Contains(value string) (exists bool) { - _, exists = us.d[value] - return -} - -// ContainsAll returns whether the set contains all given values -func (us *unsafeSet) ContainsAll(values []string) bool { - for _, s := range values { - if !us.Contains(s) { - return false - } - } - return true -} - -// Equals returns whether the contents of two sets are identical -func (us *unsafeSet) Equals(other Set) bool { - v1 := sort.StringSlice(us.Values()) - v2 := sort.StringSlice(other.Values()) - v1.Sort() - v2.Sort() - return reflect.DeepEqual(v1, v2) -} - -// Length returns the number of elements in the set -func (us *unsafeSet) Length() int { - return len(us.d) -} - -// Values returns the values of the Set in an unspecified order. -func (us *unsafeSet) Values() (values []string) { - values = make([]string, 0) - for val := range us.d { - values = append(values, val) - } - return -} - -// Copy creates a new Set containing the values of the first -func (us *unsafeSet) Copy() Set { - cp := NewUnsafeSet() - for val := range us.d { - cp.Add(val) - } - - return cp -} - -// Sub removes all elements in other from the set -func (us *unsafeSet) Sub(other Set) Set { - oValues := other.Values() - result := us.Copy().(*unsafeSet) - - for _, val := range oValues { - if _, ok := result.d[val]; !ok { - continue - } - delete(result.d, val) - } - - return result -} - -type tsafeSet struct { - us *unsafeSet - m sync.RWMutex -} - -func (ts *tsafeSet) Add(value string) { - ts.m.Lock() - defer ts.m.Unlock() - ts.us.Add(value) -} - -func (ts *tsafeSet) Remove(value string) { - ts.m.Lock() - defer ts.m.Unlock() - ts.us.Remove(value) -} - -func (ts *tsafeSet) Contains(value string) (exists bool) { - ts.m.RLock() - defer ts.m.RUnlock() - return ts.us.Contains(value) -} - -func (ts *tsafeSet) Equals(other Set) bool { - ts.m.RLock() - defer ts.m.RUnlock() - return ts.us.Equals(other) -} - -func (ts *tsafeSet) Length() int { - ts.m.RLock() - defer ts.m.RUnlock() - return ts.us.Length() -} - -func (ts *tsafeSet) Values() (values []string) { - ts.m.RLock() - defer ts.m.RUnlock() - return ts.us.Values() -} - -func (ts *tsafeSet) Copy() Set { - ts.m.RLock() - defer ts.m.RUnlock() - usResult := ts.us.Copy().(*unsafeSet) - return &tsafeSet{usResult, sync.RWMutex{}} -} - -func (ts *tsafeSet) Sub(other Set) Set { - ts.m.RLock() - defer ts.m.RUnlock() - usResult := ts.us.Sub(other).(*unsafeSet) - return &tsafeSet{usResult, sync.RWMutex{}} -} diff --git a/vendor/github.com/coreos/etcd/pkg/types/slice.go b/vendor/github.com/coreos/etcd/pkg/types/slice.go deleted file mode 100644 index 0dd9ca7..0000000 --- a/vendor/github.com/coreos/etcd/pkg/types/slice.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2015 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -// Uint64Slice implements sort interface -type Uint64Slice []uint64 - -func (p Uint64Slice) Len() int { return len(p) } -func (p Uint64Slice) Less(i, j int) bool { return p[i] < p[j] } -func (p Uint64Slice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } diff --git a/vendor/github.com/coreos/etcd/pkg/types/urls.go b/vendor/github.com/coreos/etcd/pkg/types/urls.go deleted file mode 100644 index 9e5d03f..0000000 --- a/vendor/github.com/coreos/etcd/pkg/types/urls.go +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2015 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -import ( - "errors" - "fmt" - "net" - "net/url" - "sort" - "strings" -) - -type URLs []url.URL - -func NewURLs(strs []string) (URLs, error) { - all := make([]url.URL, len(strs)) - if len(all) == 0 { - return nil, errors.New("no valid URLs given") - } - for i, in := range strs { - in = strings.TrimSpace(in) - u, err := url.Parse(in) - if err != nil { - return nil, err - } - if u.Scheme != "http" && u.Scheme != "https" && u.Scheme != "unix" && u.Scheme != "unixs" { - return nil, fmt.Errorf("URL scheme must be http, https, unix, or unixs: %s", in) - } - if _, _, err := net.SplitHostPort(u.Host); err != nil { - return nil, fmt.Errorf(`URL address does not have the form "host:port": %s`, in) - } - if u.Path != "" { - return nil, fmt.Errorf("URL must not contain a path: %s", in) - } - all[i] = *u - } - us := URLs(all) - us.Sort() - - return us, nil -} - -func MustNewURLs(strs []string) URLs { - urls, err := NewURLs(strs) - if err != nil { - panic(err) - } - return urls -} - -func (us URLs) String() string { - return strings.Join(us.StringSlice(), ",") -} - -func (us *URLs) Sort() { - sort.Sort(us) -} -func (us URLs) Len() int { return len(us) } -func (us URLs) Less(i, j int) bool { return us[i].String() < us[j].String() } -func (us URLs) Swap(i, j int) { us[i], us[j] = us[j], us[i] } - -func (us URLs) StringSlice() []string { - out := make([]string, len(us)) - for i := range us { - out[i] = us[i].String() - } - - return out -} diff --git a/vendor/github.com/coreos/etcd/pkg/types/urlsmap.go b/vendor/github.com/coreos/etcd/pkg/types/urlsmap.go deleted file mode 100644 index 47690cc..0000000 --- a/vendor/github.com/coreos/etcd/pkg/types/urlsmap.go +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright 2015 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -import ( - "fmt" - "sort" - "strings" -) - -// URLsMap is a map from a name to its URLs. -type URLsMap map[string]URLs - -// NewURLsMap returns a URLsMap instantiated from the given string, -// which consists of discovery-formatted names-to-URLs, like: -// mach0=http://1.1.1.1:2380,mach0=http://2.2.2.2::2380,mach1=http://3.3.3.3:2380,mach2=http://4.4.4.4:2380 -func NewURLsMap(s string) (URLsMap, error) { - m := parse(s) - - cl := URLsMap{} - for name, urls := range m { - us, err := NewURLs(urls) - if err != nil { - return nil, err - } - cl[name] = us - } - return cl, nil -} - -// NewURLsMapFromStringMap takes a map of strings and returns a URLsMap. The -// string values in the map can be multiple values separated by the sep string. -func NewURLsMapFromStringMap(m map[string]string, sep string) (URLsMap, error) { - var err error - um := URLsMap{} - for k, v := range m { - um[k], err = NewURLs(strings.Split(v, sep)) - if err != nil { - return nil, err - } - } - return um, nil -} - -// String turns URLsMap into discovery-formatted name-to-URLs sorted by name. -func (c URLsMap) String() string { - var pairs []string - for name, urls := range c { - for _, url := range urls { - pairs = append(pairs, fmt.Sprintf("%s=%s", name, url.String())) - } - } - sort.Strings(pairs) - return strings.Join(pairs, ",") -} - -// URLs returns a list of all URLs. -// The returned list is sorted in ascending lexicographical order. -func (c URLsMap) URLs() []string { - var urls []string - for _, us := range c { - for _, u := range us { - urls = append(urls, u.String()) - } - } - sort.Strings(urls) - return urls -} - -// Len returns the size of URLsMap. -func (c URLsMap) Len() int { - return len(c) -} - -// parse parses the given string and returns a map listing the values specified for each key. -func parse(s string) map[string][]string { - m := make(map[string][]string) - for s != "" { - key := s - if i := strings.IndexAny(key, ","); i >= 0 { - key, s = key[:i], key[i+1:] - } else { - s = "" - } - if key == "" { - continue - } - value := "" - if i := strings.Index(key, "="); i >= 0 { - key, value = key[:i], key[i+1:] - } - m[key] = append(m[key], value) - } - return m -} diff --git a/vendor/github.com/cznic/mathutil/AUTHORS b/vendor/github.com/cznic/mathutil/AUTHORS deleted file mode 100644 index c0a01b6..0000000 --- a/vendor/github.com/cznic/mathutil/AUTHORS +++ /dev/null @@ -1,13 +0,0 @@ -# This file lists authors for copyright purposes. This file is distinct from -# the CONTRIBUTORS files. See the latter for an explanation. -# -# Names should be added to this file as: -# Name or Organization -# -# The email address is not required for organizations. -# -# Please keep the list sorted. - -CZ.NIC z.s.p.o. -Edward Betts -Jan Mercl <0xjnml@gmail.com> diff --git a/vendor/github.com/cznic/mathutil/CONTRIBUTORS b/vendor/github.com/cznic/mathutil/CONTRIBUTORS deleted file mode 100644 index 8f2b983..0000000 --- a/vendor/github.com/cznic/mathutil/CONTRIBUTORS +++ /dev/null @@ -1,14 +0,0 @@ -# This file lists people who contributed code to this repository. The AUTHORS -# file lists the copyright holders; this file lists people. -# -# Names should be added to this file like so: -# Name -# -# Please keep the list sorted. - -Bodecker DellaMaria -Edward Betts -Faiz Abbasi -Gary Burd -Jan Mercl <0xjnml@gmail.com> -Muhammad Surya diff --git a/vendor/github.com/cznic/mathutil/LICENSE b/vendor/github.com/cznic/mathutil/LICENSE deleted file mode 100644 index 128a1b6..0000000 --- a/vendor/github.com/cznic/mathutil/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2014 The mathutil Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the names of the authors nor the names of the -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/cznic/mathutil/bits.go b/vendor/github.com/cznic/mathutil/bits.go deleted file mode 100644 index fee4c03..0000000 --- a/vendor/github.com/cznic/mathutil/bits.go +++ /dev/null @@ -1,207 +0,0 @@ -// Copyright (c) 2014 The mathutil Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package mathutil - -import ( - "math/big" -) - -// BitLenByte returns the bit width of the non zero part of n. -func BitLenByte(n byte) int { - return log2[n] + 1 -} - -// BitLenUint16 returns the bit width of the non zero part of n. -func BitLenUint16(n uint16) int { - if b := n >> 8; b != 0 { - return log2[b] + 8 + 1 - } - - return log2[n] + 1 -} - -// BitLenUint32 returns the bit width of the non zero part of n. -func BitLenUint32(n uint32) int { - if b := n >> 24; b != 0 { - return log2[b] + 24 + 1 - } - - if b := n >> 16; b != 0 { - return log2[b] + 16 + 1 - } - - if b := n >> 8; b != 0 { - return log2[b] + 8 + 1 - } - - return log2[n] + 1 -} - -// BitLen returns the bit width of the non zero part of n. -func BitLen(n int) int { // Should handle correctly [future] 64 bit Go ints - if IntBits == 64 { - return BitLenUint64(uint64(n)) - } - - if b := byte(n >> 24); b != 0 { - return log2[b] + 24 + 1 - } - - if b := byte(n >> 16); b != 0 { - return log2[b] + 16 + 1 - } - - if b := byte(n >> 8); b != 0 { - return log2[b] + 8 + 1 - } - - return log2[byte(n)] + 1 -} - -// BitLenUint returns the bit width of the non zero part of n. -func BitLenUint(n uint) int { // Should handle correctly [future] 64 bit Go uints - if IntBits == 64 { - return BitLenUint64(uint64(n)) - } - - if b := n >> 24; b != 0 { - return log2[b] + 24 + 1 - } - - if b := n >> 16; b != 0 { - return log2[b] + 16 + 1 - } - - if b := n >> 8; b != 0 { - return log2[b] + 8 + 1 - } - - return log2[n] + 1 -} - -// BitLenUint64 returns the bit width of the non zero part of n. -func BitLenUint64(n uint64) int { - if b := n >> 56; b != 0 { - return log2[b] + 56 + 1 - } - - if b := n >> 48; b != 0 { - return log2[b] + 48 + 1 - } - - if b := n >> 40; b != 0 { - return log2[b] + 40 + 1 - } - - if b := n >> 32; b != 0 { - return log2[b] + 32 + 1 - } - - if b := n >> 24; b != 0 { - return log2[b] + 24 + 1 - } - - if b := n >> 16; b != 0 { - return log2[b] + 16 + 1 - } - - if b := n >> 8; b != 0 { - return log2[b] + 8 + 1 - } - - return log2[n] + 1 -} - -// BitLenUintptr returns the bit width of the non zero part of n. -func BitLenUintptr(n uintptr) int { - if b := n >> 56; b != 0 { - return log2[b] + 56 + 1 - } - - if b := n >> 48; b != 0 { - return log2[b] + 48 + 1 - } - - if b := n >> 40; b != 0 { - return log2[b] + 40 + 1 - } - - if b := n >> 32; b != 0 { - return log2[b] + 32 + 1 - } - - if b := n >> 24; b != 0 { - return log2[b] + 24 + 1 - } - - if b := n >> 16; b != 0 { - return log2[b] + 16 + 1 - } - - if b := n >> 8; b != 0 { - return log2[b] + 8 + 1 - } - - return log2[n] + 1 -} - -// PopCountByte returns population count of n (number of bits set in n). -func PopCountByte(n byte) int { - return int(popcnt[n]) -} - -// PopCountUint16 returns population count of n (number of bits set in n). -func PopCountUint16(n uint16) int { - return int(popcnt[byte(n>>8)]) + int(popcnt[byte(n)]) -} - -// PopCountUint32 returns population count of n (number of bits set in n). -func PopCountUint32(n uint32) int { - return int(popcnt[byte(n>>24)]) + int(popcnt[byte(n>>16)]) + - int(popcnt[byte(n>>8)]) + int(popcnt[byte(n)]) -} - -// PopCount returns population count of n (number of bits set in n). -func PopCount(n int) int { // Should handle correctly [future] 64 bit Go ints - if IntBits == 64 { - return PopCountUint64(uint64(n)) - } - - return PopCountUint32(uint32(n)) -} - -// PopCountUint returns population count of n (number of bits set in n). -func PopCountUint(n uint) int { // Should handle correctly [future] 64 bit Go uints - if IntBits == 64 { - return PopCountUint64(uint64(n)) - } - - return PopCountUint32(uint32(n)) -} - -// PopCountUintptr returns population count of n (number of bits set in n). -func PopCountUintptr(n uintptr) int { - if UintPtrBits == 64 { - return PopCountUint64(uint64(n)) - } - - return PopCountUint32(uint32(n)) -} - -// PopCountUint64 returns population count of n (number of bits set in n). -func PopCountUint64(n uint64) int { - return int(popcnt[byte(n>>56)]) + int(popcnt[byte(n>>48)]) + - int(popcnt[byte(n>>40)]) + int(popcnt[byte(n>>32)]) + - int(popcnt[byte(n>>24)]) + int(popcnt[byte(n>>16)]) + - int(popcnt[byte(n>>8)]) + int(popcnt[byte(n)]) -} - -// PopCountBigInt returns population count of |n| (number of bits set in |n|). -func PopCountBigInt(n *big.Int) (r int) { - for _, v := range n.Bits() { - r += PopCountUintptr(uintptr(v)) - } - return -} diff --git a/vendor/github.com/cznic/mathutil/envelope.go b/vendor/github.com/cznic/mathutil/envelope.go deleted file mode 100644 index ff8e601..0000000 --- a/vendor/github.com/cznic/mathutil/envelope.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) 2014 The mathutil Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package mathutil - -import ( - "math" -) - -// Approximation type determines approximation methods used by e.g. Envelope. -type Approximation int - -// Specific approximation method tags -const ( - _ Approximation = iota - Linear // As named - Sinusoidal // Smooth for all derivations -) - -// Envelope is an utility for defining simple curves using a small (usually) -// set of data points. Envelope returns a value defined by x, points and -// approximation. The value of x must be in [0,1) otherwise the result is -// undefined or the function may panic. Points are interpreted as dividing the -// [0,1) interval in len(points)-1 sections, so len(points) must be > 1 or the -// function may panic. According to the left and right points closing/adjacent -// to the section the resulting value is interpolated using the chosen -// approximation method. Unsupported values of approximation are silently -// interpreted as 'Linear'. -func Envelope(x float64, points []float64, approximation Approximation) float64 { - step := 1 / float64(len(points)-1) - fslot := math.Floor(x / step) - mod := x - fslot*step - slot := int(fslot) - l, r := points[slot], points[slot+1] - rmod := mod / step - switch approximation { - case Sinusoidal: - k := (math.Sin(math.Pi*(rmod-0.5)) + 1) / 2 - return l + (r-l)*k - case Linear: - fallthrough - default: - return l + (r-l)*rmod - } -} diff --git a/vendor/github.com/cznic/mathutil/int.go b/vendor/github.com/cznic/mathutil/int.go deleted file mode 100644 index 8255c42..0000000 --- a/vendor/github.com/cznic/mathutil/int.go +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright (c) 2018 The mathutil Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package mathutil - -import ( - "fmt" - "math" - "math/big" -) - -var ( - // The maximun Int128 value. - MaxInt128 *big.Int - // The minimun Int128 value. - MinInt128 *big.Int -) - -func init() { - MaxInt128 = big.NewInt(0) - MaxInt128.SetBit(MaxInt128, 127, 1) - MaxInt128.Sub(MaxInt128, _1) - MinInt128 = big.NewInt(0) - MinInt128.Set(MaxInt128) - MinInt128.Add(MinInt128, _1) - MinInt128.Neg(MinInt128) -} - -// Int128 is an 128 bit integer. -type Int128 struct { - Lo int64 // Bits 63..0. - Hi int64 // Bits 127..64. -} - -// Add returns the sum of x and y and a carry indication. -func (x Int128) Add(y Int128) (r Int128, cy bool) { - r.Lo = x.Lo + y.Lo - r.Hi = x.Hi + y.Hi - if uint64(r.Lo) < uint64(x.Lo) { - r.Hi++ - } - return r, (r.Cmp(x) < 0) == (y.Sign() >= 0) -} - -// BigInt returns x in the form of a big.Int. -func (x Int128) BigInt() *big.Int { - r := big.NewInt(x.Hi) - r.Lsh(r, 64) - lo := big.NewInt(0) - lo.SetUint64(uint64(x.Lo)) - return r.Add(r, lo) -} - -// Cmp compares x and y and returns: -// -// -1 if x < y -// 0 if x == y -// +1 if x > y -func (x Int128) Cmp(y Int128) int { - if x.Hi > y.Hi { - return 1 - } - - if x.Hi < y.Hi { - return -1 - } - - if uint64(x.Lo) > uint64(y.Lo) { - return 1 - } - - if uint64(x.Lo) < uint64(y.Lo) { - return -1 - } - - return 0 -} - -// Neg returns -x and an indication that x was not equal to MinInt128. -func (x Int128) Neg() (r Int128, ok bool) { - if x == (Int128{Hi: math.MinInt64}) { - return x, false - } - - x.Lo = ^x.Lo - x.Hi = ^x.Hi - r, _ = x.Add(Int128{Lo: 1}) - return r, true -} - -// SetBigInt sets x to y, returns x and an error, if any. -func (x *Int128) SetBigInt(y *big.Int) (r Int128, err error) { - if y.Cmp(MaxInt128) > 0 { - return *x, fmt.Errorf("%T.SetInt: overflow", x) - } - if y.Cmp(MinInt128) < 0 { - return *x, fmt.Errorf("%T.SetInt: underflow", x) - } - neg := y.Sign() < 0 - var z big.Int - z.Set(y) - if neg { - z.Neg(&z) - } - r.Lo = z.Int64() - z.Rsh(&z, 64) - r.Hi = z.Int64() - if neg { - r, _ = r.Neg() - } - *x = r - return r, nil -} - -// SetInt64 sets x to y and returns x. -func (x *Int128) SetInt64(y int64) (r Int128) { - r.Lo = y - if y >= 0 { - r.Hi = 0 - *x = r - return r - } - - r.Hi = -1 - *x = r - return r -} - -// SetInt64 sets x to y and returns x. -func (x *Int128) SetUint64(y uint64) (r Int128) { - r = Int128{Lo: int64(y)} - *x = r - return r -} - -// Sign returns: -// -// -1 if x < 0 -// 0 if x == 0 -// +1 if x > 0 -func (x Int128) Sign() int { - if x.Hi < 0 { - return -1 - } - - if x.Hi != 0 || x.Lo != 0 { - return 1 - } - - return 0 -} - -// String implements fmt.Stringer() -func (x Int128) String() string { return x.BigInt().String() } diff --git a/vendor/github.com/cznic/mathutil/mathutil.go b/vendor/github.com/cznic/mathutil/mathutil.go deleted file mode 100644 index 01c823e..0000000 --- a/vendor/github.com/cznic/mathutil/mathutil.go +++ /dev/null @@ -1,1416 +0,0 @@ -// Copyright (c) 2014 The mathutil Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package mathutil provides utilities supplementing the standard 'math' and -// 'math/rand' packages. -// -// Release history and compatibility issues -// -// 2018-04-25: New functions for determing Max/Min of nullable values. Ex: -// func MaxPtr(a, b *int) *int { -// func MinPtr(a, b *int) *int { -// func MaxBytePtr(a, b *byte) *byte { -// func MinBytePtr(a, b *byte) *byte { -// ... -// -// 2017-10-14: New variadic functions for Max/Min. Ex: -// func MaxVal(val int, vals ...int) int { -// func MinVal(val int, vals ...int) int { -// func MaxByteVal(val byte, vals ...byte) byte { -// func MinByteVal(val byte, vals ...byte) byte { -// ... -// -// 2016-10-10: New functions QuadPolyDiscriminant and QuadPolyFactors. -// -// 2013-12-13: The following functions have been REMOVED -// -// func Uint64ToBigInt(n uint64) *big.Int -// func Uint64FromBigInt(n *big.Int) (uint64, bool) -// -// 2013-05-13: The following functions are now DEPRECATED -// -// func Uint64ToBigInt(n uint64) *big.Int -// func Uint64FromBigInt(n *big.Int) (uint64, bool) -// -// These functions will be REMOVED with Go release 1.1+1. -// -// 2013-01-21: The following functions have been REMOVED -// -// func MaxInt() int -// func MinInt() int -// func MaxUint() uint -// func UintPtrBits() int -// -// They are now replaced by untyped constants -// -// MaxInt -// MinInt -// MaxUint -// UintPtrBits -// -// Additionally one more untyped constant was added -// -// IntBits -// -// This change breaks any existing code depending on the above removed -// functions. They should have not been published in the first place, that was -// unfortunate. Instead, defining such architecture and/or implementation -// specific integer limits and bit widths as untyped constants improves -// performance and allows for static dead code elimination if it depends on -// these values. Thanks to minux for pointing it out in the mail list -// (https://groups.google.com/d/msg/golang-nuts/tlPpLW6aJw8/NT3mpToH-a4J). -// -// 2012-12-12: The following functions will be DEPRECATED with Go release -// 1.0.3+1 and REMOVED with Go release 1.0.3+2, b/c of -// http://code.google.com/p/go/source/detail?r=954a79ee3ea8 -// -// func Uint64ToBigInt(n uint64) *big.Int -// func Uint64FromBigInt(n *big.Int) (uint64, bool) -package mathutil - -import ( - "math" - "math/big" -) - -// Architecture and/or implementation specific integer limits and bit widths. -const ( - MaxInt = 1<<(IntBits-1) - 1 - MinInt = -MaxInt - 1 - MaxUint = 1<>32&1 + ^uint(0)>>16&1 + ^uint(0)>>8&1 + 3) - UintPtrBits = 1 << (^uintptr(0)>>32&1 + ^uintptr(0)>>16&1 + ^uintptr(0)>>8&1 + 3) -) - -var ( - _m1 = big.NewInt(-1) - _1 = big.NewInt(1) - _2 = big.NewInt(2) -) - -// GCDByte returns the greatest common divisor of a and b. Based on: -// http://en.wikipedia.org/wiki/Euclidean_algorithm#Implementations -func GCDByte(a, b byte) byte { - for b != 0 { - a, b = b, a%b - } - return a -} - -// GCDUint16 returns the greatest common divisor of a and b. -func GCDUint16(a, b uint16) uint16 { - for b != 0 { - a, b = b, a%b - } - return a -} - -// GCDUint32 returns the greatest common divisor of a and b. -func GCDUint32(a, b uint32) uint32 { - for b != 0 { - a, b = b, a%b - } - return a -} - -// GCDUint64 returns the greatest common divisor of a and b. -func GCDUint64(a, b uint64) uint64 { - for b != 0 { - a, b = b, a%b - } - return a -} - -// ISqrt returns floor(sqrt(n)). Typical run time is few hundreds of ns. -func ISqrt(n uint32) (x uint32) { - if n == 0 { - return - } - - if n >= math.MaxUint16*math.MaxUint16 { - return math.MaxUint16 - } - - var px, nx uint32 - for x = n; ; px, x = x, nx { - nx = (x + n/x) / 2 - if nx == x || nx == px { - break - } - } - return -} - -// SqrtUint64 returns floor(sqrt(n)). Typical run time is about 0.5 µs. -func SqrtUint64(n uint64) (x uint64) { - if n == 0 { - return - } - - if n >= math.MaxUint32*math.MaxUint32 { - return math.MaxUint32 - } - - var px, nx uint64 - for x = n; ; px, x = x, nx { - nx = (x + n/x) / 2 - if nx == x || nx == px { - break - } - } - return -} - -// SqrtBig returns floor(sqrt(n)). It panics on n < 0. -func SqrtBig(n *big.Int) (x *big.Int) { - switch n.Sign() { - case -1: - panic(-1) - case 0: - return big.NewInt(0) - } - - var px, nx big.Int - x = big.NewInt(0) - x.SetBit(x, n.BitLen()/2+1, 1) - for { - nx.Rsh(nx.Add(x, nx.Div(n, x)), 1) - if nx.Cmp(x) == 0 || nx.Cmp(&px) == 0 { - break - } - px.Set(x) - x.Set(&nx) - } - return -} - -// Log2Byte returns log base 2 of n. It's the same as index of the highest -// bit set in n. For n == 0 -1 is returned. -func Log2Byte(n byte) int { - return log2[n] -} - -// Log2Uint16 returns log base 2 of n. It's the same as index of the highest -// bit set in n. For n == 0 -1 is returned. -func Log2Uint16(n uint16) int { - if b := n >> 8; b != 0 { - return log2[b] + 8 - } - - return log2[n] -} - -// Log2Uint32 returns log base 2 of n. It's the same as index of the highest -// bit set in n. For n == 0 -1 is returned. -func Log2Uint32(n uint32) int { - if b := n >> 24; b != 0 { - return log2[b] + 24 - } - - if b := n >> 16; b != 0 { - return log2[b] + 16 - } - - if b := n >> 8; b != 0 { - return log2[b] + 8 - } - - return log2[n] -} - -// Log2Uint64 returns log base 2 of n. It's the same as index of the highest -// bit set in n. For n == 0 -1 is returned. -func Log2Uint64(n uint64) int { - if b := n >> 56; b != 0 { - return log2[b] + 56 - } - - if b := n >> 48; b != 0 { - return log2[b] + 48 - } - - if b := n >> 40; b != 0 { - return log2[b] + 40 - } - - if b := n >> 32; b != 0 { - return log2[b] + 32 - } - - if b := n >> 24; b != 0 { - return log2[b] + 24 - } - - if b := n >> 16; b != 0 { - return log2[b] + 16 - } - - if b := n >> 8; b != 0 { - return log2[b] + 8 - } - - return log2[n] -} - -// ModPowByte computes (b^e)%m. It panics for m == 0 || b == e == 0. -// -// See also: http://en.wikipedia.org/wiki/Modular_exponentiation#Right-to-left_binary_method -func ModPowByte(b, e, m byte) byte { - if b == 0 && e == 0 { - panic(0) - } - - if m == 1 { - return 0 - } - - r := uint16(1) - for b, m := uint16(b), uint16(m); e > 0; b, e = b*b%m, e>>1 { - if e&1 == 1 { - r = r * b % m - } - } - return byte(r) -} - -// ModPowUint16 computes (b^e)%m. It panics for m == 0 || b == e == 0. -func ModPowUint16(b, e, m uint16) uint16 { - if b == 0 && e == 0 { - panic(0) - } - - if m == 1 { - return 0 - } - - r := uint32(1) - for b, m := uint32(b), uint32(m); e > 0; b, e = b*b%m, e>>1 { - if e&1 == 1 { - r = r * b % m - } - } - return uint16(r) -} - -// ModPowUint32 computes (b^e)%m. It panics for m == 0 || b == e == 0. -func ModPowUint32(b, e, m uint32) uint32 { - if b == 0 && e == 0 { - panic(0) - } - - if m == 1 { - return 0 - } - - r := uint64(1) - for b, m := uint64(b), uint64(m); e > 0; b, e = b*b%m, e>>1 { - if e&1 == 1 { - r = r * b % m - } - } - return uint32(r) -} - -// ModPowUint64 computes (b^e)%m. It panics for m == 0 || b == e == 0. -func ModPowUint64(b, e, m uint64) (r uint64) { - if b == 0 && e == 0 { - panic(0) - } - - if m == 1 { - return 0 - } - - return modPowBigInt(big.NewInt(0).SetUint64(b), big.NewInt(0).SetUint64(e), big.NewInt(0).SetUint64(m)).Uint64() -} - -func modPowBigInt(b, e, m *big.Int) (r *big.Int) { - r = big.NewInt(1) - for i, n := 0, e.BitLen(); i < n; i++ { - if e.Bit(i) != 0 { - r.Mod(r.Mul(r, b), m) - } - b.Mod(b.Mul(b, b), m) - } - return -} - -// ModPowBigInt computes (b^e)%m. Returns nil for e < 0. It panics for m == 0 || b == e == 0. -func ModPowBigInt(b, e, m *big.Int) (r *big.Int) { - if b.Sign() == 0 && e.Sign() == 0 { - panic(0) - } - - if m.Cmp(_1) == 0 { - return big.NewInt(0) - } - - if e.Sign() < 0 { - return - } - - return modPowBigInt(big.NewInt(0).Set(b), big.NewInt(0).Set(e), m) -} - -var uint64ToBigIntDelta big.Int - -func init() { - uint64ToBigIntDelta.SetBit(&uint64ToBigIntDelta, 63, 1) -} - -var uintptrBits int - -func init() { - x := uint64(math.MaxUint64) - uintptrBits = BitLenUintptr(uintptr(x)) -} - -// UintptrBits returns the bit width of an uintptr at the executing machine. -func UintptrBits() int { - return uintptrBits -} - -// AddUint128_64 returns the uint128 sum of uint64 a and b. -func AddUint128_64(a, b uint64) (hi uint64, lo uint64) { - lo = a + b - if lo < a { - hi = 1 - } - return hi, lo -} - -// MulUint128_64 returns the uint128 bit product of uint64 a and b. -func MulUint128_64(a, b uint64) (hi, lo uint64) { - /* - 2^(2 W) ahi bhi + 2^W alo bhi + 2^W ahi blo + alo blo - - FEDCBA98 76543210 FEDCBA98 76543210 - ---- alo*blo ---- - ---- alo*bhi ---- - ---- ahi*blo ---- - ---- ahi*bhi ---- - */ - const w = 32 - const m = 1<>w, b>>w, a&m, b&m - lo = alo * blo - mid1 := alo * bhi - mid2 := ahi * blo - c1, lo := AddUint128_64(lo, mid1<>w+mid2>>w+c1+c2) - return -} - -// PowerizeBigInt returns (e, p) such that e is the smallest number for which p -// == b^e is greater or equal n. For n < 0 or b < 2 (0, nil) is returned. -// -// NOTE: Run time for large values of n (above about 2^1e6 ~= 1e300000) can be -// significant and/or unacceptabe. For any smaller values of n the function -// typically performs in sub second time. For "small" values of n (cca bellow -// 2^1e3 ~= 1e300) the same can be easily below 10 µs. -// -// A special (and trivial) case of b == 2 is handled separately and performs -// much faster. -func PowerizeBigInt(b, n *big.Int) (e uint32, p *big.Int) { - switch { - case b.Cmp(_2) < 0 || n.Sign() < 0: - return - case n.Sign() == 0 || n.Cmp(_1) == 0: - return 0, big.NewInt(1) - case b.Cmp(_2) == 0: - p = big.NewInt(0) - e = uint32(n.BitLen() - 1) - p.SetBit(p, int(e), 1) - if p.Cmp(n) < 0 { - p.Mul(p, _2) - e++ - } - return - } - - bw := b.BitLen() - nw := n.BitLen() - p = big.NewInt(1) - var bb, r big.Int - for { - switch p.Cmp(n) { - case -1: - x := uint32((nw - p.BitLen()) / bw) - if x == 0 { - x = 1 - } - e += x - switch x { - case 1: - p.Mul(p, b) - default: - r.Set(_1) - bb.Set(b) - e := x - for { - if e&1 != 0 { - r.Mul(&r, &bb) - } - if e >>= 1; e == 0 { - break - } - - bb.Mul(&bb, &bb) - } - p.Mul(p, &r) - } - case 0, 1: - return - } - } -} - -// PowerizeUint32BigInt returns (e, p) such that e is the smallest number for -// which p == b^e is greater or equal n. For n < 0 or b < 2 (0, nil) is -// returned. -// -// More info: see PowerizeBigInt. -func PowerizeUint32BigInt(b uint32, n *big.Int) (e uint32, p *big.Int) { - switch { - case b < 2 || n.Sign() < 0: - return - case n.Sign() == 0 || n.Cmp(_1) == 0: - return 0, big.NewInt(1) - case b == 2: - p = big.NewInt(0) - e = uint32(n.BitLen() - 1) - p.SetBit(p, int(e), 1) - if p.Cmp(n) < 0 { - p.Mul(p, _2) - e++ - } - return - } - - var bb big.Int - bb.SetInt64(int64(b)) - return PowerizeBigInt(&bb, n) -} - -/* -ProbablyPrimeUint32 returns true if n is prime or n is a pseudoprime to base a. -It implements the Miller-Rabin primality test for one specific value of 'a' and -k == 1. - -Wrt pseudocode shown at -http://en.wikipedia.org/wiki/Miller-Rabin_primality_test#Algorithm_and_running_time - - Input: n > 3, an odd integer to be tested for primality; - Input: k, a parameter that determines the accuracy of the test - Output: composite if n is composite, otherwise probably prime - write n − 1 as 2^s·d with d odd by factoring powers of 2 from n − 1 - LOOP: repeat k times: - pick a random integer a in the range [2, n − 2] - x ← a^d mod n - if x = 1 or x = n − 1 then do next LOOP - for r = 1 .. s − 1 - x ← x^2 mod n - if x = 1 then return composite - if x = n − 1 then do next LOOP - return composite - return probably prime - -... this function behaves like passing 1 for 'k' and additionally a -fixed/non-random 'a'. Otherwise it's the same algorithm. - -See also: http://mathworld.wolfram.com/Rabin-MillerStrongPseudoprimeTest.html -*/ -func ProbablyPrimeUint32(n, a uint32) bool { - d, s := n-1, 0 - for ; d&1 == 0; d, s = d>>1, s+1 { - } - x := uint64(ModPowUint32(a, d, n)) - if x == 1 || uint32(x) == n-1 { - return true - } - - for ; s > 1; s-- { - if x = x * x % uint64(n); x == 1 { - return false - } - - if uint32(x) == n-1 { - return true - } - } - return false -} - -// ProbablyPrimeUint64_32 returns true if n is prime or n is a pseudoprime to -// base a. It implements the Miller-Rabin primality test for one specific value -// of 'a' and k == 1. See also ProbablyPrimeUint32. -func ProbablyPrimeUint64_32(n uint64, a uint32) bool { - d, s := n-1, 0 - for ; d&1 == 0; d, s = d>>1, s+1 { - } - x := ModPowUint64(uint64(a), d, n) - if x == 1 || x == n-1 { - return true - } - - bx, bn := big.NewInt(0).SetUint64(x), big.NewInt(0).SetUint64(n) - for ; s > 1; s-- { - if x = bx.Mod(bx.Mul(bx, bx), bn).Uint64(); x == 1 { - return false - } - - if x == n-1 { - return true - } - } - return false -} - -// ProbablyPrimeBigInt_32 returns true if n is prime or n is a pseudoprime to -// base a. It implements the Miller-Rabin primality test for one specific value -// of 'a' and k == 1. See also ProbablyPrimeUint32. -func ProbablyPrimeBigInt_32(n *big.Int, a uint32) bool { - var d big.Int - d.Set(n) - d.Sub(&d, _1) // d <- n-1 - s := 0 - for ; d.Bit(s) == 0; s++ { - } - nMinus1 := big.NewInt(0).Set(&d) - d.Rsh(&d, uint(s)) - - x := ModPowBigInt(big.NewInt(int64(a)), &d, n) - if x.Cmp(_1) == 0 || x.Cmp(nMinus1) == 0 { - return true - } - - for ; s > 1; s-- { - if x = x.Mod(x.Mul(x, x), n); x.Cmp(_1) == 0 { - return false - } - - if x.Cmp(nMinus1) == 0 { - return true - } - } - return false -} - -// ProbablyPrimeBigInt returns true if n is prime or n is a pseudoprime to base -// a. It implements the Miller-Rabin primality test for one specific value of -// 'a' and k == 1. See also ProbablyPrimeUint32. -func ProbablyPrimeBigInt(n, a *big.Int) bool { - var d big.Int - d.Set(n) - d.Sub(&d, _1) // d <- n-1 - s := 0 - for ; d.Bit(s) == 0; s++ { - } - nMinus1 := big.NewInt(0).Set(&d) - d.Rsh(&d, uint(s)) - - x := ModPowBigInt(a, &d, n) - if x.Cmp(_1) == 0 || x.Cmp(nMinus1) == 0 { - return true - } - - for ; s > 1; s-- { - if x = x.Mod(x.Mul(x, x), n); x.Cmp(_1) == 0 { - return false - } - - if x.Cmp(nMinus1) == 0 { - return true - } - } - return false -} - -// Max returns the larger of a and b. -func Max(a, b int) int { - if a > b { - return a - } - - return b -} - -// Min returns the smaller of a and b. -func Min(a, b int) int { - if a < b { - return a - } - - return b -} - -// MaxPtr returns a pointer to the larger of a and b, or nil. -func MaxPtr(a, b *int) *int { - if a == nil { - return b - } - if b == nil { - return a - } - if *a > *b { - return a - } - - return b -} - -// MinPtr returns a pointer to the smaller of a and b, or nil. -func MinPtr(a, b *int) *int { - if a == nil { - return b - } - if b == nil { - return a - } - if *a < *b { - return a - } - - return b -} - -// MaxVal returns the largest argument passed. -func MaxVal(val int, vals ...int) int { - res := val - for _, v := range vals { - if v > res { - res = v - } - } - return res -} - -// MinVal returns the smallest argument passed. -func MinVal(val int, vals ...int) int { - res := val - for _, v := range vals { - if v < res { - res = v - } - } - return res -} - -// Clamp returns a value restricted between lo and hi. -func Clamp(v, lo, hi int) int { - return Min(Max(v, lo), hi) -} - -// UMax returns the larger of a and b. -func UMax(a, b uint) uint { - if a > b { - return a - } - - return b -} - -// UMin returns the smaller of a and b. -func UMin(a, b uint) uint { - if a < b { - return a - } - - return b -} - -// UMaxPtr returns a pointer to the larger of a and b, or nil. -func UMaxPtr(a, b *uint) *uint { - if a == nil { - return b - } - if b == nil { - return a - } - if *a > *b { - return a - } - - return b -} - -// UMinPtr returns a pointer to the smaller of a and b, or nil. -func UMinPtr(a, b *uint) *uint { - if a == nil { - return b - } - if b == nil { - return a - } - if *a < *b { - return a - } - - return b -} - -// UMaxVal returns the largest argument passed. -func UMaxVal(val uint, vals ...uint) uint { - res := val - for _, v := range vals { - if v > res { - res = v - } - } - return res -} - -// UMinVal returns the smallest argument passed. -func UMinVal(val uint, vals ...uint) uint { - res := val - for _, v := range vals { - if v < res { - res = v - } - } - return res -} - -// UClamp returns a value restricted between lo and hi. -func UClamp(v, lo, hi uint) uint { - return UMin(UMax(v, lo), hi) -} - -// MaxByte returns the larger of a and b. -func MaxByte(a, b byte) byte { - if a > b { - return a - } - - return b -} - -// MinByte returns the smaller of a and b. -func MinByte(a, b byte) byte { - if a < b { - return a - } - - return b -} - -// MaxBytePtr returns a pointer to the larger of a and b, or nil. -func MaxBytePtr(a, b *byte) *byte { - if a == nil { - return b - } - if b == nil { - return a - } - if *a > *b { - return a - } - - return b -} - -// MinBytePtr returns a pointer to the smaller of a and b, or nil. -func MinBytePtr(a, b *byte) *byte { - if a == nil { - return b - } - if b == nil { - return a - } - if *a < *b { - return a - } - - return b -} - -// MaxByteVal returns the largest argument passed. -func MaxByteVal(val byte, vals ...byte) byte { - res := val - for _, v := range vals { - if v > res { - res = v - } - } - return res -} - -// MinByteVal returns the smallest argument passed. -func MinByteVal(val byte, vals ...byte) byte { - res := val - for _, v := range vals { - if v < res { - res = v - } - } - return res -} - -// ClampByte returns a value restricted between lo and hi. -func ClampByte(v, lo, hi byte) byte { - return MinByte(MaxByte(v, lo), hi) -} - -// MaxInt8 returns the larger of a and b. -func MaxInt8(a, b int8) int8 { - if a > b { - return a - } - - return b -} - -// MinInt8 returns the smaller of a and b. -func MinInt8(a, b int8) int8 { - if a < b { - return a - } - - return b -} - -// MaxInt8Ptr returns a pointer to the larger of a and b, or nil. -func MaxInt8Ptr(a, b *int8) *int8 { - if a == nil { - return b - } - if b == nil { - return a - } - if *a > *b { - return a - } - - return b -} - -// MinInt8Ptr returns a pointer to the smaller of a and b, or nil. -func MinInt8Ptr(a, b *int8) *int8 { - if a == nil { - return b - } - if b == nil { - return a - } - if *a < *b { - return a - } - - return b -} - -// MaxInt8Val returns the largest argument passed. -func MaxInt8Val(val int8, vals ...int8) int8 { - res := val - for _, v := range vals { - if v > res { - res = v - } - } - return res -} - -// MinInt8Val returns the smallest argument passed. -func MinInt8Val(val int8, vals ...int8) int8 { - res := val - for _, v := range vals { - if v < res { - res = v - } - } - return res -} - -// ClampInt8 returns a value restricted between lo and hi. -func ClampInt8(v, lo, hi int8) int8 { - return MinInt8(MaxInt8(v, lo), hi) -} - -// MaxUint16 returns the larger of a and b. -func MaxUint16(a, b uint16) uint16 { - if a > b { - return a - } - - return b -} - -// MinUint16 returns the smaller of a and b. -func MinUint16(a, b uint16) uint16 { - if a < b { - return a - } - - return b -} - -// MaxUint16Ptr returns a pointer to the larger of a and b, or nil. -func MaxUint16Ptr(a, b *uint16) *uint16 { - if a == nil { - return b - } - if b == nil { - return a - } - if *a > *b { - return a - } - - return b -} - -// MinUint16Ptr returns a pointer to the smaller of a and b, or nil. -func MinUint16Ptr(a, b *uint16) *uint16 { - if a == nil { - return b - } - if b == nil { - return a - } - if *a < *b { - return a - } - - return b -} - -// MaxUint16Val returns the largest argument passed. -func MaxUint16Val(val uint16, vals ...uint16) uint16 { - res := val - for _, v := range vals { - if v > res { - res = v - } - } - return res -} - -// MinUint16Val returns the smallest argument passed. -func MinUint16Val(val uint16, vals ...uint16) uint16 { - res := val - for _, v := range vals { - if v < res { - res = v - } - } - return res -} - -// ClampUint16 returns a value restricted between lo and hi. -func ClampUint16(v, lo, hi uint16) uint16 { - return MinUint16(MaxUint16(v, lo), hi) -} - -// MaxInt16 returns the larger of a and b. -func MaxInt16(a, b int16) int16 { - if a > b { - return a - } - - return b -} - -// MinInt16 returns the smaller of a and b. -func MinInt16(a, b int16) int16 { - if a < b { - return a - } - - return b -} - -// MaxInt16Ptr returns a pointer to the larger of a and b, or nil. -func MaxInt16Ptr(a, b *int16) *int16 { - if a == nil { - return b - } - if b == nil { - return a - } - if *a > *b { - return a - } - - return b -} - -// MinInt16Ptr returns a pointer to the smaller of a and b, or nil. -func MinInt16Ptr(a, b *int16) *int16 { - if a == nil { - return b - } - if b == nil { - return a - } - if *a < *b { - return a - } - - return b -} - -// MaxInt16Val returns the largest argument passed. -func MaxInt16Val(val int16, vals ...int16) int16 { - res := val - for _, v := range vals { - if v > res { - res = v - } - } - return res -} - -// MinInt16Val returns the smallest argument passed. -func MinInt16Val(val int16, vals ...int16) int16 { - res := val - for _, v := range vals { - if v < res { - res = v - } - } - return res -} - -// ClampInt16 returns a value restricted between lo and hi. -func ClampInt16(v, lo, hi int16) int16 { - return MinInt16(MaxInt16(v, lo), hi) -} - -// MaxUint32 returns the larger of a and b. -func MaxUint32(a, b uint32) uint32 { - if a > b { - return a - } - - return b -} - -// MinUint32 returns the smaller of a and b. -func MinUint32(a, b uint32) uint32 { - if a < b { - return a - } - - return b -} - -// MaxUint32Ptr returns a pointer to the larger of a and b, or nil. -func MaxUint32Ptr(a, b *uint32) *uint32 { - if a == nil { - return b - } - if b == nil { - return a - } - if *a > *b { - return a - } - - return b -} - -// MinUint32Ptr returns a pointer to the smaller of a and b, or nil. -func MinUint32Ptr(a, b *uint32) *uint32 { - if a == nil { - return b - } - if b == nil { - return a - } - if *a < *b { - return a - } - - return b -} - -// MaxUint32Val returns the largest argument passed. -func MaxUint32Val(val uint32, vals ...uint32) uint32 { - res := val - for _, v := range vals { - if v > res { - res = v - } - } - return res -} - -// MinUint32Val returns the smallest argument passed. -func MinUint32Val(val uint32, vals ...uint32) uint32 { - res := val - for _, v := range vals { - if v < res { - res = v - } - } - return res -} - -// ClampUint32 returns a value restricted between lo and hi. -func ClampUint32(v, lo, hi uint32) uint32 { - return MinUint32(MaxUint32(v, lo), hi) -} - -// MaxInt32 returns the larger of a and b. -func MaxInt32(a, b int32) int32 { - if a > b { - return a - } - - return b -} - -// MinInt32 returns the smaller of a and b. -func MinInt32(a, b int32) int32 { - if a < b { - return a - } - - return b -} - -// MaxInt32Ptr returns a pointer to the larger of a and b, or nil. -func MaxInt32Ptr(a, b *int32) *int32 { - if a == nil { - return b - } - if b == nil { - return a - } - if *a > *b { - return a - } - - return b -} - -// MinInt32Ptr returns a pointer to the smaller of a and b, or nil. -func MinInt32Ptr(a, b *int32) *int32 { - if a == nil { - return b - } - if b == nil { - return a - } - if *a < *b { - return a - } - - return b -} - -// MaxInt32Val returns the largest argument passed. -func MaxInt32Val(val int32, vals ...int32) int32 { - res := val - for _, v := range vals { - if v > res { - res = v - } - } - return res -} - -// MinInt32Val returns the smallest argument passed. -func MinInt32Val(val int32, vals ...int32) int32 { - res := val - for _, v := range vals { - if v < res { - res = v - } - } - return res -} - -// ClampInt32 returns a value restricted between lo and hi. -func ClampInt32(v, lo, hi int32) int32 { - return MinInt32(MaxInt32(v, lo), hi) -} - -// MaxUint64 returns the larger of a and b. -func MaxUint64(a, b uint64) uint64 { - if a > b { - return a - } - - return b -} - -// MinUint64 returns the smaller of a and b. -func MinUint64(a, b uint64) uint64 { - if a < b { - return a - } - - return b -} - -// MaxUint64Ptr returns a pointer to the larger of a and b, or nil. -func MaxUint64Ptr(a, b *uint64) *uint64 { - if a == nil { - return b - } - if b == nil { - return a - } - if *a > *b { - return a - } - - return b -} - -// MinUint64Ptr returns a pointer to the smaller of a and b, or nil. -func MinUint64Ptr(a, b *uint64) *uint64 { - if a == nil { - return b - } - if b == nil { - return a - } - if *a < *b { - return a - } - - return b -} - -// MaxUint64Val returns the largest argument passed. -func MaxUint64Val(val uint64, vals ...uint64) uint64 { - res := val - for _, v := range vals { - if v > res { - res = v - } - } - return res -} - -// MinUint64Val returns the smallest argument passed. -func MinUint64Val(val uint64, vals ...uint64) uint64 { - res := val - for _, v := range vals { - if v < res { - res = v - } - } - return res -} - -// ClampUint64 returns a value restricted between lo and hi. -func ClampUint64(v, lo, hi uint64) uint64 { - return MinUint64(MaxUint64(v, lo), hi) -} - -// MaxInt64 returns the larger of a and b. -func MaxInt64(a, b int64) int64 { - if a > b { - return a - } - - return b -} - -// MinInt64 returns the smaller of a and b. -func MinInt64(a, b int64) int64 { - if a < b { - return a - } - - return b -} - -// MaxInt64Ptr returns a pointer to the larger of a and b, or nil. -func MaxInt64Ptr(a, b *int64) *int64 { - if a == nil { - return b - } - if b == nil { - return a - } - if *a > *b { - return a - } - - return b -} - -// MinInt64Ptr returns a pointer to the smaller of a and b, or nil. -func MinInt64Ptr(a, b *int64) *int64 { - if a == nil { - return b - } - if b == nil { - return a - } - if *a < *b { - return a - } - - return b -} - -// MaxInt64Val returns the largest argument passed. -func MaxInt64Val(val int64, vals ...int64) int64 { - res := val - for _, v := range vals { - if v > res { - res = v - } - } - return res -} - -// MinInt64Val returns the smallest argument passed. -func MinInt64Val(val int64, vals ...int64) int64 { - res := val - for _, v := range vals { - if v < res { - res = v - } - } - return res -} - -// ClampInt64 returns a value restricted between lo and hi. -func ClampInt64(v, lo, hi int64) int64 { - return MinInt64(MaxInt64(v, lo), hi) -} - -// ToBase produces n in base b. For example -// -// ToBase(2047, 22) -> [1, 5, 4] -// -// 1 * 22^0 1 -// 5 * 22^1 110 -// 4 * 22^2 1936 -// ---- -// 2047 -// -// ToBase panics for bases < 2. -func ToBase(n *big.Int, b int) []int { - var nn big.Int - nn.Set(n) - if b < 2 { - panic("invalid base") - } - - k := 1 - switch nn.Sign() { - case -1: - nn.Neg(&nn) - k = -1 - case 0: - return []int{0} - } - - bb := big.NewInt(int64(b)) - var r []int - rem := big.NewInt(0) - for nn.Sign() != 0 { - nn.QuoRem(&nn, bb, rem) - r = append(r, k*int(rem.Int64())) - } - return r -} diff --git a/vendor/github.com/cznic/mathutil/mersenne/AUTHORS b/vendor/github.com/cznic/mathutil/mersenne/AUTHORS deleted file mode 100644 index 0078f5f..0000000 --- a/vendor/github.com/cznic/mathutil/mersenne/AUTHORS +++ /dev/null @@ -1,11 +0,0 @@ -# This file lists authors for copyright purposes. This file is distinct from -# the CONTRIBUTORS files. See the latter for an explanation. -# -# Names should be added to this file as: -# Name or Organization -# -# The email address is not required for organizations. -# -# Please keep the list sorted. - -Jan Mercl <0xjnml@gmail.com> diff --git a/vendor/github.com/cznic/mathutil/mersenne/CONTRIBUTORS b/vendor/github.com/cznic/mathutil/mersenne/CONTRIBUTORS deleted file mode 100644 index 5e86f06..0000000 --- a/vendor/github.com/cznic/mathutil/mersenne/CONTRIBUTORS +++ /dev/null @@ -1,9 +0,0 @@ -# This file lists people who contributed code to this repository. The AUTHORS -# file lists the copyright holders; this file lists people. -# -# Names should be added to this file like so: -# Name -# -# Please keep the list sorted. - -Jan Mercl <0xjnml@gmail.com> diff --git a/vendor/github.com/cznic/mathutil/mersenne/LICENSE b/vendor/github.com/cznic/mathutil/mersenne/LICENSE deleted file mode 100644 index 4fa2a1f..0000000 --- a/vendor/github.com/cznic/mathutil/mersenne/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2014 The mersenne Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the names of the authors nor the names of the -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/cznic/mathutil/permute.go b/vendor/github.com/cznic/mathutil/permute.go deleted file mode 100644 index 82ad791..0000000 --- a/vendor/github.com/cznic/mathutil/permute.go +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) 2014 The mathutil Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package mathutil - -import ( - "sort" -) - -// PermutationFirst generates the first permutation of data. -func PermutationFirst(data sort.Interface) { - sort.Sort(data) -} - -// PermutationNext generates the next permutation of data if possible and -// return true. Return false if there is no more permutation left. Based on -// the algorithm described here: -// http://en.wikipedia.org/wiki/Permutation#Generation_in_lexicographic_order -func PermutationNext(data sort.Interface) bool { - var k, l int - for k = data.Len() - 2; ; k-- { // 1. - if k < 0 { - return false - } - - if data.Less(k, k+1) { - break - } - } - for l = data.Len() - 1; !data.Less(k, l); l-- { // 2. - } - data.Swap(k, l) // 3. - for i, j := k+1, data.Len()-1; i < j; i++ { // 4. - data.Swap(i, j) - j-- - } - return true -} diff --git a/vendor/github.com/cznic/mathutil/poly.go b/vendor/github.com/cznic/mathutil/poly.go deleted file mode 100644 index 52b58ff..0000000 --- a/vendor/github.com/cznic/mathutil/poly.go +++ /dev/null @@ -1,248 +0,0 @@ -// Copyright (c) 2016 The mathutil Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package mathutil - -import ( - "fmt" - "math/big" -) - -func abs(n int) uint64 { - if n >= 0 { - return uint64(n) - } - - return uint64(-n) -} - -// QuadPolyDiscriminant returns the discriminant of a quadratic polynomial in -// one variable of the form a*x^2+b*x+c with integer coefficients a, b, c, or -// an error on overflow. -// -// ds is the square of the discriminant. If |ds| is a square number, d is set -// to sqrt(|ds|), otherwise d is < 0. -func QuadPolyDiscriminant(a, b, c int) (ds, d int, _ error) { - if 2*BitLenUint64(abs(b)) > IntBits-1 || - 2+BitLenUint64(abs(a))+BitLenUint64(abs(c)) > IntBits-1 { - return 0, 0, fmt.Errorf("overflow") - } - - ds = b*b - 4*a*c - s := ds - if s < 0 { - s = -s - } - d64 := SqrtUint64(uint64(s)) - if d64*d64 != uint64(s) { - return ds, -1, nil - } - - return ds, int(d64), nil -} - -// PolyFactor describes an irreducible factor of a polynomial in one variable -// with integer coefficients P, Q of the form P*x+Q. -type PolyFactor struct { - P, Q int -} - -// QuadPolyFactors returns the content and the irreducible factors of the -// primitive part of a quadratic polynomial in one variable with integer -// coefficients a, b, c of the form a*x^2+b*x+c in integers, or an error on -// overflow. -// -// If the factorization in integers does not exists, the return value is (0, -// nil, nil). -// -// See also: -// https://en.wikipedia.org/wiki/Factorization_of_polynomials#Primitive_part.E2.80.93content_factorization -func QuadPolyFactors(a, b, c int) (content int, primitivePart []PolyFactor, _ error) { - content = int(GCDUint64(abs(a), GCDUint64(abs(b), abs(c)))) - switch { - case content == 0: - content = 1 - case content > 0: - if a < 0 || a == 0 && b < 0 { - content = -content - } - } - a /= content - b /= content - c /= content - if a == 0 { - if b == 0 { - return content, []PolyFactor{{0, c}}, nil - } - - if b < 0 && c < 0 { - b = -b - c = -c - } - if b < 0 { - b = -b - c = -c - } - return content, []PolyFactor{{b, c}}, nil - } - - ds, d, err := QuadPolyDiscriminant(a, b, c) - if err != nil { - return 0, nil, err - } - - if ds < 0 || d < 0 { - return 0, nil, nil - } - - x1num := -b + d - x1denom := 2 * a - gcd := int(GCDUint64(abs(x1num), abs(x1denom))) - x1num /= gcd - x1denom /= gcd - - x2num := -b - d - x2denom := 2 * a - gcd = int(GCDUint64(abs(x2num), abs(x2denom))) - x2num /= gcd - x2denom /= gcd - - return content, []PolyFactor{{x1denom, -x1num}, {x2denom, -x2num}}, nil -} - -// QuadPolyDiscriminantBig returns the discriminant of a quadratic polynomial -// in one variable of the form a*x^2+b*x+c with integer coefficients a, b, c. -// -// ds is the square of the discriminant. If |ds| is a square number, d is set -// to sqrt(|ds|), otherwise d is nil. -func QuadPolyDiscriminantBig(a, b, c *big.Int) (ds, d *big.Int) { - ds = big.NewInt(0).Set(b) - ds.Mul(ds, b) - x := big.NewInt(4) - x.Mul(x, a) - x.Mul(x, c) - ds.Sub(ds, x) - - s := big.NewInt(0).Set(ds) - if s.Sign() < 0 { - s.Neg(s) - } - - if s.Bit(1) != 0 { // s is not a square number - return ds, nil - } - - d = SqrtBig(s) - x.Set(d) - x.Mul(x, x) - if x.Cmp(s) != 0 { // s is not a square number - d = nil - } - return ds, d -} - -// PolyFactorBig describes an irreducible factor of a polynomial in one -// variable with integer coefficients P, Q of the form P*x+Q. -type PolyFactorBig struct { - P, Q *big.Int -} - -// QuadPolyFactorsBig returns the content and the irreducible factors of the -// primitive part of a quadratic polynomial in one variable with integer -// coefficients a, b, c of the form a*x^2+b*x+c in integers. -// -// If the factorization in integers does not exists, the return value is (nil, -// nil). -// -// See also: -// https://en.wikipedia.org/wiki/Factorization_of_polynomials#Primitive_part.E2.80.93content_factorization -func QuadPolyFactorsBig(a, b, c *big.Int) (content *big.Int, primitivePart []PolyFactorBig) { - content = bigGCD(bigAbs(a), bigGCD(bigAbs(b), bigAbs(c))) - switch { - case content.Sign() == 0: - content.SetInt64(1) - case content.Sign() > 0: - if a.Sign() < 0 || a.Sign() == 0 && b.Sign() < 0 { - content = bigNeg(content) - } - } - a = bigDiv(a, content) - b = bigDiv(b, content) - c = bigDiv(c, content) - - if a.Sign() == 0 { - if b.Sign() == 0 { - return content, []PolyFactorBig{{big.NewInt(0), c}} - } - - if b.Sign() < 0 && c.Sign() < 0 { - b = bigNeg(b) - c = bigNeg(c) - } - if b.Sign() < 0 { - b = bigNeg(b) - c = bigNeg(c) - } - return content, []PolyFactorBig{{b, c}} - } - - ds, d := QuadPolyDiscriminantBig(a, b, c) - if ds.Sign() < 0 || d == nil { - return nil, nil - } - - x1num := bigAdd(bigNeg(b), d) - x1denom := bigMul(_2, a) - gcd := bigGCD(bigAbs(x1num), bigAbs(x1denom)) - x1num = bigDiv(x1num, gcd) - x1denom = bigDiv(x1denom, gcd) - - x2num := bigAdd(bigNeg(b), bigNeg(d)) - x2denom := bigMul(_2, a) - gcd = bigGCD(bigAbs(x2num), bigAbs(x2denom)) - x2num = bigDiv(x2num, gcd) - x2denom = bigDiv(x2denom, gcd) - - return content, []PolyFactorBig{{x1denom, bigNeg(x1num)}, {x2denom, bigNeg(x2num)}} -} - -func bigAbs(n *big.Int) *big.Int { - n = big.NewInt(0).Set(n) - if n.Sign() >= 0 { - return n - } - - return n.Neg(n) -} - -func bigDiv(a, b *big.Int) *big.Int { - a = big.NewInt(0).Set(a) - return a.Div(a, b) -} - -func bigGCD(a, b *big.Int) *big.Int { - a = big.NewInt(0).Set(a) - b = big.NewInt(0).Set(b) - for b.Sign() != 0 { - c := big.NewInt(0) - c.Mod(a, b) - a, b = b, c - } - return a -} - -func bigNeg(n *big.Int) *big.Int { - n = big.NewInt(0).Set(n) - return n.Neg(n) -} - -func bigMul(a, b *big.Int) *big.Int { - r := big.NewInt(0).Set(a) - return r.Mul(r, b) -} - -func bigAdd(a, b *big.Int) *big.Int { - r := big.NewInt(0).Set(a) - return r.Add(r, b) -} diff --git a/vendor/github.com/cznic/mathutil/primes.go b/vendor/github.com/cznic/mathutil/primes.go deleted file mode 100644 index bd10fe6..0000000 --- a/vendor/github.com/cznic/mathutil/primes.go +++ /dev/null @@ -1,335 +0,0 @@ -// Copyright (c) 2014 The mathutil Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package mathutil - -import ( - "math" -) - -// IsPrimeUint16 returns true if n is prime. Typical run time is few ns. -func IsPrimeUint16(n uint16) bool { - return n > 0 && primes16[n-1] == 1 -} - -// NextPrimeUint16 returns first prime > n and true if successful or an -// undefined value and false if there is no next prime in the uint16 limits. -// Typical run time is few ns. -func NextPrimeUint16(n uint16) (p uint16, ok bool) { - return n + uint16(primes16[n]), n < 65521 -} - -// IsPrime returns true if n is prime. Typical run time is about 100 ns. -// -//TODO rename to IsPrimeUint32 -func IsPrime(n uint32) bool { - switch { - case n&1 == 0: - return n == 2 - case n%3 == 0: - return n == 3 - case n%5 == 0: - return n == 5 - case n%7 == 0: - return n == 7 - case n%11 == 0: - return n == 11 - case n%13 == 0: - return n == 13 - case n%17 == 0: - return n == 17 - case n%19 == 0: - return n == 19 - case n%23 == 0: - return n == 23 - case n%29 == 0: - return n == 29 - case n%31 == 0: - return n == 31 - case n%37 == 0: - return n == 37 - case n%41 == 0: - return n == 41 - case n%43 == 0: - return n == 43 - case n%47 == 0: - return n == 47 - case n%53 == 0: - return n == 53 // Benchmarked optimum - case n < 65536: - // use table data - return IsPrimeUint16(uint16(n)) - default: - mod := ModPowUint32(2, (n+1)/2, n) - if mod != 2 && mod != n-2 { - return false - } - blk := &lohi[n>>24] - lo, hi := blk.lo, blk.hi - for lo <= hi { - index := (lo + hi) >> 1 - liar := liars[index] - switch { - case n > liar: - lo = index + 1 - case n < liar: - hi = index - 1 - default: - return false - } - } - return true - } -} - -// IsPrimeUint64 returns true if n is prime. Typical run time is few tens of µs. -// -// SPRP bases: http://miller-rabin.appspot.com -func IsPrimeUint64(n uint64) bool { - switch { - case n%2 == 0: - return n == 2 - case n%3 == 0: - return n == 3 - case n%5 == 0: - return n == 5 - case n%7 == 0: - return n == 7 - case n%11 == 0: - return n == 11 - case n%13 == 0: - return n == 13 - case n%17 == 0: - return n == 17 - case n%19 == 0: - return n == 19 - case n%23 == 0: - return n == 23 - case n%29 == 0: - return n == 29 - case n%31 == 0: - return n == 31 - case n%37 == 0: - return n == 37 - case n%41 == 0: - return n == 41 - case n%43 == 0: - return n == 43 - case n%47 == 0: - return n == 47 - case n%53 == 0: - return n == 53 - case n%59 == 0: - return n == 59 - case n%61 == 0: - return n == 61 - case n%67 == 0: - return n == 67 - case n%71 == 0: - return n == 71 - case n%73 == 0: - return n == 73 - case n%79 == 0: - return n == 79 - case n%83 == 0: - return n == 83 - case n%89 == 0: - return n == 89 // Benchmarked optimum - case n <= math.MaxUint16: - return IsPrimeUint16(uint16(n)) - case n <= math.MaxUint32: - return ProbablyPrimeUint32(uint32(n), 11000544) && - ProbablyPrimeUint32(uint32(n), 31481107) - case n < 105936894253: - return ProbablyPrimeUint64_32(n, 2) && - ProbablyPrimeUint64_32(n, 1005905886) && - ProbablyPrimeUint64_32(n, 1340600841) - case n < 31858317218647: - return ProbablyPrimeUint64_32(n, 2) && - ProbablyPrimeUint64_32(n, 642735) && - ProbablyPrimeUint64_32(n, 553174392) && - ProbablyPrimeUint64_32(n, 3046413974) - case n < 3071837692357849: - return ProbablyPrimeUint64_32(n, 2) && - ProbablyPrimeUint64_32(n, 75088) && - ProbablyPrimeUint64_32(n, 642735) && - ProbablyPrimeUint64_32(n, 203659041) && - ProbablyPrimeUint64_32(n, 3613982119) - default: - return ProbablyPrimeUint64_32(n, 2) && - ProbablyPrimeUint64_32(n, 325) && - ProbablyPrimeUint64_32(n, 9375) && - ProbablyPrimeUint64_32(n, 28178) && - ProbablyPrimeUint64_32(n, 450775) && - ProbablyPrimeUint64_32(n, 9780504) && - ProbablyPrimeUint64_32(n, 1795265022) - } -} - -// NextPrime returns first prime > n and true if successful or an undefined value and false if there -// is no next prime in the uint32 limits. Typical run time is about 2 µs. -// -//TODO rename to NextPrimeUint32 -func NextPrime(n uint32) (p uint32, ok bool) { - switch { - case n < 65521: - p16, _ := NextPrimeUint16(uint16(n)) - return uint32(p16), true - case n >= math.MaxUint32-4: - return - } - - n++ - var d0, d uint32 - switch mod := n % 6; mod { - case 0: - d0, d = 1, 4 - case 1: - d = 4 - case 2, 3, 4: - d0, d = 5-mod, 2 - case 5: - d = 2 - } - - p = n + d0 - if p < n { // overflow - return - } - - for { - if IsPrime(p) { - return p, true - } - - p0 := p - p += d - if p < p0 { // overflow - break - } - - d ^= 6 - } - return -} - -// NextPrimeUint64 returns first prime > n and true if successful or an undefined value and false if there -// is no next prime in the uint64 limits. Typical run time is in hundreds of µs. -func NextPrimeUint64(n uint64) (p uint64, ok bool) { - switch { - case n < 65521: - p16, _ := NextPrimeUint16(uint16(n)) - return uint64(p16), true - case n >= 18446744073709551557: // last uint64 prime - return - } - - n++ - var d0, d uint64 - switch mod := n % 6; mod { - case 0: - d0, d = 1, 4 - case 1: - d = 4 - case 2, 3, 4: - d0, d = 5-mod, 2 - case 5: - d = 2 - } - - p = n + d0 - if p < n { // overflow - return - } - - for { - if ok = IsPrimeUint64(p); ok { - break - } - - p0 := p - p += d - if p < p0 { // overflow - break - } - - d ^= 6 - } - return -} - -// FactorTerm is one term of an integer factorization. -type FactorTerm struct { - Prime uint32 // The divisor - Power uint32 // Term == Prime^Power -} - -// FactorTerms represent a factorization of an integer -type FactorTerms []FactorTerm - -// FactorInt returns prime factorization of n > 1 or nil otherwise. -// Resulting factors are ordered by Prime. Typical run time is few µs. -func FactorInt(n uint32) (f FactorTerms) { - switch { - case n < 2: - return - case IsPrime(n): - return []FactorTerm{{n, 1}} - } - - f, w := make([]FactorTerm, 9), 0 - for p := 2; p < len(primes16); p += int(primes16[p]) { - if uint(p*p) > uint(n) { - break - } - - power := uint32(0) - for n%uint32(p) == 0 { - n /= uint32(p) - power++ - } - if power != 0 { - f[w] = FactorTerm{uint32(p), power} - w++ - } - if n == 1 { - break - } - } - if n != 1 { - f[w] = FactorTerm{n, 1} - w++ - } - return f[:w] -} - -// PrimorialProductsUint32 returns a slice of numbers in [lo, hi] which are a -// product of max 'max' primorials. The slice is not sorted. -// -// See also: http://en.wikipedia.org/wiki/Primorial -func PrimorialProductsUint32(lo, hi, max uint32) (r []uint32) { - lo64, hi64 := int64(lo), int64(hi) - if max > 31 { // N/A - max = 31 - } - - var f func(int64, int64, uint32) - f = func(n, p int64, emax uint32) { - e := uint32(1) - for n <= hi64 && e <= emax { - n *= p - if n >= lo64 && n <= hi64 { - r = append(r, uint32(n)) - } - if n < hi64 { - p, _ := NextPrime(uint32(p)) - f(n, int64(p), e) - } - e++ - } - } - - f(1, 2, max) - return -} diff --git a/vendor/github.com/cznic/mathutil/rat.go b/vendor/github.com/cznic/mathutil/rat.go deleted file mode 100644 index 91b1c6f..0000000 --- a/vendor/github.com/cznic/mathutil/rat.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) 2014 The mathutil Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package mathutil - -// QCmpUint32 compares a/b and c/d and returns: -// -// -1 if a/b < c/d -// 0 if a/b == c/d -// +1 if a/b > c/d -// -func QCmpUint32(a, b, c, d uint32) int { - switch x, y := uint64(a)*uint64(d), uint64(b)*uint64(c); { - case x < y: - return -1 - case x == y: - return 0 - default: // x > y - return 1 - } -} - -// QScaleUint32 returns a such that a/b >= c/d. -func QScaleUint32(b, c, d uint32) (a uint64) { - return 1 + (uint64(b)*uint64(c))/uint64(d) -} diff --git a/vendor/github.com/cznic/mathutil/rnd.go b/vendor/github.com/cznic/mathutil/rnd.go deleted file mode 100644 index 9132dc0..0000000 --- a/vendor/github.com/cznic/mathutil/rnd.go +++ /dev/null @@ -1,383 +0,0 @@ -// Copyright (c) 2014 The mathutil Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package mathutil - -import ( - "fmt" - "math" - "math/big" -) - -// FC32 is a full cycle PRNG covering the 32 bit signed integer range. -// In contrast to full cycle generators shown at e.g. http://en.wikipedia.org/wiki/Full_cycle, -// this code doesn't produce values at constant delta (mod cycle length). -// The 32 bit limit is per this implementation, the algorithm used has no intrinsic limit on the cycle size. -// Properties include: -// - Adjustable limits on creation (hi, lo). -// - Positionable/randomly accessible (Pos, Seek). -// - Repeatable (deterministic). -// - Can run forward or backward (Next, Prev). -// - For a billion numbers cycle the Next/Prev PRN can be produced in cca 100-150ns. -// That's like 5-10 times slower compared to PRNs generated using the (non FC) rand package. -type FC32 struct { - cycle int64 // On average: 3 * delta / 2, (HQ: 2 * delta) - delta int64 // hi - lo - factors [][]int64 // This trades some space for hopefully a bit of speed (multiple adding vs multiplying). - lo int - mods []int // pos % set - pos int64 // Within cycle. - primes []int64 // Ordered. ∏ primes == cycle. - set []int64 // Reordered primes (magnitude order bases) according to seed. -} - -// NewFC32 returns a newly created FC32 adjusted for the closed interval [lo, hi] or an Error if any. -// If hq == true then trade some generation time for improved (pseudo)randomness. -func NewFC32(lo, hi int, hq bool) (r *FC32, err error) { - if lo > hi { - return nil, fmt.Errorf("invalid range %d > %d", lo, hi) - } - - if uint64(hi)-uint64(lo) > math.MaxUint32 { - return nil, fmt.Errorf("range out of int32 limits %d, %d", lo, hi) - } - - delta := int64(hi) - int64(lo) - // Find the primorial covering whole delta - n, set, p := int64(1), []int64{}, uint32(2) - if hq { - p++ - } - for { - set = append(set, int64(p)) - n *= int64(p) - if n > delta { - break - } - p, _ = NextPrime(p) - } - - // Adjust the set so n ∊ [delta, 2 * delta] (HQ: [delta, 3 * delta]) - // while keeping the cardinality of the set (correlates with the statistic "randomness quality") - // at max, i.e. discard atmost one member. - i := -1 // no candidate prime - if n > 2*(delta+1) { - for j, p := range set { - q := n / p - if q < delta+1 { - break - } - - i = j // mark the highest candidate prime set index - } - } - if i >= 0 { // shrink the inner cycle - n = n / set[i] - set = delete(set, i) - } - r = &FC32{ - cycle: n, - delta: delta, - factors: make([][]int64, len(set)), - lo: lo, - mods: make([]int, len(set)), - primes: set, - } - r.Seed(1) // the default seed should be always non zero - return -} - -// Cycle reports the length of the inner FCPRNG cycle. -// Cycle is atmost the double (HQ: triple) of the generator period (hi - lo + 1). -func (r *FC32) Cycle() int64 { - return r.cycle -} - -// Next returns the first PRN after Pos. -func (r *FC32) Next() int { - return r.step(1) -} - -// Pos reports the current position within the inner cycle. -func (r *FC32) Pos() int64 { - return r.pos -} - -// Prev return the first PRN before Pos. -func (r *FC32) Prev() int { - return r.step(-1) -} - -// Seed uses the provided seed value to initialize the generator to a deterministic state. -// A zero seed produces a "canonical" generator with worse randomness than for most non zero seeds. -// Still, the FC property holds for any seed value. -func (r *FC32) Seed(seed int64) { - u := uint64(seed) - r.set = mix(r.primes, &u) - n := int64(1) - for i, p := range r.set { - k := make([]int64, p) - v := int64(0) - for j := range k { - k[j] = v - v += n - } - n *= p - r.factors[i] = mix(k, &u) - } -} - -// Seek sets Pos to |pos| % Cycle. -func (r *FC32) Seek(pos int64) { //vet:ignore - if pos < 0 { - pos = -pos - } - pos %= r.cycle - r.pos = pos - for i, p := range r.set { - r.mods[i] = int(pos % p) - } -} - -func (r *FC32) step(dir int) int { - for { // avg loops per step: 3/2 (HQ: 2) - y := int64(0) - pos := r.pos - pos += int64(dir) - switch { - case pos < 0: - pos = r.cycle - 1 - case pos >= r.cycle: - pos = 0 - } - r.pos = pos - for i, mod := range r.mods { - mod += dir - p := int(r.set[i]) - switch { - case mod < 0: - mod = p - 1 - case mod >= p: - mod = 0 - } - r.mods[i] = mod - y += r.factors[i][mod] - } - if y <= r.delta { - return int(y) + r.lo - } - } -} - -func delete(set []int64, i int) (y []int64) { - for j, v := range set { - if j != i { - y = append(y, v) - } - } - return -} - -func mix(set []int64, seed *uint64) (y []int64) { - for len(set) != 0 { - *seed = rol(*seed) - i := int(*seed % uint64(len(set))) - y = append(y, set[i]) - set = delete(set, i) - } - return -} - -func rol(u uint64) (y uint64) { - y = u << 1 - if int64(u) < 0 { - y |= 1 - } - return -} - -// FCBig is a full cycle PRNG covering ranges outside of the int32 limits. -// For more info see the FC32 docs. -// Next/Prev PRN on a 1e15 cycle can be produced in about 2 µsec. -type FCBig struct { - cycle *big.Int // On average: 3 * delta / 2, (HQ: 2 * delta) - delta *big.Int // hi - lo - factors [][]*big.Int // This trades some space for hopefully a bit of speed (multiple adding vs multiplying). - lo *big.Int - mods []int // pos % set - pos *big.Int // Within cycle. - primes []int64 // Ordered. ∏ primes == cycle. - set []int64 // Reordered primes (magnitude order bases) according to seed. -} - -// NewFCBig returns a newly created FCBig adjusted for the closed interval [lo, hi] or an Error if any. -// If hq == true then trade some generation time for improved (pseudo)randomness. -func NewFCBig(lo, hi *big.Int, hq bool) (r *FCBig, err error) { - if lo.Cmp(hi) > 0 { - return nil, fmt.Errorf("invalid range %d > %d", lo, hi) - } - - delta := big.NewInt(0) - delta.Add(delta, hi).Sub(delta, lo) - - // Find the primorial covering whole delta - n, set, pp, p := big.NewInt(1), []int64{}, big.NewInt(0), uint32(2) - if hq { - p++ - } - for { - set = append(set, int64(p)) - pp.SetInt64(int64(p)) - n.Mul(n, pp) - if n.Cmp(delta) > 0 { - break - } - p, _ = NextPrime(p) - } - - // Adjust the set so n ∊ [delta, 2 * delta] (HQ: [delta, 3 * delta]) - // while keeping the cardinality of the set (correlates with the statistic "randomness quality") - // at max, i.e. discard atmost one member. - dd1 := big.NewInt(1) - dd1.Add(dd1, delta) - dd2 := big.NewInt(0) - dd2.Lsh(dd1, 1) - i := -1 // no candidate prime - if n.Cmp(dd2) > 0 { - q := big.NewInt(0) - for j, p := range set { - pp.SetInt64(p) - q.Set(n) - q.Div(q, pp) - if q.Cmp(dd1) < 0 { - break - } - - i = j // mark the highest candidate prime set index - } - } - if i >= 0 { // shrink the inner cycle - pp.SetInt64(set[i]) - n.Div(n, pp) - set = delete(set, i) - } - r = &FCBig{ - cycle: n, - delta: delta, - factors: make([][]*big.Int, len(set)), - lo: lo, - mods: make([]int, len(set)), - pos: big.NewInt(0), - primes: set, - } - r.Seed(1) // the default seed should be always non zero - return -} - -// Cycle reports the length of the inner FCPRNG cycle. -// Cycle is atmost the double (HQ: triple) of the generator period (hi - lo + 1). -func (r *FCBig) Cycle() *big.Int { - return r.cycle -} - -// Next returns the first PRN after Pos. -func (r *FCBig) Next() *big.Int { - return r.step(1) -} - -// Pos reports the current position within the inner cycle. -func (r *FCBig) Pos() *big.Int { - return r.pos -} - -// Prev return the first PRN before Pos. -func (r *FCBig) Prev() *big.Int { - return r.step(-1) -} - -// Seed uses the provided seed value to initialize the generator to a deterministic state. -// A zero seed produces a "canonical" generator with worse randomness than for most non zero seeds. -// Still, the FC property holds for any seed value. -func (r *FCBig) Seed(seed int64) { - u := uint64(seed) - r.set = mix(r.primes, &u) - n := big.NewInt(1) - v := big.NewInt(0) - pp := big.NewInt(0) - for i, p := range r.set { - k := make([]*big.Int, p) - v.SetInt64(0) - for j := range k { - k[j] = big.NewInt(0) - k[j].Set(v) - v.Add(v, n) - } - pp.SetInt64(p) - n.Mul(n, pp) - r.factors[i] = mixBig(k, &u) - } -} - -// Seek sets Pos to |pos| % Cycle. -func (r *FCBig) Seek(pos *big.Int) { - r.pos.Set(pos) - r.pos.Abs(r.pos) - r.pos.Mod(r.pos, r.cycle) - mod := big.NewInt(0) - pp := big.NewInt(0) - for i, p := range r.set { - pp.SetInt64(p) - r.mods[i] = int(mod.Mod(r.pos, pp).Int64()) - } -} - -func (r *FCBig) step(dir int) (y *big.Int) { - y = big.NewInt(0) - d := big.NewInt(int64(dir)) - for { // avg loops per step: 3/2 (HQ: 2) - r.pos.Add(r.pos, d) - switch { - case r.pos.Sign() < 0: - r.pos.Add(r.pos, r.cycle) - case r.pos.Cmp(r.cycle) >= 0: - r.pos.SetInt64(0) - } - for i, mod := range r.mods { - mod += dir - p := int(r.set[i]) - switch { - case mod < 0: - mod = p - 1 - case mod >= p: - mod = 0 - } - r.mods[i] = mod - y.Add(y, r.factors[i][mod]) - } - if y.Cmp(r.delta) <= 0 { - y.Add(y, r.lo) - return - } - y.SetInt64(0) - } -} - -func deleteBig(set []*big.Int, i int) (y []*big.Int) { - for j, v := range set { - if j != i { - y = append(y, v) - } - } - return -} - -func mixBig(set []*big.Int, seed *uint64) (y []*big.Int) { - for len(set) != 0 { - *seed = rol(*seed) - i := int(*seed % uint64(len(set))) - y = append(y, set[i]) - set = deleteBig(set, i) - } - return -} diff --git a/vendor/github.com/cznic/mathutil/tables.go b/vendor/github.com/cznic/mathutil/tables.go deleted file mode 100644 index f32952c..0000000 --- a/vendor/github.com/cznic/mathutil/tables.go +++ /dev/null @@ -1,6995 +0,0 @@ -// Copyright (c) 2014 The mathutil Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// "Static" data - -package mathutil - -var ( - // Set bits count in a byte - popcnt = [256]byte{ - 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, // 0 - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, // 1 - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, // 2 - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, // 3 - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, // 4 - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, // 5 - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, // 6 - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, // 7 - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, // 8 - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, // 9 - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, // 10 - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, // 11 - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, // 12 - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, // 13 - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, // 14 - 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8, // 15 - } - - // Highest set bit index in a byte - log2 = [256]int{ - -1, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, // 0 - - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, // 1 - - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, // 2 - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, // 3 - - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, // 4 - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, // 5 - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, // 6 - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, // 7 - - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, // 8 - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, // 9 - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, // 10 - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, // 11 - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, // 12 - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, // 13 - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, // 14 - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, // 15 - } - - // "Predivisors": 2-53 - liars = [3660]uint32{ - 31621, 42799, 49141, 49981, 65077, 65281, 80581, 83333, 88357, 90751, - 104653, 130561, 164737, 188057, 194221, 196093, 215749, 219781, 220729, 253241, - 256999, 271951, 280601, 282133, 357761, 390937, 458989, 486737, 489997, 514447, - 580337, 587861, 611701, 647089, 653333, 657901, 665281, 665333, 688213, 710533, - 721801, 722261, 738541, 741751, 742813, 745889, 769757, 818201, 838861, 873181, - 877099, 916327, 976873, 983401, 1016801, 1018921, 1053761, 1064053, 1073021, 1082401, - 1109461, 1132657, 1145257, 1168513, 1194649, 1207361, 1251949, 1252697, 1302451, 1325843, - 1357441, 1373653, 1397419, 1441091, 1493857, 1507963, 1509709, 1530787, 1584133, 1678541, - 1690501, 1730977, 1735841, 1811573, 1876393, 1969417, 1987021, 2004403, 2081713, 2163001, - 2181961, 2205967, 2261953, 2264369, 2269093, 2284453, 2304167, 2387797, 2487941, 2510569, - 2670361, 2746477, 2748023, 2757241, 2811271, 2909197, 2944261, 2976487, 3048841, 3090091, - 3116107, 3125281, 3225601, 3363121, 3375041, 3400013, 3413533, 3429037, 3539101, 3542533, - 3567481, 3568661, 3605429, 3656449, 3763801, 3828001, 3898129, 3911197, 3985921, 4072729, - 4181921, 4188889, 4209661, 4360621, 4469471, 4480477, 4513841, 4835209, 4863127, 4869313, - 4877641, 4922413, 5016191, 5044033, 5095177, 5173169, 5173601, 5176153, 5256091, 5271841, - 5284333, 5351537, 5489641, 5590621, 5672041, 5919187, 6027193, 6118141, 6140161, 6159301, - 6189121, 6226193, 6233977, 6236257, 6278533, 6334351, 6368689, 6386993, 6631549, 6658669, - 6779137, 6787327, 6836233, 6952037, 6955541, 6998881, 7017193, 7232321, 7306261, 7306561, - 7429117, 7462001, 7674967, 7725901, 7759937, 7820201, 7883731, 8036033, 8095447, 8239477, - 8384513, 8534233, 8725753, 8727391, 8902741, 9006401, 9056501, 9073513, 9131401, 9345541, - 9371251, 9439201, 9480461, 9533701, 9564169, 9567673, 9588151, 9591661, 9729301, 9774181, - 9863461, 10024561, 10084177, 10323769, 10331141, 10386241, 10425511, 10610063, 10700761, 10712857, - 10763653, 10974881, 11081459, 11115037, 11335501, 11541307, 11585293, 11592397, 11777599, 12032021, - 12096613, 12263131, 12322133, 12327121, 12599233, 12854437, 13057787, 13338371, 13446253, 13500313, - 13635289, 13694761, 13747361, 13773061, 14026897, 14154337, 14179537, 14324473, 14469841, 14671801, - 14676481, 14709241, 14794081, 14796289, 14865121, 15101893, 15139199, 15162941, 15188557, 15220951, - 15247621, 15479777, 15525241, 15603391, 15621409, 15700301, 15802681, 15976747, 15978007, 16070429, - 16132321, 16149169, 16153633, 16324001, 16349477, 16360381, 16705021, 16773121, 16822081, 16843009, - 16853077, 16879501, 16973393, 17098369, 17116837, 17134043, 17208601, 17236801, 17327773, 17375249, - 17405537, 17585969, 17870561, 18067501, 18073817, 18366937, 18443701, 18454921, 18535177, 18653353, - 18740971, 19328653, 19384289, 19404139, 19471033, 19607561, 20261251, 20417311, 20647621, 20968501, - 21042001, 21303343, 21306157, 21359521, 21397381, 21400481, 21623659, 21654533, 22075579, 22087477, - 22369621, 22591301, 22669501, 22711873, 22849481, 22953673, 23247901, 23382529, 23464033, 23577497, - 23634181, 23734901, 23828017, 23872213, 23963869, 24214051, 24356377, 25080101, 25150501, 25276421, - 25326001, 25457833, 25629913, 25696133, 25768261, 25909453, 26280073, 26377921, 26821601, 26840269, - 26877421, 26886817, 27108397, 27118601, 27219697, 27271151, 27279409, 27331921, 27380831, 27392041, - 27409541, 27491237, 27509653, 27664033, 27798461, 27808463, 28325881, 28527049, 28572961, 29111881, - 29214541, 29581501, 30022129, 30090817, 30185569, 30219757, 30295141, 30338593, 30388753, 30418957, - 30576151, 30662497, 30740417, 30881551, 30894307, 31040833, 31166803, 31436123, 31735621, 31759121, - 32091781, 32095057, 32168117, 32285041, 32497921, 32676481, 33146717, 33298337, 33600533, 33627301, - 33704101, 33872593, 34003061, 34043101, 34124641, 34540801, 34856167, 34944001, 35576599, 35703361, - 35820937, 35851037, 36291193, 36307981, 36861901, 36919681, 36974341, 37109467, 37376509, 37439201, - 37964809, 37988497, 38010307, 38046817, 38118763, 38210323, 39465091, 39512773, 39655153, 39684157, - 40165093, 40238797, 40315441, 40361197, 40629601, 40782589, 40827473, 40987201, 41121433, 41568101, - 41604109, 41642681, 41662297, 41840809, 42009217, 42485119, 42623017, 42984589, 43224397, 43363601, - 43661257, 44070841, 44314129, 44465221, 44482901, 45100177, 45175201, 45219329, 45414433, 45819541, - 45879941, 46094401, 46325029, 46386589, 46469809, 46517857, 46679761, 46860001, 47220367, 47903701, - 47918581, 48064021, 48191653, 48269761, 48316969, 48400753, 48448661, 48551161, 48563089, 49075417, - 49303801, 49411801, 49459801, 50155733, 50201089, 50443201, 50523661, 51030601, 51129781, 51302353, - 51500521, 52072021, 52119289, 52204237, 53283169, 53399449, 53656021, 53675623, 53695721, 53711113, - 54029741, 54449431, 55109401, 55176097, 55318957, 55729957, 56052361, 56420033, 56479897, 56810137, - 57762433, 58003213, 58422409, 58449847, 58509977, 58679941, 58755877, 59631211, 59840537, 59913157, - 59953741, 60155201, 60352921, 60547831, 60566431, 60581401, 60696661, 60738257, 60957361, 61201009, - 61219789, 61377109, 61832377, 62756641, 63001801, 63002501, 63065281, 63167743, 63318169, 63328469, - 63346999, 63388033, 64148717, 64605041, 64735897, 65144501, 65254393, 65301013, 65350801, 65359477, - 66096253, 67194401, 67642513, 67928221, 68102641, 68154001, 68165761, 68512867, 68621701, 68839597, - 69030901, 69128641, 69176647, 69228967, 69231061, 69485281, 69612061, 69885649, 70149631, 70463489, - 70593931, 70728121, 71079661, 71734417, 72498253, 72543547, 73562833, 73645001, 74411131, 74927161, - 75140137, 75565873, 76725091, 76745101, 77533123, 77648941, 77812153, 77817979, 78939089, 79398901, - 79411201, 79417801, 79464533, 79786523, 80142761, 80146909, 80375707, 80556337, 80687881, 80891009, - 81433591, 81954133, 82273201, 82506439, 82870517, 82929001, 83083001, 83103329, 83204801, 84164033, - 84350561, 84421081, 84487457, 84998503, 85328717, 85519337, 85823401, 86027329, 86438857, 86530621, - 86999837, 87499651, 87694261, 88256449, 88368853, 88661861, 89308771, 89784581, 90270613, 90278161, - 90341197, 90665789, 90698401, 91433281, 91659283, 92438581, 92625121, 93431521, 93541537, 93571633, - 93643201, 93677761, 93926197, 94316401, 94502701, 95451361, 95452781, 96135601, 96618397, 96791881, - 96888641, 96895441, 96904081, 96925921, 97255801, 97496449, 97796953, 97863529, 97924217, 99036001, - 99115297, 99486889, 99789673, 99898801, 100463443, 100618933, 100943201, 101152133, 101218921, 101270251, - 101276579, 101649241, 102004421, 102678031, 102690677, 102690901, 103301633, 104078857, 104524421, 104988673, - 105305443, 105919633, 106485121, 106622353, 106743073, 107360641, 107543333, 108596953, 109231229, 109437751, - 109541461, 109879837, 110135821, 110139499, 110312773, 110413333, 110717861, 111370141, 111654401, 112032001, - 112402981, 112828801, 113589601, 113605201, 113730481, 113892589, 114305441, 114329881, 114701341, 114842677, - 114910489, 115039081, 115174681, 115497901, 115804501, 115873801, 116090081, 116321617, 116617289, 116682721, - 116696161, 116998669, 117987841, 118466401, 118901521, 119092801, 119204809, 119261113, 119327041, 119558011, - 119743537, 119940853, 120296677, 120517021, 120838609, 121062001, 121374241, 121472359, 121609489, 122166307, - 122396737, 122941981, 123481777, 123671671, 123877081, 123987793, 124145473, 124630273, 124818601, 125284141, - 125686241, 125848577, 126132553, 127050067, 128079409, 128124151, 128396921, 128468957, 128665319, 128987429, - 129205781, 129256273, 129357061, 129461617, 129524669, 130556329, 130693393, 130944133, 131023201, 131567929, - 131938561, 132332201, 132338881, 132440521, 132575071, 133216381, 133302781, 133467517, 133800661, 134696801, - 134767153, 134868029, 135263269, 135296053, 135308881, 135945853, 135969401, 136043641, 136661201, 136722433, - 137415821, 137763037, 138030721, 138403981, 138828821, 139295701, 139487041, 140197051, 142525333, 142922413, - 143106133, 143168581, 145348529, 146156617, 146272901, 146659801, 146843929, 146884393, 147028001, 147287141, - 148109473, 148171769, 148910653, 149389633, 150379693, 150960239, 150988753, 151533377, 151589881, 152716537, - 152922001, 152991841, 153369061, 153589801, 153754873, 153928133, 154287451, 154513633, 154944533, 155203361, - 156114061, 156532799, 157069189, 157368661, 157405249, 157725829, 158068153, 158192317, 158397247, 158496911, - 158544401, 158895281, 160348189, 160378861, 160491329, 160587841, 160672201, 160730389, 161184013, 161216021, - 161289649, 161304001, 161423377, 162026869, 162067441, 162690481, 162771337, 162776041, 163442551, 163954561, - 164111281, 165061909, 165224321, 165938653, 166082309, 166339057, 166406561, 166827943, 167579497, 167582377, - 167692141, 167881121, 168566501, 169655641, 170640961, 170782921, 170856533, 171454321, 172116181, 172436713, - 172947529, 173401621, 174479729, 176030977, 176597821, 176609441, 176977921, 177167233, 177254533, 177693521, - 177927641, 177951973, 178837201, 178956971, 179083601, 179285137, 179820257, 180115489, 180497633, 180703451, - 181285001, 181285537, 181542601, 181647497, 182383111, 183677341, 184411567, 185653333, 186183469, 186393481, - 186983521, 187050529, 187667969, 187761241, 188516329, 188985961, 189714193, 189738361, 189941761, 190212181, - 190382161, 190913297, 191233813, 191648161, 191981609, 192346153, 192857761, 193330237, 193638337, 193949641, - 194556451, 196035001, 196049701, 196231393, 198982759, 199674721, 200143351, 200753281, 201261061, 202130197, - 202156813, 202538857, 203505697, 204280501, 204582457, 204766381, 205057561, 206304961, 206453509, 206504033, - 206529737, 207008569, 207030541, 207132481, 207477001, 207618781, 208051201, 208969223, 209246701, 209404369, - 209990881, 210592873, 210842113, 213035761, 214038533, 214110541, 214852609, 214858717, 215436241, 216821881, - 217123069, 217875571, 218603617, 218642029, 218947121, 219621781, 220531501, 220883521, 221368153, 221415781, - 221884001, 222010721, 222630193, 223449463, 223625851, 223782263, 224074369, 224136013, 224769241, 224957893, - 225853633, 226359547, 226450297, 227132641, 227444101, 227475481, 228652201, 228842209, 228988033, 229589413, - 230357761, 231383461, 231405701, 231927781, 232114433, 232460821, 232771501, 233110081, 234869009, 235426913, - 235928071, 237791143, 238001653, 238833421, 240068041, 240371713, 240694513, 240785047, 241505377, 242067841, - 242650717, 242860069, 243583201, 243955141, 244883981, 245006623, 245950561, 246099317, 246282511, 246434761, - 246658441, 247318957, 247321301, 247416101, 249582481, 250436033, 250958401, 250988173, 251528401, 251663837, - 251855893, 252853921, 253610281, 253893397, 255416897, 256831433, 257590661, 258020473, 258043229, 258234401, - 258944401, 259763093, 259765747, 260156101, 260518801, 260736341, 260963389, 261186001, 261703417, 262979501, - 263428181, 264269449, 264384469, 265020001, 265584133, 265735969, 265836161, 266790481, 266925601, 270525737, - 271272569, 271763467, 271826629, 271950829, 273361789, 273480637, 274701913, 274810241, 274919401, 275283401, - 275619961, 276018913, 276131137, 276542401, 276638321, 277787141, 278943061, 279377281, 280885153, 282253141, - 282471853, 282769771, 283900961, 284166877, 284301751, 284736091, 284834299, 285820501, 286316801, 287160301, - 287449091, 287715121, 288099001, 288117721, 288735277, 290643601, 290706781, 290953921, 291088513, 291461633, - 292153681, 292290181, 292433321, 292902481, 293346637, 293847721, 293938261, 295419097, 295743017, 297624961, - 297798961, 298212601, 299367877, 299736181, 301413001, 302635351, 304080001, 307629401, 307694323, 307972801, - 308483209, 309666361, 310474249, 310978027, 311177213, 311411629, 311655829, 311671361, 312408113, 312614021, - 314184487, 315034513, 315351521, 317137969, 317365933, 317641171, 317796119, 319053281, 319374577, 319440769, - 319726177, 320326003, 321324589, 321850849, 322469701, 322941881, 324477697, 325028089, 325352101, 325546873, - 326266051, 326405713, 326469137, 326628721, 326694301, 326695141, 327073601, 327093409, 327398009, 328302901, - 329153653, 329769721, 330198331, 330759617, 331658081, 331934989, 337135501, 337420679, 337665901, 337783981, - 338125537, 338458807, 338914369, 339195097, 339492169, 339794641, 341958121, 341994131, 343017529, 343052833, - 344201441, 344255551, 344776301, 346080391, 348989101, 349752913, 350031973, 350244577, 351058753, 351177769, - 352802803, 352932337, 353815801, 353932801, 354062809, 356604421, 356836819, 357348601, 357872971, 358416577, - 359394751, 359727073, 360145633, 360375181, 360787771, 361307521, 361312337, 362569201, 363170837, 363430637, - 364550761, 365077373, 365231401, 366487201, 366532321, 366652201, 367559501, 367632301, 368016949, 368476501, - 369667561, 371011801, 371611153, 372167101, 373012777, 373533617, 373669453, 373906513, 374346361, 374988661, - 376957153, 377192353, 377334497, 377458849, 377806687, 377869031, 378792649, 379732501, 380137633, 382304161, - 384100001, 385175113, 385319089, 387072661, 388695301, 390609941, 390612221, 391014937, 392679737, 393611653, - 394723177, 396864469, 399156661, 399302581, 399647221, 400385701, 400557109, 401100881, 403095967, 403293313, - 405739681, 405782623, 407737201, 407889161, 409302001, 409458241, 410613809, 410680357, 411618241, 411851389, - 412836689, 413138881, 413429801, 413778817, 414216461, 414368641, 415200361, 415204501, 415476343, 416964241, - 417767201, 417779909, 418044563, 418226581, 418616161, 418617281, 418667401, 419184481, 420607441, 421942951, - 422429041, 422928101, 423384001, 423465001, 424175761, 424411501, 424431541, 425967301, 426174101, 426219649, - 426770437, 426783811, 427294141, 428180191, 428758201, 429135841, 429509837, 430046857, 430381921, 430646401, - 430733701, 432227449, 434042801, 435016187, 435358657, 435993301, 436465501, 437247841, 437462101, 437597101, - 437866087, 439309261, 441354497, 441650591, 441758461, 442050577, 442181291, 442543553, 444660421, 445429693, - 446414621, 446619617, 449501761, 450807481, 450866021, 450872573, 452990401, 453366029, 453967739, 454745773, - 455198563, 457274161, 457320533, 459785089, 460251733, 460585861, 461151121, 461272267, 461329601, 462587329, - 462639409, 462701513, 464012033, 464955857, 465505633, 466290949, 466758181, 467100937, 468410113, 468950021, - 470120257, 470268137, 470644021, 471535373, 471664513, 472814413, 473581057, 474892741, 474970501, 474983881, - 475723849, 478614067, 479962009, 480668347, 481153501, 481239361, 482488393, 482824669, 482921297, 483006889, - 483029821, 483945601, 484200289, 486063001, 486902929, 487896601, 488104681, 488169289, 488585521, 488656981, - 489994201, 490950461, 491738801, 493108481, 494288677, 495909871, 496109729, 496560349, 497148599, 497285713, - 498662561, 498706651, 498905189, 500747293, 501172241, 501472333, 502686713, 504870241, 505473263, 505532773, - 505798213, 506349421, 507142567, 507323521, 508606771, 509302873, 509551201, 510925609, 511098521, 511215521, - 511611673, 512330281, 514738981, 516045197, 516259657, 516764063, 517662001, 518216201, 518548801, 521501473, - 522390109, 522758233, 523756711, 526067821, 526359289, 526686889, 528013333, 528043753, 528220117, 530630701, - 531095029, 531681281, 532126801, 532758241, 532800133, 533429881, 534782293, 535252867, 535428577, 535517581, - 536003333, 536114197, 536342419, 536870911, 540207097, 540621181, 540654409, 540680141, 542497201, 542536457, - 544861633, 545550433, 545622401, 546102481, 546117301, 546322201, 548080513, 548989561, 549308761, 550132741, - 550230409, 550635373, 550853137, 551313001, 552573793, 553027201, 554487121, 554599051, 554964001, 555321007, - 555465601, 556001377, 556069849, 556095433, 556114609, 557165209, 558235109, 558900821, 558977761, 561448487, - 562367821, 563298061, 563947141, 564298489, 564689381, 565664761, 565707061, 567358513, 567596401, 568902001, - 568967221, 569332177, 569495809, 570941881, 572123521, 572228929, 572430769, 572567353, 572936869, 573817861, - 573862021, 574998841, 575326033, 576724219, 577210181, 577352641, 577613261, 579606301, 579956653, 581618143, - 582389641, 582799951, 585261637, 586706821, 587343541, 588049001, 591242653, 591822001, 592467451, 592468777, - 593682169, 593728489, 595405201, 595590841, 597537361, 597717121, 599135767, 599945293, 600893921, 601606487, - 602379181, 604584221, 605454917, 605961049, 606872449, 607148653, 607750681, 608421637, 608917753, 609361567, - 609813781, 611097401, 611374453, 611770513, 611812321, 611817421, 612006253, 613849601, 614742241, 615361183, - 615760133, 615895897, 616280897, 617087701, 619239457, 619365121, 619480601, 620169409, 620544961, 620755537, - 621769669, 622137601, 623735953, 624303241, 624732421, 625060801, 625482001, 626717471, 627886657, 628868467, - 629134081, 630496621, 630622753, 630811513, 631767943, 631974613, 633289807, 635155291, 635291077, 635319361, - 636287653, 636337073, 636936697, 638502913, 638837761, 639305921, 639807781, 640650931, 640977373, 643036321, - 643316461, 643552909, 644004817, 644453633, 644457551, 644731357, 644900257, 645556481, 648056449, 648328801, - 651011329, 651064681, 651151801, 651514753, 652469641, 653235841, 653260633, 655264369, 657732349, 659526601, - 659846021, 660095641, 660754117, 661122881, 661207177, 662134201, 663760681, 665462081, 668498321, 670976641, - 670987021, 671716921, 672103001, 672108193, 673778827, 675260477, 676359391, 678481693, 680983817, 681019921, - 681124207, 681303241, 682528687, 683316001, 683362681, 684350833, 686059921, 687741401, 689537441, 690035713, - 690562601, 691131349, 692535637, 693456521, 694116893, 696042901, 696321949, 696998251, 697821857, 698192041, - 698819711, 702683101, 705303457, 705351583, 706728377, 707691601, 709409993, 710382401, 710617861, 710721001, - 714490481, 717096641, 717653129, 717831211, 720767521, 722955773, 724160251, 724969087, 725508241, 731276521, - 732805681, 734166217, 736668013, 739444021, 739576801, 740988151, 741182401, 741214237, 742017181, 742550401, - 744500641, 745493761, 745745461, 746331041, 747406801, 748638001, 749172821, 749640161, 750632137, 751226401, - 751705597, 752186593, 753233717, 753574537, 753594001, 754020361, 754874257, 756205633, 756271909, 756980137, - 758581651, 758687581, 758901701, 759252367, 759266621, 759638881, 762699649, 763907741, 764033999, 764240611, - 765378241, 766303693, 766823797, 770201221, 770909107, 770937931, 771043201, 771337891, 772495777, 773131927, - 773807401, 775368901, 775896181, 776443769, 777218989, 781471001, 782823281, 784450393, 784777393, 784783477, - 784966297, 787085857, 787209277, 788046901, 788931361, 789082001, 790453049, 791118043, 792144161, 792145729, - 794201333, 794399041, 794937601, 795064909, 796072003, 796200901, 796560703, 797418997, 797834017, 799162561, - 799630753, 799898833, 799916101, 801093011, 801227269, 801866647, 804978721, 805505957, 805771501, 807115753, - 807218413, 808214161, 809790881, 810023881, 810455101, 811110301, 811478533, 811607777, 811730923, 815430533, - 815796413, 816024161, 816215401, 816549121, 817832329, 818401321, 819466201, 819743233, 822018961, 822531841, - 824389441, 826004467, 829512001, 830664451, 831933901, 832048447, 832127489, 832169857, 833610751, 837766217, - 839268139, 839280691, 839908217, 840749761, 841217653, 841660961, 842785841, 842824981, 842960981, 843161887, - 844545271, 845376533, 846961321, 848090377, 848755969, 849548671, 852432769, 854094781, 854868257, 855734401, - 857100421, 857902861, 858687103, 859096477, 860334301, 862082677, 862678081, 863196181, 863609113, 863984881, - 865242841, 867022747, 867110501, 867638201, 868088341, 868111597, 868691401, 870985223, 871157233, 871195561, - 871908481, 876850801, 877542481, 878492941, 878940833, 879995689, 880870513, 880922657, 883276549, 884304037, - 884952001, 886180429, 887795221, 888868441, 892740853, 893692819, 894264337, 896901461, 897087361, 897283213, - 899019353, 900736411, 901848301, 902566501, 903108821, 903390643, 905040953, 907378669, 907670501, 907711561, - 908005249, 910202509, 910867481, 911484421, 914348737, 914906539, 920375821, 920696653, 921858631, 922845241, - 923437213, 926756881, 927106561, 927877001, 929159941, 930530701, 932148253, 933729421, 935794081, 936421141, - 937675393, 938376181, 939947009, 940123801, 941056273, 941734657, 943271569, 944832533, 946034057, 946787377, - 947878081, 949317217, 949697233, 952893881, 954924013, 957600541, 957631249, 958131157, 958735681, 960269377, - 960946321, 962442001, 962489557, 962523169, 964412837, 965501857, 967266451, 967287751, 967790401, 968283247, - 968413217, 968751241, 969528337, 970586713, 971975071, 974113601, 974471243, 974774401, 975576281, 976396961, - 977483449, 979363153, 980056507, 980725201, 981484561, 983456377, 984133441, 984252001, 985052881, 985075681, - 987842101, 994133479, 995586373, 995650921, 997836841, 998489017, 998590601, 998596741, 998724481, 999828727, - 1002261781, 1003062061, 1005402133, 1005833971, 1006800829, 1008777001, 1008839999, 1009025263, 1009140161, 1011319501, - 1011333061, 1011570457, 1011909271, 1012438391, 1013833153, 1015339441, 1015626151, 1017748057, 1020515761, 1021281301, - 1022336611, 1024041853, 1024123501, 1024605121, 1025035129, 1026738161, 1027744453, 1028494429, 1034252929, 1034958601, - 1040234231, 1049584313, 1050102901, 1050535501, 1054999441, 1055009117, 1056121453, 1057426651, 1063212481, 1065508321, - 1065602281, 1066972301, 1069388497, 1070639389, 1070941987, 1071512749, 1071643249, 1072898711, 1073159281, 1073288581, - 1073484823, 1075100041, 1077133397, 1078467589, 1081798061, 1082472553, 1084241341, 1084444481, 1090858081, 1093150081, - 1093352833, 1093526353, 1094042321, 1097416321, 1098743563, 1100624857, 1101623381, 1101673501, 1102573501, 1102750013, - 1104194521, 1105038871, 1106529761, 1106580817, 1106595493, 1107138961, 1108135381, 1109304913, 1110582947, 1111205873, - 1111939201, 1112671603, 1114277221, 1116379301, 1117202557, 1117785881, 1117828001, 1117890019, 1119412321, 1120076281, - 1120981021, 1121176981, 1123406047, 1123625501, 1123727617, 1124396521, 1125038377, 1127040769, 1130933429, 1134367777, - 1138289041, 1138607233, 1139137057, 1140573601, 1142466151, 1147434289, 1148578201, 1150229761, 1151670001, 1153164097, - 1153440289, 1154343961, 1154691409, 1154987209, 1155939709, 1156761911, 1156993373, 1157839381, 1159421509, 1160844821, - 1163098249, 1163227759, 1164218641, 1165717129, 1166475601, 1166598217, 1168221121, 1168256953, 1168492417, 1173229201, - 1173545533, 1174300093, 1180970407, 1181566219, 1183338241, 1184554801, 1186325981, 1187235193, 1191153937, 1191216133, - 1192314817, 1192412033, 1192903531, 1193229577, 1193557093, 1195524181, 1196852273, 1198650961, 1198880261, 1200456577, - 1200778753, 1202142061, 1204205449, 1205606533, 1205772499, 1209998077, 1210393801, 1210562701, 1210653541, 1213619761, - 1217181061, 1217823517, 1217924159, 1219816261, 1219858921, 1220114377, 1221127013, 1222861271, 1223531677, 1223941657, - 1225128829, 1226230297, 1226855293, 1227220801, 1229491063, 1229751667, 1230446653, 1231362793, 1232445677, 1234125721, - 1234646533, 1235188597, 1235864033, 1236313501, 1236442421, 1238825569, 1242171349, 1242858317, 1249166881, 1249785941, - 1250656621, 1252236421, 1254277909, 1255665613, 1257102001, 1258903981, 1260332137, 1263293281, 1264145401, 1265477791, - 1266003461, 1266273793, 1266425101, 1267345081, 1269295201, 1269835201, 1270193401, 1270489621, 1270667353, 1272558739, - 1272866167, 1282447477, 1282568741, 1285636801, 1286298133, 1286298263, 1296613501, 1297443913, 1299072721, 1299784141, - 1299963601, 1301509249, 1301926081, 1302745481, 1306836001, 1307004641, 1307520469, 1307823661, 1308758533, 1308998741, - 1309723213, 1309983901, 1310329567, 1311255661, 1311616153, 1312332001, 1312573123, 1313396221, 1315858381, 1316169541, - 1318126321, 1318717531, 1319978701, 1319992181, 1320793813, 1321058213, 1323668917, 1325172421, 1325329297, 1328256247, - 1329174601, 1329431689, 1331973329, 1341010577, 1341926401, 1343575381, 1344597577, 1344975721, 1345514101, 1345523401, - 1347387361, 1348964401, 1350685001, 1351126261, 1352453257, 1353051517, 1356241321, 1356328121, 1357459183, 1362463807, - 1362515701, 1362742561, 1365662917, 1366587661, 1366608377, 1368769681, 1371908137, 1372681861, 1375322101, 1376799577, - 1378646179, 1379464633, 1382453333, 1383283129, 1385656829, 1386705433, 1388972353, 1389353941, 1389975149, 1391890033, - 1393851553, 1394640941, 1394746081, 1394942473, 1397357851, 1398883201, 1400859847, 1401840833, 1404008369, 1404253369, - 1406826241, 1406851249, 1409372779, 1413803197, 1414154827, 1414529533, 1415969101, 1417986901, 1421475031, 1424503849, - 1425860101, 1426319563, 1426534201, 1427771089, 1428966001, 1432354901, 1435091377, 1438648993, 1440231941, 1440922891, - 1441139641, 1441678411, 1442945689, 1443388481, 1443742273, 1446298309, 1446434677, 1446818651, 1448921633, 1451635201, - 1454282449, 1454445413, 1456527461, 1457378449, 1461307717, 1463065501, 1463178817, 1463992661, 1464568381, 1465908193, - 1465945417, 1468540477, 1468824787, 1469059481, 1469960377, 1470080501, 1470650851, 1471628401, 1472221921, 1473580001, - 1477289941, 1481626513, 1482274513, 1482876673, 1483873861, 1483918801, 1485061471, 1486564301, 1493114149, 1495190699, - 1497221281, 1497965713, 1499971457, 1499989177, 1500142001, 1501165097, 1502171117, 1502403121, 1503240559, 1503705601, - 1504139521, 1504832033, 1507746241, 1509156013, 1510870241, 1511558533, 1515175087, 1515785041, 1517039371, 1518014689, - 1518290707, 1520190341, 1521221473, 1522302121, 1526732803, 1529648231, 1529819971, 1530495289, 1532419099, 1532569681, - 1532755369, 1533343261, 1534063081, 1535020133, 1536112001, 1536251047, 1536883357, 1537433899, 1537641691, 1538012449, - 1539583921, 1539804001, 1540454761, 1540550413, 1541047813, 1541849761, 1541955409, 1544145121, 1545019813, 1545177581, - 1546106773, 1546340401, 1546508057, 1547140841, 1547543161, 1547712601, 1550924873, 1554270481, 1557118081, 1560312001, - 1560620041, 1561800833, 1565893201, 1566594551, 1567830241, 1568916311, 1574362441, 1574601601, 1577983489, 1578009401, - 1580449201, 1581576641, 1581714481, 1582783777, 1583230241, 1583658649, 1586436193, 1587650401, 1590394313, 1593706201, - 1595647351, 1595887921, 1598197201, 1602517949, 1603765021, 1603810561, 1603994701, 1609916491, 1609935913, 1612121473, - 1614508267, 1617795181, 1617921667, 1619447741, 1620646177, 1627103521, 1627898401, 1628692201, 1630062253, 1630307617, - 1631314609, 1632286673, 1632513601, 1633044241, 1636185601, 1637434657, 1637436457, 1637930893, 1638294661, 1639351981, - 1639846391, 1641971701, 1642814653, 1644637051, 1645413001, 1647225529, 1648076041, 1649430889, 1650265549, 1650682153, - 1654940509, 1655660761, 1656229921, 1656280033, 1656917377, 1659009601, 1661202113, 1668037621, 1668926629, 1669893661, - 1671603667, 1671714241, 1672125131, 1674091141, 1674658133, 1675978193, 1678274581, 1679130641, 1680901381, 1683174533, - 1685433413, 1686001861, 1687248001, 1691745821, 1692605041, 1694128129, 1695158921, 1696893101, 1698707377, 1699279441, - 1700250049, 1709909293, 1710753001, 1712392321, 1714322377, 1716160321, 1716714793, 1716774481, 1718013133, 1718088301, - 1719197621, 1721061497, 1721986313, 1722007169, 1722685777, 1725675451, 1726372441, 1731048937, 1731995497, 1732924001, - 1734059291, 1734285601, 1735071913, 1736481601, 1738687469, 1740214841, 1742288881, 1742815621, 1743166441, 1744605097, - 1746692641, 1746721681, 1749124829, 1750412161, 1754818561, 1757148121, 1760014561, 1766984389, 1767234613, 1769091241, - 1769267761, 1770236893, 1771303801, 1772267281, 1773582977, 1776439261, 1776820033, 1779649381, 1779892577, 1784306273, - 1784638309, 1785843547, 1786005521, 1787934881, 1790023861, 1791426787, 1792442737, 1792588813, 1794814103, 1801558201, - 1801774081, 1802510669, 1803768091, 1804906517, 1805947313, 1809888967, 1816408273, 1817067169, 1819829749, 1820306953, - 1821514633, 1828682101, 1828887061, 1831258601, 1835114401, 1837156049, 1837599769, 1839568981, 1841034961, 1841099261, - 1841479501, 1844028961, 1846171781, 1847811673, 1849964117, 1850233897, 1850598961, 1852496761, 1853926777, 1854084649, - 1854940231, 1856689453, 1857221281, 1858098497, 1858197961, 1860373241, 1861026133, 1861880689, 1862880401, 1866409861, - 1867906721, 1868682241, 1871987041, 1872937057, 1873177693, 1874634721, 1874849929, 1878691753, 1879111697, 1879623157, - 1879775501, 1883509633, 1883785681, 1885915841, 1894909141, 1894955311, 1897700113, 1899081757, 1899525601, 1900687381, - 1903447841, 1904658913, 1905958891, 1908088001, 1909566073, 1910134309, 1911197947, 1912950241, 1914303841, 1915391521, - 1916987593, 1917397637, 1920301951, 1921309633, 1922092567, 1922687293, 1923224689, 1923311317, 1923845801, 1924201501, - 1925042737, 1928903971, 1929862849, 1930403333, 1930447501, 1930534453, 1930915169, 1934350351, 1938264241, 1940048881, - 1943951041, 1944125633, 1945042181, 1950987193, 1952513369, 1952968753, 1957705177, 1959659857, 1960708261, 1963149553, - 1965007601, 1968002149, 1970065681, 1974474049, 1977257441, 1982123893, 1982826961, 1988071801, 1988713189, 1988835713, - 1988965861, 1989192277, 1991063449, 1995784961, 1995830761, 1996231189, 1996339649, 1997844157, 1998780001, 1999053601, - 1999111801, 1999743661, 2004299641, 2007646961, 2013554869, 2013834961, 2016481477, 2017021333, 2017509601, 2019564769, - 2021392369, 2021884343, 2027675701, 2028279793, 2028631361, 2028812399, 2029830409, 2030600833, 2036224321, 2043173273, - 2049293401, 2050617713, 2052149221, 2054711381, 2055634561, 2057267941, 2057835781, 2058072041, 2059739221, 2062612033, - 2068867841, 2070739441, 2072624761, 2076192007, 2081039297, 2081551753, 2082146617, 2083034113, 2083997441, 2085453649, - 2085882661, 2086645009, 2093300401, 2095627153, 2096046457, 2097317377, 2100292841, 2101470541, 2101744837, 2104994449, - 2106147457, 2107148761, 2114643217, 2115769633, 2115986557, 2116483027, 2116541221, 2117031263, 2117555641, 2118621097, - 2120096161, 2123601751, 2124078653, 2124691213, 2127197489, 2128104001, 2129304997, 2130134533, 2131004737, 2131811501, - 2140699681, 2140771609, 2141340833, 2144961253, 2147418113, 2147429509, 2152627801, 2154446641, 2155416251, 2156151313, - 2164282177, 2168431201, 2170282969, 2172155819, 2173499329, 2173540951, 2173579801, 2175126601, 2175406201, 2175646177, - 2177374321, 2177645557, 2178082901, 2178939221, 2180221201, 2182281601, 2182802689, 2185362233, 2187717761, 2193980881, - 2199617701, 2200115713, 2201924341, 2202101761, 2202205897, 2203649197, 2203856497, 2206095589, 2210578759, 2213431729, - 2216960929, 2217879901, 2219072017, 2224252801, 2229468697, 2231332357, 2233031701, 2240507821, 2241880033, 2241982009, - 2244932281, 2245519981, 2246762899, 2248354153, 2251732033, 2254314241, 2254757077, 2256197761, 2256748777, 2256751837, - 2262861901, 2269307587, 2274584089, 2283289681, 2284416181, 2289251669, 2289624793, 2290316377, 2290910257, 2291205461, - 2292068143, 2295209281, 2296995121, 2299190401, 2300628601, 2300795353, 2301745249, 2304120001, 2308966661, 2309241601, - 2309405617, 2311558021, 2311575001, 2315137261, 2320527613, 2323147201, 2324867399, 2329584217, 2330569541, 2331181621, - 2335341601, 2338157597, 2338728001, 2340460487, 2345907961, 2347597981, 2352371251, 2354453561, 2355230749, 2355320101, - 2355622721, 2355649921, 2355735089, 2358534361, 2360261989, 2370771181, 2370928337, 2371350101, 2372976563, 2374232977, - 2375415841, 2377166401, 2378309041, 2381782597, 2382678101, 2383164577, 2385574201, 2389072321, 2389544977, 2393708761, - 2394311233, 2398393661, 2404912501, 2411128441, 2412172153, 2412675721, 2413973071, 2422296241, 2423401681, 2425249601, - 2428648967, 2428870753, 2428986913, 2429407961, 2430697513, 2431136401, 2431144801, 2432761633, 2432860273, 2433791593, - 2434964321, 2434974433, 2435091221, 2436691321, 2437907779, 2438778413, 2442050353, 2442454561, 2443708961, 2444950561, - 2448039497, 2448374689, 2453473049, 2454285751, 2456536681, 2457846161, 2463713281, 2471205361, 2473120961, 2473189441, - 2473823353, 2474308069, 2474676949, 2476283239, 2477814193, 2478643907, 2480147521, 2480343553, 2482435981, 2482682131, - 2484408301, 2486017249, 2488420801, 2488591117, 2492480233, 2494660033, 2494984321, 2495834329, 2499327041, 2501012599, - 2501771329, 2502525637, 2504008609, 2506529257, 2506733189, 2507121037, 2508178843, 2513230891, 2516684801, 2519297089, - 2525070241, 2526566041, 2528291341, 2529410281, 2529827821, 2529854713, 2530351561, 2532630787, 2533465661, 2533797017, - 2535516173, 2537105761, 2539406281, 2539736257, 2540469901, 2541660367, 2542479481, 2544590161, 2545934077, 2548051801, - 2550139253, 2550780277, 2551365769, 2552418761, 2553272929, 2555391481, 2561945401, 2564536201, 2565186137, 2570087521, - 2571180247, 2575060949, 2575737361, 2577345541, 2582092189, 2582246701, 2582952769, 2583322381, 2584460701, 2588054401, - 2588582089, 2590663681, 2593065721, 2595276353, 2597289241, 2597294701, 2598933481, 2600611861, 2602343521, 2602378721, - 2604465013, 2604803701, 2611122229, 2611461529, 2613382201, 2614688801, 2616180821, 2617563031, 2621080741, 2621977627, - 2622993661, 2624549929, 2625903601, 2626783921, 2627284987, 2630643401, 2632605049, 2634284801, 2634804481, 2634820813, - 2638067881, 2639099233, 2642159809, 2642582251, 2646751249, 2646790033, 2648662777, 2649907201, 2650820329, 2651507713, - 2654716321, 2656494271, 2658630913, 2658696301, 2659265701, 2668095181, 2668469431, 2670972949, 2672605657, 2672651521, - 2676053333, 2677147201, 2677821121, 2678785621, 2681041843, 2682823681, 2683742491, 2684284441, 2687655169, 2688124001, - 2689427281, 2690408533, 2690867401, 2693739751, 2695115473, 2700818017, 2700891839, 2701878941, 2704957909, 2706863833, - 2707661501, 2716157989, 2716275007, 2717428033, 2719319513, 2721666817, 2721721939, 2723859001, 2725357249, 2733156029, - 2736316301, 2738184697, 2740336561, 2744329909, 2746021741, 2753333227, 2753538001, 2759392633, 2765323397, 2766006253, - 2767672189, 2769080161, 2769602333, 2774295577, 2777887297, 2778304273, 2779477741, 2781117721, 2781226477, 2786028337, - 2787998641, 2789218909, 2800352011, 2805762961, 2809635901, 2812672981, 2814748201, 2823570433, 2824256377, 2824804693, - 2824854913, 2828205397, 2832384133, 2832743713, 2837697773, 2837917633, 2840634109, 2840871041, 2841190381, 2847894377, - 2848466281, 2848722131, 2855046421, 2855071801, 2855512909, 2862066481, 2865483601, 2866005139, 2866527841, 2870377309, - 2871536561, 2872527733, 2872948321, 2874382853, 2877769501, 2881429741, 2882370481, 2885594497, 2887955533, 2890316801, - 2890414873, 2892426029, 2894667781, 2895004927, 2899294889, 2903776129, 2915953633, 2916247819, 2918295451, 2920691161, - 2923042141, 2924158001, 2929062533, 2929106753, 2930831641, 2931708097, 2932327549, 2936227603, 2936958181, 2941174897, - 2941343633, 2944555681, 2944677961, 2945208001, 2945549881, 2951136343, 2956724317, 2957320351, 2965700233, 2967053953, - 2968206601, 2974506841, 2975377429, 2976930001, 2978766341, 2980689601, 2986025677, 2987414977, 2990152901, 2993462713, - 2993495041, 2994098281, 2994415201, 2998202353, 2998919873, 3000688381, 3001561441, 3002647829, 3004443679, 3009628301, - 3011421841, 3014101261, 3015502181, 3016957381, 3017444761, 3018147217, 3018576689, 3019916461, 3025350343, 3026575553, - 3028586471, 3030393901, 3033332641, 3034402681, 3034817209, 3035375047, 3036079729, 3037295801, 3037781251, 3038880473, - 3039681457, 3041984353, 3042630533, 3048159841, 3050190163, 3056100623, 3056160929, 3057886591, 3058670677, 3059397793, - 3063685633, 3065998717, 3076505209, 3077122133, 3079496551, 3082054697, 3082068013, 3083053387, 3083537689, 3083884651, - 3088408429, 3089013313, 3091019777, 3094763851, 3099670657, 3103800701, 3112974481, 3114125071, 3115667521, 3120445697, - 3122287981, 3129914881, 3133899409, 3135040133, 3143282221, 3145410761, 3150972917, 3156599161, 3156643141, 3157579861, - 3163106953, 3166504273, 3167442721, 3170262409, 3172658653, 3175204531, 3175255717, 3178375201, 3181356263, 3181391641, - 3182606857, 3182655361, 3182891401, 3185472001, 3187035113, 3187421077, 3187939921, 3196397821, 3196431829, 3197565001, - 3197632441, 3197911001, 3197911741, 3199164901, 3205663921, 3207297773, 3208902491, 3212465437, 3215031751, 3217412881, - 3219808411, 3221580281, 3222693421, 3224143441, 3225081473, 3227082823, 3227209057, 3229131137, 3233558021, 3237992101, - 3242533897, 3248236309, 3250348417, 3250700737, 3252148621, 3257334541, 3258647809, 3258892801, 3261114601, 3263097641, - 3263568901, 3263626957, 3264820001, 3265122451, 3267417677, 3268506541, 3268841941, 3270933121, 3271999249, 3272030401, - 3272702497, 3274264033, 3275671969, 3276075709, 3277047649, 3278640289, 3280067129, 3282974857, 3287174129, 3288757249, - 3295362727, 3296403601, 3299246833, 3302322241, 3304307341, 3305829073, 3306686659, 3306957593, 3310858777, 3312489577, - 3312536569, 3313196881, 3315139717, 3320669437, 3323308501, 3323590463, 3323829169, 3328354801, 3332800021, 3334350781, - 3340214413, 3342005633, 3344191241, 3346172189, 3347908801, 3349218881, 3350993969, 3352091557, 3355382857, 3355953001, - 3357417181, 3359737921, 3360511981, 3369139201, 3371024521, 3371452921, 3371693063, 3372667121, 3373086601, 3381052177, - 3381901921, 3385842877, 3386603221, 3387014401, 3387487351, 3389030261, 3395091311, 3399205591, 3399890413, 3402234749, - 3407609221, 3407772817, 3407952169, 3408135121, 3409339393, 3411250081, 3411574801, 3411829693, 3412575097, 3415379701, - 3415832137, 3417522841, 3420143941, 3421845001, 3423222757, 3423580481, 3427050673, 3428133103, 3429457921, 3429982081, - 3430804297, 3432695921, 3432997537, 3433458073, 3434575327, 3435973837, 3440195713, 3443704261, 3449768513, 3450717901, - 3453900913, 3458257741, 3461861761, 3463907761, 3464236901, 3466158361, 3470716657, 3474335437, 3480174001, 3482161261, - 3485747521, 3489958697, 3491763493, 3492178873, 3492883081, 3493262761, 3497607433, 3504132113, 3512030497, 3512291021, - 3512369857, 3513604657, 3516565057, 3519318721, 3524086333, 3525088961, 3529119361, 3529864391, 3532687201, 3533662129, - 3533856913, 3538213381, 3542303047, 3543203333, 3548378341, 3549286001, 3549988261, 3552158521, 3553567057, 3557646401, - 3562963973, 3563340457, 3566428301, 3574891757, 3582711841, 3583249921, 3583604161, 3584800801, 3586833253, 3587553971, - 3589937261, 3590409439, 3593276353, 3594110081, 3596491907, 3596815169, 3598772761, 3602006101, 3605151241, 3611571121, - 3612298321, 3612825221, 3614770573, 3616574081, 3620631169, 3628526287, 3630596257, 3631828481, 3632452741, 3635993089, - 3649116277, 3649965281, 3650158849, 3651572609, 3656355841, 3658730893, 3662387977, 3662503093, 3663084541, 3668926801, - 3669587533, 3672754633, 3677180797, 3679657997, 3682471321, 3685647701, 3685775741, 3692307161, 3695628133, 3697278427, - 3700801861, 3705582073, 3705623281, 3708123301, 3708905341, 3709626961, 3712887289, 3713287801, 3713448769, 3718226401, - 3721486081, 3723410161, 3723699373, 3725016749, 3727828501, 3729097633, 3733761739, 3736293461, 3745192001, 3746101189, - 3749383681, 3751554581, 3751782737, 3754680403, 3756668401, 3759781369, 3760622689, 3760896133, 3762110881, 3767640601, - 3773061337, 3774337201, 3784123501, 3787491457, 3798040471, 3798626833, 3799111681, 3800084401, 3805699501, 3807112123, - 3807308269, 3807749821, 3809018947, 3813919453, 3817561777, 3817706621, 3821233121, 3827035237, 3832807681, 3833208961, - 3842941741, 3846174151, 3846532801, 3847106803, 3850058689, 3852800033, 3863326897, 3865604023, 3867183937, 3874471147, - 3874523017, 3875096893, 3875965417, 3886515361, 3886643801, 3887423437, 3887635753, 3891892421, 3891919417, 3894053311, - 3896079281, 3897241129, 3897869201, 3898906129, 3900327241, 3903711841, 3905533721, 3905876501, 3907577521, 3907752241, - 3912174421, 3914880337, 3914923211, 3915467341, 3915604421, 3915921241, 3918227437, 3922321561, 3926912669, 3929293061, - 3934940833, 3935864017, 3936123601, 3945165841, 3947233201, 3947383201, 3953408801, 3953949421, 3955572001, 3958597301, - 3958930441, 3959578801, 3960728641, 3962037061, 3966350203, 3967343161, 3971095301, 3973556837, 3979485931, 3982017601, - 3987528793, 3987960913, 3991124341, 3992697997, 3997536427, 4005660961, 4007365741, 4011996871, 4015548769, 4017684529, - 4018283501, 4020144133, 4026822577, 4027012021, 4027518961, 4028465873, 4028771849, 4031223841, 4034969401, 4034993269, - 4035498409, 4036395581, 4042538497, 4044601751, 4044884689, 4048493983, 4053267217, 4054039841, 4057195309, 4058433931, - 4059776533, 4060942381, 4061009971, 4064633821, 4067039461, 4067887501, 4068671881, 4071644893, 4075241633, 4075721921, - 4076009857, 4079665633, 4079682361, 4083376067, 4085074909, 4088147617, 4088838913, 4092929149, 4098258707, 4099180801, - 4100934241, 4103745689, 4105691393, 4108970251, 4109461709, 4109711581, 4110320663, 4113013141, 4115891893, 4117058221, - 4117447441, 4121286907, 4127050621, 4129914673, 4133928761, 4135847101, 4136916001, 4137262541, 4138838401, 4139015987, - 4150174393, 4155375349, 4157008813, 4162880401, 4166032873, 4183664101, 4185636781, 4186561633, 4187360341, 4191864013, - 4192060699, 4195843037, 4196323561, 4204344601, 4206006229, 4206295433, 4212105409, 4215885697, 4218900001, 4220122321, - 4232966251, 4234224601, 4237212061, 4243744201, 4244022301, 4244663651, 4247990917, 4250920459, 4251904273, 4255695013, - 4257003353, 4261352869, 4271267333, 4275011401, 4277526901, 4278305651, 4282867213, 4285148981, 4293088801, 4294901761, - } - - primes16 = [65536]byte{ - 2, 1, 1, 2, 1, 2, 1, 4, 3, 2, // 0-9 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 10-19 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 20-29 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 30-39 - 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 40-49 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 50-59 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 60-69 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 70-79 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 80-89 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 90-99 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 100-109 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 110-119 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 120-129 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 130-139 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 140-149 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 150-159 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 160-169 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 170-179 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 180-189 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 12, // 190-199 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 200-209 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 210-219 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 220-229 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 230-239 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 240-249 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 250-259 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 260-269 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 270-279 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 280-289 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 290-299 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 300-309 - 1, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 310-319 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 320-329 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 330-339 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 340-349 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 350-359 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 360-369 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 370-379 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 380-389 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 390-399 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 400-409 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 410-419 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 420-429 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 430-439 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 440-449 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 450-459 - 1, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 460-469 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 470-479 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 480-489 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 490-499 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 500-509 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 510-519 - 1, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 520-529 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 530-539 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 540-549 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 550-559 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 560-569 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 570-579 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 580-589 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 590-599 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 600-609 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 12, // 610-619 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 620-629 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 630-639 - 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 640-649 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 650-659 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 660-669 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 670-679 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 680-689 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 690-699 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 700-709 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 710-719 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 720-729 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 730-739 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 740-749 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 750-759 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 760-769 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 770-779 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 780-789 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 790-799 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 800-809 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 810-819 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 10, // 820-829 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 830-839 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 840-849 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 850-859 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 860-869 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 870-879 - 1, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 880-889 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 890-899 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 900-909 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 910-919 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 920-929 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 930-939 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 940-949 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 950-959 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 960-969 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 970-979 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 980-989 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 990-999 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 1000-1009 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 1010-1019 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 1020-1029 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 1030-1039 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 1040-1049 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 1050-1059 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 1060-1069 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 1070-1079 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 1080-1089 - 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 1090-1099 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 1100-1109 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 1110-1119 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 22, // 1120-1129 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 1130-1139 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 1140-1149 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 1150-1159 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 1160-1169 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 1170-1179 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 1180-1189 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 1190-1199 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 1200-1209 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 1210-1219 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 1220-1229 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 1230-1239 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 1240-1249 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 1250-1259 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 1260-1269 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 1270-1279 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 1280-1289 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 1290-1299 - 1, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 1300-1309 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 1310-1319 - 1, 6, 5, 4, 3, 2, 1, 34, 33, 32, // 1320-1329 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 1330-1339 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 1340-1349 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 1350-1359 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 1360-1369 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 1370-1379 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 1380-1389 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 1390-1399 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 1400-1409 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 1410-1419 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 1420-1429 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 1430-1439 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 1440-1449 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 1450-1459 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 1460-1469 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 1470-1479 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 1480-1489 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 1490-1499 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 1500-1509 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 1510-1519 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 1520-1529 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 1530-1539 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 1540-1549 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 1550-1559 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 1560-1569 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 1570-1579 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 1580-1589 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 1590-1599 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 1600-1609 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 1610-1619 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 1620-1629 - 7, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 1630-1639 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 1640-1649 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 1650-1659 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 24, // 1660-1669 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 1670-1679 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 1680-1689 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 10, // 1690-1699 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 1700-1709 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 1710-1719 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 1720-1729 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 1730-1739 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 1740-1749 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 1750-1759 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 1760-1769 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 1770-1779 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 12, // 1780-1789 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 1790-1799 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 1800-1809 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 1810-1819 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 1820-1829 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 1830-1839 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 1840-1849 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 1850-1859 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 1860-1869 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 10, // 1870-1879 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 1880-1889 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 1890-1899 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 1900-1909 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 1910-1919 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 1920-1929 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 1930-1939 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 1940-1949 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 1950-1959 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 1960-1969 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 1970-1979 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 1980-1989 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 1990-1999 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 2000-2009 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 2010-2019 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 2020-2029 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 2030-2039 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 2040-2049 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 2050-2059 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 2060-2069 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 2070-2079 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 10, // 2080-2089 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 2090-2099 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 2100-2109 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 2110-2119 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 2120-2129 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 2130-2139 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 2140-2149 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 2150-2159 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 2160-2169 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 24, // 2170-2179 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 2180-2189 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 2190-2199 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 2200-2209 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 2210-2219 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 2220-2229 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 2230-2239 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 2240-2249 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 2250-2259 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 2260-2269 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 2270-2279 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 2280-2289 - 3, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 2290-2299 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 2300-2309 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 2310-2319 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 2320-2329 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 2330-2339 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 2340-2349 - 1, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 2350-2359 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 2360-2369 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 2370-2379 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 2380-2389 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 2390-2399 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 2400-2409 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 2410-2419 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 2420-2429 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 2430-2439 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 2440-2449 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 2450-2459 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 2460-2469 - 3, 2, 1, 4, 3, 2, 1, 26, 25, 24, // 2470-2479 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 2480-2489 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 2490-2499 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 2500-2509 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 2510-2519 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 2520-2529 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 2530-2539 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 2540-2549 - 1, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 2550-2559 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 2560-2569 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 2570-2579 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 2580-2589 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 2590-2599 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 2600-2609 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 2610-2619 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 2620-2629 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 2630-2639 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 2640-2649 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 2650-2659 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 2660-2669 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 2670-2679 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 2680-2689 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 2690-2699 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 2700-2709 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 2710-2719 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 2720-2729 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 2730-2739 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 2740-2749 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 2750-2759 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 2760-2769 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 2770-2779 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 2780-2789 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 2790-2799 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 2800-2809 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 2810-2819 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 2820-2829 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 2830-2839 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 2840-2849 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 2850-2859 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 2860-2869 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 2870-2879 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 2880-2889 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 2890-2899 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 2900-2909 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 2910-2919 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 2920-2929 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 2930-2939 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 2940-2949 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 2950-2959 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 2960-2969 - 1, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 2970-2979 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 2980-2989 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 2990-2999 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 3000-3009 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 3010-3019 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 3020-3029 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 3030-3039 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 3040-3049 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 3050-3059 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 3060-3069 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 3070-3079 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 20, // 3080-3089 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 3090-3099 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 3100-3109 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 3110-3119 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 3120-3129 - 7, 6, 5, 4, 3, 2, 1, 26, 25, 24, // 3130-3139 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 3140-3149 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 3150-3159 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 12, // 3160-3169 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 3170-3179 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 3180-3189 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 3190-3199 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 3200-3209 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 3210-3219 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 22, // 3220-3229 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 3230-3239 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 3240-3249 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 12, // 3250-3259 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 3260-3269 - 1, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 3270-3279 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 3280-3289 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 3290-3299 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 3300-3309 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 3310-3319 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 3320-3329 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 3330-3339 - 3, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 3340-3349 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 3350-3359 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 3360-3369 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 3370-3379 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 3380-3389 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 3390-3399 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 3400-3409 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 3410-3419 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 3420-3429 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 3430-3439 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 3440-3449 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 3450-3459 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 22, // 3460-3469 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 3470-3479 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 3480-3489 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 3490-3499 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 3500-3509 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 3510-3519 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 3520-3529 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 3530-3539 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 3540-3549 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 3550-3559 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 3560-3569 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 3570-3579 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 3580-3589 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 3590-3599 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 3600-3609 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 3610-3619 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 3620-3629 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 3630-3639 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 3640-3649 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 3650-3659 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 3660-3669 - 1, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 3670-3679 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 3680-3689 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 3690-3699 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 3700-3709 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 3710-3719 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 3720-3729 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 22, // 3730-3739 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 3740-3749 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 3750-3759 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 3760-3769 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 3770-3779 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 3780-3789 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 3790-3799 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 3800-3809 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 3810-3819 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 3820-3829 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 3830-3839 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 3840-3849 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 3850-3859 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 3860-3869 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 3870-3879 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 3880-3889 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 3890-3899 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 3900-3909 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 3910-3919 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 3920-3929 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 3930-3939 - 3, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 3940-3949 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 3950-3959 - 7, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 3960-3969 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 3970-3979 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 3980-3989 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 3990-3999 - 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 4000-4009 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 4010-4019 - 1, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 4020-4029 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 4030-4039 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 4040-4049 - 1, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 4050-4059 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 4060-4069 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 4070-4079 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 4080-4089 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 4090-4099 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 4100-4109 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 4110-4119 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 4120-4129 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 4130-4139 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 4140-4149 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 18, // 4150-4159 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 4160-4169 - 7, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 4170-4179 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 4180-4189 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 4190-4199 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 4200-4209 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 4210-4219 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 4220-4229 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 4230-4239 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 4240-4249 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 4250-4259 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 4260-4269 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 4270-4279 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 4280-4289 - 7, 6, 5, 4, 3, 2, 1, 30, 29, 28, // 4290-4299 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 4300-4309 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 4310-4319 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 4320-4329 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 4330-4339 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 4340-4349 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 4350-4359 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 4360-4369 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 4370-4379 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 4380-4389 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 4390-4399 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 4400-4409 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 4410-4419 - 1, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 4420-4429 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 4430-4439 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 4440-4449 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 4450-4459 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 4460-4469 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 4470-4479 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 4480-4489 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 4490-4499 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 4500-4509 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 4510-4519 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 4520-4529 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 4530-4539 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 4540-4549 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 4550-4559 - 1, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 4560-4569 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 4570-4579 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 4580-4589 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 4590-4599 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 4600-4609 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 4610-4619 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 4620-4629 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 4630-4639 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 4640-4649 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 4650-4659 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 4660-4669 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 4670-4679 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 4680-4689 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 4690-4699 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 4700-4709 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 4710-4719 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 4720-4729 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 4730-4739 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 4740-4749 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 24, // 4750-4759 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 4760-4769 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 4770-4779 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 4780-4789 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 4790-4799 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 4800-4809 - 3, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 4810-4819 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 4820-4829 - 1, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 4830-4839 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 4840-4849 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 4850-4859 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 4860-4869 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 4870-4879 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 4880-4889 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 4890-4899 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 4900-4909 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 4910-4919 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 4920-4929 - 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 4930-4939 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 4940-4949 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 4950-4959 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 4960-4969 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 4970-4979 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 4980-4989 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 4990-4999 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 5000-5009 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 5010-5019 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 5020-5029 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 5030-5039 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 5040-5049 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 5050-5059 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 5060-5069 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 5070-5079 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 5080-5089 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 5090-5099 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 5100-5109 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 28, // 5110-5119 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 5120-5129 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 5130-5139 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 5140-5149 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 5150-5159 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 5160-5169 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 5170-5179 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 5180-5189 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 5190-5199 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 5200-5209 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 5210-5219 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 5220-5229 - 1, 2, 1, 4, 3, 2, 1, 24, 23, 22, // 5230-5239 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 5240-5249 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 5250-5259 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 5260-5269 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 5270-5279 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 5280-5289 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 5290-5299 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 5300-5309 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 5310-5319 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 5320-5329 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 5330-5339 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 5340-5349 - 1, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 5350-5359 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 5360-5369 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 5370-5379 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 5380-5389 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 5390-5399 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 5400-5409 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 12, // 5410-5419 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 5420-5429 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 5430-5439 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 22, // 5440-5449 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 5450-5459 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 5460-5469 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 5470-5479 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 5480-5489 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 5490-5499 - 1, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 5500-5509 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 5510-5519 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 5520-5529 - 1, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 5530-5539 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 5540-5549 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 5550-5559 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 5560-5569 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 5570-5579 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 5580-5589 - 1, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 5590-5599 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 5600-5609 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 5610-5619 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 5620-5629 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 5630-5639 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 5640-5649 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 10, // 5650-5659 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 5660-5669 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 5670-5679 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 5680-5689 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 5690-5699 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 5700-5709 - 1, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 5710-5719 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 5720-5729 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 5730-5739 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 30, // 5740-5749 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 5750-5759 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 5760-5769 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 5770-5779 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 5780-5789 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 5790-5799 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 5800-5809 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 5810-5819 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 5820-5829 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 5830-5839 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 5840-5849 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 5850-5859 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 5860-5869 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 5870-5879 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 5880-5889 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 5890-5899 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 5900-5909 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 5910-5919 - 3, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 5920-5929 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 5930-5939 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 5940-5949 - 3, 2, 1, 28, 27, 26, 25, 24, 23, 22, // 5950-5959 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 5960-5969 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 5970-5979 - 1, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 5980-5989 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 5990-5999 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 6000-6009 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 6010-6019 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 6020-6029 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 6030-6039 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 6040-6049 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 6050-6059 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 6060-6069 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 6070-6079 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 6080-6089 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 6090-6099 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 6100-6109 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 6110-6119 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 6120-6129 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 6130-6139 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 6140-6149 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 6150-6159 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 6160-6169 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 6170-6179 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 6180-6189 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 6190-6199 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 6200-6209 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 6210-6219 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 6220-6229 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 6230-6239 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 6240-6249 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 6250-6259 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 6260-6269 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 6270-6279 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 6280-6289 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 6290-6299 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 6300-6309 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 6310-6319 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 6320-6329 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 6330-6339 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 6340-6349 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 6350-6359 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 6360-6369 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 6370-6379 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 6380-6389 - 7, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 6390-6399 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 6400-6409 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 6410-6419 - 1, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 6420-6429 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 6430-6439 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 6440-6449 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 6450-6459 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 6460-6469 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 6470-6479 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 6480-6489 - 1, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 6490-6499 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 6500-6509 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 6510-6519 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 6520-6529 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 6530-6539 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 6540-6549 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 6550-6559 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 6560-6569 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 6570-6579 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 6580-6589 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 6590-6599 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 6600-6609 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 6610-6619 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 6620-6629 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 6630-6639 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 6640-6649 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 6650-6659 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 6660-6669 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 6670-6679 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 6680-6689 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 6690-6699 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 6700-6709 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 6710-6719 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 6720-6729 - 3, 2, 1, 4, 3, 2, 1, 24, 23, 22, // 6730-6739 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 6740-6749 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 6750-6759 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 6760-6769 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 6770-6779 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 6780-6789 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 6790-6799 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 6800-6809 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 6810-6819 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 6820-6829 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 6830-6839 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 6840-6849 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 6850-6859 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 6860-6869 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 6870-6879 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 6880-6889 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 6890-6899 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 6900-6909 - 1, 6, 5, 4, 3, 2, 1, 30, 29, 28, // 6910-6919 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 6920-6929 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 6930-6939 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 6940-6949 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 6950-6959 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 6960-6969 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 6970-6979 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 6980-6989 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 6990-6999 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 7000-7009 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 7010-7019 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 7020-7029 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 7030-7039 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 7040-7049 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 7050-7059 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 7060-7069 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 24, // 7070-7079 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 7080-7089 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 7090-7099 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 7100-7109 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 7110-7119 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 22, // 7120-7129 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 7130-7139 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 7140-7149 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 7150-7159 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 7160-7169 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 7170-7179 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 7180-7189 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 7190-7199 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 7200-7209 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 7210-7219 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 7220-7229 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 7230-7239 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 7240-7249 - 3, 2, 1, 30, 29, 28, 27, 26, 25, 24, // 7250-7259 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 7260-7269 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 7270-7279 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 7280-7289 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 7290-7299 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 7300-7309 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 7310-7319 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 7320-7329 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 7330-7339 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 7340-7349 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 7350-7359 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 24, // 7360-7369 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 7370-7379 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 7380-7389 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 7390-7399 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 7400-7409 - 1, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 7410-7419 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 7420-7429 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 7430-7439 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 7440-7449 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 18, // 7450-7459 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 7460-7469 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 7470-7479 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 7480-7489 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 7490-7499 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 7500-7509 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 7510-7519 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 7520-7529 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 7530-7539 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 7540-7549 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 7550-7559 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 7560-7569 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 7570-7579 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 7580-7589 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 7590-7599 - 3, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 7600-7609 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 7610-7619 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 7620-7629 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 7630-7639 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 20, // 7640-7649 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 7650-7659 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 7660-7669 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 7670-7679 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 7680-7689 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 7690-7699 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 7700-7709 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 7710-7719 - 3, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 7720-7729 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 7730-7739 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 7740-7749 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 30, // 7750-7759 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 7760-7769 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 7770-7779 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 7780-7789 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 7790-7799 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 7800-7809 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 7810-7819 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 7820-7829 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 7830-7839 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 7840-7849 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 7850-7859 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 7860-7869 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 7870-7879 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 7880-7889 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 7890-7899 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 7900-7909 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 7910-7919 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 7920-7929 - 3, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 7930-7939 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 7940-7949 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 7950-7959 - 3, 2, 1, 30, 29, 28, 27, 26, 25, 24, // 7960-7969 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 7970-7979 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 7980-7989 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 7990-7999 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 8000-8009 - 1, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 8010-8019 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 8020-8029 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 8030-8039 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 8040-8049 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 8050-8059 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 8060-8069 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 8070-8079 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 8080-8089 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 8090-8099 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 8100-8109 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 8110-8119 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 8120-8129 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 8130-8139 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 8140-8149 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 8150-8159 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 8160-8169 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 8170-8179 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 8180-8189 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 8190-8199 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 8200-8209 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 8210-8219 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 8220-8229 - 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 8230-8239 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 8240-8249 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 8250-8259 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 8260-8269 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 8270-8279 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 8280-8289 - 1, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 8290-8299 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 8300-8309 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 8310-8319 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 24, // 8320-8329 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 8330-8339 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 8340-8349 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 8350-8359 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 8360-8369 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 8370-8379 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 30, // 8380-8389 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 8390-8399 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 8400-8409 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 8410-8419 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 8420-8429 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 8430-8439 - 3, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 8440-8449 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 8450-8459 - 1, 6, 5, 4, 3, 2, 1, 34, 33, 32, // 8460-8469 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 8470-8479 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 8480-8489 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 8490-8499 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 8500-8509 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 8510-8519 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 8520-8529 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 8530-8539 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 8540-8549 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 8550-8559 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 8560-8569 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 8570-8579 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 8580-8589 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 8590-8599 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 8600-8609 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 8610-8619 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 12, // 8620-8629 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 8630-8639 - 1, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 8640-8649 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 8650-8659 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 8660-8669 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 8670-8679 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 8680-8689 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 8690-8699 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 8700-8709 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 8710-8719 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 8720-8729 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 8730-8739 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 8740-8749 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 8750-8759 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 8760-8769 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 8770-8779 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 8780-8789 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 8790-8799 - 3, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 8800-8809 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 8810-8819 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 8820-8829 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 8830-8839 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 8840-8849 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 8850-8859 - 1, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 8860-8869 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 8870-8879 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 8880-8889 - 3, 2, 1, 30, 29, 28, 27, 26, 25, 24, // 8890-8899 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 8900-8909 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 8910-8919 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 8920-8929 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 8930-8939 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 8940-8949 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 8950-8959 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 8960-8969 - 1, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 8970-8979 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 8980-8989 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 8990-8999 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 9000-9009 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 9010-9019 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 9020-9029 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 9030-9039 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 9040-9049 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 9050-9059 - 7, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 9060-9069 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 9070-9079 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 9080-9089 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 9090-9099 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 9100-9109 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 9110-9119 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 9120-9129 - 3, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 9130-9139 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 9140-9149 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 9150-9159 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 9160-9169 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 9170-9179 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 9180-9189 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 9190-9199 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 9200-9209 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 9210-9219 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 9220-9229 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 9230-9239 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 9240-9249 - 7, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 9250-9259 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 9260-9269 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 9270-9279 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 9280-9289 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 9290-9299 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 9300-9309 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 9310-9319 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 9320-9329 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 9330-9339 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 22, // 9340-9349 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 9350-9359 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 9360-9369 - 1, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 9370-9379 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 9380-9389 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 9390-9399 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 9400-9409 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 9410-9419 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 9420-9429 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 22, // 9430-9439 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 9440-9449 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 9450-9459 - 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 9460-9469 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 9470-9479 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 9480-9489 - 1, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 9490-9499 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 9500-9509 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 9510-9519 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 9520-9529 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 9530-9539 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 9540-9549 - 1, 36, 35, 34, 33, 32, 31, 30, 29, 28, // 9550-9559 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 9560-9569 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 9570-9579 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 9580-9589 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 9590-9599 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 9600-9609 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 9610-9619 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 9620-9629 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 9630-9639 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 9640-9649 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 9650-9659 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 9660-9669 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 9670-9679 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 9680-9689 - 7, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 9690-9699 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 9700-9709 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 9710-9719 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 9720-9729 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 9730-9739 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 9740-9749 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 9750-9759 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 9760-9769 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 9770-9779 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 9780-9789 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 9790-9799 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 9800-9809 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 9810-9819 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 9820-9829 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 9830-9839 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 9840-9849 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 9850-9859 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 9860-9869 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 9870-9879 - 3, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 9880-9889 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 9890-9899 - 1, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 9900-9909 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 9910-9919 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 9920-9929 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 9930-9939 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 9940-9949 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 9950-9959 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 9960-9969 - 3, 2, 1, 34, 33, 32, 31, 30, 29, 28, // 9970-9979 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 9980-9989 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 9990-9999 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 28, // 10000-10009 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 10010-10019 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 10020-10029 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 22, // 10030-10039 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 10040-10049 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 10050-10059 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 10060-10069 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 10070-10079 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 10080-10089 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 10090-10099 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 10100-10109 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 10110-10119 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 10120-10129 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 10130-10139 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 10140-10149 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 10150-10159 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 10160-10169 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 10170-10179 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 10180-10189 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 10190-10199 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 10200-10209 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 10210-10219 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 10220-10229 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 10230-10239 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 10240-10249 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 10250-10259 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 10260-10269 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 10270-10279 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 10280-10289 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 10290-10299 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 10300-10309 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 10310-10319 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 10320-10329 - 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 10330-10339 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 10340-10349 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 10350-10359 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 22, // 10360-10369 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 10370-10379 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 10380-10389 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 28, // 10390-10399 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 10400-10409 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 10410-10419 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 10420-10429 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 10430-10439 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 10440-10449 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 10450-10459 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 10460-10469 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 10470-10479 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 10480-10489 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 10490-10499 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 10500-10509 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 10510-10519 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 10520-10529 - 1, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 10530-10539 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 10540-10549 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 10550-10559 - 7, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 10560-10569 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 10570-10579 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 10580-10589 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 10590-10599 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 10600-10609 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 10610-10619 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 10620-10629 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 10630-10639 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 10640-10649 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 10650-10659 - 3, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 10660-10669 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 10670-10679 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 10680-10689 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 10690-10699 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 10700-10709 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 10710-10719 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 10720-10729 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 10730-10739 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 10740-10749 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 10750-10759 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 10760-10769 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 10770-10779 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 10780-10789 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 32, // 10790-10799 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 10800-10809 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 10810-10819 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 10820-10829 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 10830-10839 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 10840-10849 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 10850-10859 - 1, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 10860-10869 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 10870-10879 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 10880-10889 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 10890-10899 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 28, // 10900-10909 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 10910-10919 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 10920-10929 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 10930-10939 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 10940-10949 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 10950-10959 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 10960-10969 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 10970-10979 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 10980-10989 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 10990-10999 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 11000-11009 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 11010-11019 - 7, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 11020-11029 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 11030-11039 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 11040-11049 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 11050-11059 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 11060-11069 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 11070-11079 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 11080-11089 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 11090-11099 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 11100-11109 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 12, // 11110-11119 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 11120-11129 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 11130-11139 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 11140-11149 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 11150-11159 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 11160-11169 - 1, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 11170-11179 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 11180-11189 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 11190-11199 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 11200-11209 - 3, 2, 1, 26, 25, 24, 23, 22, 21, 20, // 11210-11219 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 11220-11229 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 11230-11239 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 11240-11249 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 11250-11259 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 11260-11269 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 11270-11279 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 11280-11289 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 11290-11299 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 11300-11309 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 11310-11319 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 22, // 11320-11329 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 11330-11339 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 11340-11349 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 11350-11359 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 11360-11369 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 11370-11379 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 11380-11389 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 11390-11399 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 11400-11409 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 11410-11419 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 11420-11429 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 11430-11439 - 3, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 11440-11449 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 11450-11459 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 11460-11469 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 11470-11479 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 11480-11489 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 11490-11499 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 11500-11509 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 11510-11519 - 7, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 11520-11529 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 11530-11539 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 11540-11549 - 1, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 11550-11559 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 11560-11569 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 11570-11579 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 11580-11589 - 3, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 11590-11599 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 11600-11609 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 11610-11619 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 11620-11629 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 11630-11639 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 11640-11649 - 7, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 11650-11659 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 11660-11669 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 11670-11679 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 11680-11689 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 11690-11699 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 11700-11709 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 11710-11719 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 11720-11729 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 11730-11739 - 3, 2, 1, 34, 33, 32, 31, 30, 29, 28, // 11740-11749 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 11750-11759 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 11760-11769 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 11770-11779 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 11780-11789 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 11790-11799 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 11800-11809 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 11810-11819 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 11820-11829 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 24, // 11830-11839 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 11840-11849 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 11850-11859 - 3, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 11860-11869 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 11870-11879 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 11880-11889 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 11890-11899 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 11900-11909 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 11910-11919 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 11920-11929 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 11930-11939 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 11940-11949 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 11950-11959 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 11960-11969 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 11970-11979 - 1, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 11980-11989 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 11990-11999 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 12000-12009 - 1, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 12010-12019 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 12020-12029 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 12030-12039 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 22, // 12040-12049 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 12050-12059 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 12060-12069 - 1, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 12070-12079 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 12080-12089 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 12090-12099 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 12100-12109 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 24, // 12110-12119 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 12120-12129 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 12130-12139 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 12140-12149 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 12150-12159 - 1, 2, 1, 34, 33, 32, 31, 30, 29, 28, // 12160-12169 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 12170-12179 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 12180-12189 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 12190-12199 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 12200-12209 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 12210-12219 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 12220-12229 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 12230-12239 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 12240-12249 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 12250-12259 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 12260-12269 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 12270-12279 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 12280-12289 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 12290-12299 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 12300-12309 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 12310-12319 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 12320-12329 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 12330-12339 - 3, 2, 1, 4, 3, 2, 1, 26, 25, 24, // 12340-12349 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 12350-12359 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 12360-12369 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 12, // 12370-12379 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 12380-12389 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 12390-12399 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 12400-12409 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 12410-12419 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 12420-12429 - 3, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 12430-12439 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 12440-12449 - 1, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 12450-12459 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 12460-12469 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 12470-12479 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 12480-12489 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 12490-12499 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 12500-12509 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 12510-12519 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 12520-12529 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 12530-12539 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 12540-12549 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 12550-12559 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 12560-12569 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 12570-12579 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 12580-12589 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 12590-12599 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 12600-12609 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 12610-12619 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 12620-12629 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 12630-12639 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 12640-12649 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 12650-12659 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 12660-12669 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 12670-12679 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 12680-12689 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 12690-12699 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 12700-12709 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 12710-12719 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 12720-12729 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 12730-12739 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 12740-12749 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 12750-12759 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 12760-12769 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 12770-12779 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 12780-12789 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 12790-12799 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 12800-12809 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 12810-12819 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 12820-12829 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 12830-12839 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 12840-12849 - 3, 2, 1, 36, 35, 34, 33, 32, 31, 30, // 12850-12859 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 12860-12869 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 12870-12879 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 12880-12889 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 12890-12899 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 12900-12909 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 12910-12919 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 12920-12929 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 12930-12939 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 12940-12949 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 12950-12959 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 12960-12969 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 12970-12979 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 12980-12989 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 12990-12999 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 24, // 13000-13009 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 13010-13019 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 13020-13029 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 13030-13039 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 13040-13049 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 13050-13059 - 3, 2, 1, 30, 29, 28, 27, 26, 25, 24, // 13060-13069 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 13070-13079 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 13080-13089 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 13090-13099 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 13100-13109 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 13110-13119 - 1, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 13120-13129 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 13130-13139 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 13140-13149 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 13150-13159 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 13160-13169 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 13170-13179 - 3, 2, 1, 4, 3, 2, 1, 30, 29, 28, // 13180-13189 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 13190-13199 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 13200-13209 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 13210-13219 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 13220-13229 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 13230-13239 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 13240-13249 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 13250-13259 - 7, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 13260-13269 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 13270-13279 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 13280-13289 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 13290-13299 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 13300-13309 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 13310-13319 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 13320-13329 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 28, // 13330-13339 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 13340-13349 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 13350-13359 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 13360-13369 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 13370-13379 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 13380-13389 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 13390-13399 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 13400-13409 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 13410-13419 - 1, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 13420-13429 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 13430-13439 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 13440-13449 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 13450-13459 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 13460-13469 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 13470-13479 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 13480-13489 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 13490-13499 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 13500-13509 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 13510-13519 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 13520-13529 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 13530-13539 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 13540-13549 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 13550-13559 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 13560-13569 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 13570-13579 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 13580-13589 - 1, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 13590-13599 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 13600-13609 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 13610-13619 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 13620-13629 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 13630-13639 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 20, // 13640-13649 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 13650-13659 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 13660-13669 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 13670-13679 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 13680-13689 - 1, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 13690-13699 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 13700-13709 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 13710-13719 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 22, // 13720-13729 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 13730-13739 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 13740-13749 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 13750-13759 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 13760-13769 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 13770-13779 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 13780-13789 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 13790-13799 - 7, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 13800-13809 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 13810-13819 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 13820-13829 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 13830-13839 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 13840-13849 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 13850-13859 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 13860-13869 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 13870-13879 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 13880-13889 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 13890-13899 - 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 13900-13909 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 13910-13919 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 13920-13929 - 1, 2, 1, 30, 29, 28, 27, 26, 25, 24, // 13930-13939 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 13940-13949 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 13950-13959 - 3, 2, 1, 4, 3, 2, 1, 30, 29, 28, // 13960-13969 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 13970-13979 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 13980-13989 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 13990-13999 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 14000-14009 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 14010-14019 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 14020-14029 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 14030-14039 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 14040-14049 - 1, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 14050-14059 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 14060-14069 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 14070-14079 - 1, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 14080-14089 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 14090-14099 - 7, 6, 5, 4, 3, 2, 1, 36, 35, 34, // 14100-14109 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 14110-14119 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 14120-14129 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 14130-14139 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 14140-14149 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 14150-14159 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 14160-14169 - 3, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 14170-14179 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 14180-14189 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 14190-14199 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 14200-14209 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 14210-14219 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 14220-14229 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 14230-14239 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 14240-14249 - 1, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 14250-14259 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 14260-14269 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 14270-14279 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 14280-14289 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 14290-14299 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 14300-14309 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 14310-14319 - 1, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 14320-14329 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 14330-14339 - 1, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 14340-14349 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 14350-14359 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 14360-14369 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 14370-14379 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 14380-14389 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 14390-14399 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 14400-14409 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 14410-14419 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 14420-14429 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 14430-14439 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 14440-14449 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 14450-14459 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 14460-14469 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 14470-14479 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 14480-14489 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 14490-14499 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 14500-14509 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 14510-14519 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 14520-14529 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 14530-14539 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 14540-14549 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 14550-14559 - 1, 2, 1, 28, 27, 26, 25, 24, 23, 22, // 14560-14569 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 14570-14579 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 14580-14589 - 1, 2, 1, 28, 27, 26, 25, 24, 23, 22, // 14590-14599 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 14600-14609 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 14610-14619 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 14620-14629 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 14630-14639 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 14640-14649 - 3, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 14650-14659 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 14660-14669 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 14670-14679 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 14680-14689 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 14690-14699 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 14700-14709 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 14710-14719 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 14720-14729 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 14730-14739 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 14740-14749 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 14750-14759 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 14760-14769 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 14770-14779 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 14780-14789 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 14790-14799 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 14800-14809 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 14810-14819 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 14820-14829 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 14830-14839 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 14840-14849 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 14850-14859 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 14860-14869 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 14870-14879 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 14880-14889 - 1, 6, 5, 4, 3, 2, 1, 26, 25, 24, // 14890-14899 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 14900-14909 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 14910-14919 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 14920-14929 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 14930-14939 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 14940-14949 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 14950-14959 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 14960-14969 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 14970-14979 - 3, 2, 1, 30, 29, 28, 27, 26, 25, 24, // 14980-14989 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 14990-14999 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 15000-15009 - 3, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 15010-15019 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 15020-15029 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 15030-15039 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 15040-15049 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 15050-15059 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 15060-15069 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 15070-15079 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 15080-15089 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 15090-15099 - 1, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 15100-15109 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 15110-15119 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 15120-15129 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 15130-15139 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 15140-15149 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 15150-15159 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 15160-15169 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 15170-15179 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 15180-15189 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 15190-15199 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 15200-15209 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 15210-15219 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 15220-15229 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 15230-15239 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 15240-15249 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 15250-15259 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 15260-15269 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 15270-15279 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 15280-15289 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 15290-15299 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 15300-15309 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 15310-15319 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 15320-15329 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 15330-15339 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 15340-15349 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 15350-15359 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 15360-15369 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 15370-15379 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 15380-15389 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 15390-15399 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 15400-15409 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 15410-15419 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 15420-15429 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 15430-15439 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 15440-15449 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 15450-15459 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 15460-15469 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 15470-15479 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 15480-15489 - 3, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 15490-15499 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 15500-15509 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 15510-15519 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 15520-15529 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 15530-15539 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 15540-15549 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 15550-15559 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 15560-15569 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 15570-15579 - 1, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 15580-15589 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 15590-15599 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 15600-15609 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 15610-15619 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 15620-15629 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 15630-15639 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 12, // 15640-15649 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 15650-15659 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 15660-15669 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 15670-15679 - 3, 2, 1, 44, 43, 42, 41, 40, 39, 38, // 15680-15689 - 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, // 15690-15699 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 15700-15709 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 15710-15719 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 15720-15729 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 10, // 15730-15739 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 15740-15749 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 15750-15759 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 15760-15769 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 15770-15779 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 15780-15789 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 15790-15799 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 15800-15809 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 15810-15819 - 3, 2, 1, 36, 35, 34, 33, 32, 31, 30, // 15820-15829 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 15830-15839 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 15840-15849 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 15850-15859 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 15860-15869 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 15870-15879 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 15880-15889 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 15890-15899 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 15900-15909 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 15910-15919 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 15920-15929 - 7, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 15930-15939 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 15940-15949 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 15950-15959 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 15960-15969 - 1, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 15970-15979 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 15980-15989 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 15990-15999 - 1, 6, 5, 4, 3, 2, 1, 26, 25, 24, // 16000-16009 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 16010-16019 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 16020-16029 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 16030-16039 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 16040-16049 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 16050-16059 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 16060-16069 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 16070-16079 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 16080-16089 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 16090-16099 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 16100-16109 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 16110-16119 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 16120-16129 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 16130-16139 - 1, 42, 41, 40, 39, 38, 37, 36, 35, 34, // 16140-16149 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 16150-16159 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 16160-16169 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 16170-16179 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 16180-16189 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 16190-16199 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 16200-16209 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 16210-16219 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 16220-16229 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 16230-16239 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 16240-16249 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 16250-16259 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 16260-16269 - 3, 2, 1, 28, 27, 26, 25, 24, 23, 22, // 16270-16279 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 16280-16289 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 16290-16299 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 16300-16309 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 16310-16319 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 16320-16329 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 16330-16339 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 16340-16349 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 16350-16359 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 16360-16369 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 16370-16379 - 1, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 16380-16389 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 16390-16399 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 16400-16409 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 16410-16419 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 16420-16429 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 16430-16439 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 16440-16449 - 1, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 16450-16459 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 16460-16469 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 16470-16479 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 16480-16489 - 3, 2, 1, 26, 25, 24, 23, 22, 21, 20, // 16490-16499 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 16500-16509 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 16510-16519 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 16520-16529 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 16530-16539 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 16540-16549 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 16550-16559 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 16560-16569 - 3, 2, 1, 30, 29, 28, 27, 26, 25, 24, // 16570-16579 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 16580-16589 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 16590-16599 - 3, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 16600-16609 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 16610-16619 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 16620-16629 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 16630-16639 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 16640-16649 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 16650-16659 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 16660-16669 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 16670-16679 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 16680-16689 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 16690-16699 - 3, 2, 1, 26, 25, 24, 23, 22, 21, 20, // 16700-16709 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 16710-16719 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 16720-16729 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 16730-16739 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 16740-16749 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 16750-16759 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 16760-16769 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 16770-16779 - 7, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 16780-16789 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 16790-16799 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 16800-16809 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 16810-16819 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 16820-16829 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 16830-16839 - 3, 2, 1, 28, 27, 26, 25, 24, 23, 22, // 16840-16849 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 16850-16859 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 16860-16869 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 16870-16879 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 16880-16889 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 16890-16899 - 1, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 16900-16909 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 16910-16919 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 16920-16929 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 16930-16939 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 16940-16949 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 16950-16959 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 16960-16969 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 16970-16979 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 16980-16989 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 16990-16999 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 17000-17009 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 17010-17019 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 17020-17029 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 17030-17039 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 17040-17049 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 17050-17059 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 17060-17069 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 17070-17079 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 17080-17089 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 17090-17099 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 17100-17109 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 17110-17119 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 17120-17129 - 7, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 17130-17139 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 17140-17149 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 17150-17159 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 17160-17169 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 17170-17179 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 17180-17189 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 17190-17199 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 22, // 17200-17209 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 17210-17219 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 17220-17229 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 17230-17239 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 17240-17249 - 7, 6, 5, 4, 3, 2, 1, 34, 33, 32, // 17250-17259 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 17260-17269 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 17270-17279 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 17280-17289 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 17290-17299 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 17300-17309 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 17310-17319 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 17320-17329 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 17330-17339 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 17340-17349 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 17350-17359 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 17360-17369 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 17370-17379 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 17380-17389 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 17390-17399 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 17400-17409 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 17410-17419 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 17420-17429 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 17430-17439 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 17440-17449 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 17450-17459 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 17460-17469 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 17470-17479 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 17480-17489 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 17490-17499 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 17500-17509 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 20, // 17510-17519 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 17520-17529 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 17530-17539 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 17540-17549 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 17550-17559 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 17560-17569 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 17570-17579 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 17580-17589 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 17590-17599 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 17600-17609 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 17610-17619 - 3, 2, 1, 4, 3, 2, 1, 30, 29, 28, // 17620-17629 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 17630-17639 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 17640-17649 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 17650-17659 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 17660-17669 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 17670-17679 - 1, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 17680-17689 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 17690-17699 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 17700-17709 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 17710-17719 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 17720-17729 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 17730-17739 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 17740-17749 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 17750-17759 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 17760-17769 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 17770-17779 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 17780-17789 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 17790-17799 - 7, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 17800-17809 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 17810-17819 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 17820-17829 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 17830-17839 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 17840-17849 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 17850-17859 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 17860-17869 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 17870-17879 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 17880-17889 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 17890-17899 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 17900-17909 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 17910-17919 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 17920-17929 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 17930-17939 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 17940-17949 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 17950-17959 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 17960-17969 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 17970-17979 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 24, // 17980-17989 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 17990-17999 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 18000-18009 - 3, 2, 1, 28, 27, 26, 25, 24, 23, 22, // 18010-18019 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 18020-18029 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 18030-18039 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 10, // 18040-18049 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 18050-18059 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 18060-18069 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 18070-18079 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 18080-18089 - 7, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 18090-18099 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 18100-18109 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 18110-18119 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 18120-18129 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 18130-18139 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 20, // 18140-18149 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 18150-18159 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 18160-18169 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 18170-18179 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 18180-18189 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 18190-18199 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 18200-18209 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 18210-18219 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 18220-18229 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 18230-18239 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 18240-18249 - 1, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 18250-18259 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 18260-18269 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 18270-18279 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 18280-18289 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 18290-18299 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 18300-18309 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 18310-18319 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 18320-18329 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 18330-18339 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 18340-18349 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 18350-18359 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 18360-18369 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 18370-18379 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 18380-18389 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 18390-18399 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 18400-18409 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 18410-18419 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 18420-18429 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 18430-18439 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 18440-18449 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 18450-18459 - 1, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 18460-18469 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 18470-18479 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 18480-18489 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 18490-18499 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 18500-18509 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 18510-18519 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 18520-18529 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 18530-18539 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 18540-18549 - 3, 2, 1, 30, 29, 28, 27, 26, 25, 24, // 18550-18559 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 18560-18569 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 18570-18579 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 18580-18589 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 18590-18599 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 18600-18609 - 7, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 18610-18619 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 18620-18629 - 7, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 18630-18639 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 18640-18649 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 18650-18659 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 18660-18669 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 18670-18679 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 18680-18689 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 18690-18699 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 18700-18709 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 18710-18719 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 18720-18729 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 18730-18739 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 18740-18749 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 18750-18759 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 18760-18769 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 18770-18779 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 18780-18789 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 18790-18799 - 3, 2, 1, 36, 35, 34, 33, 32, 31, 30, // 18800-18809 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 18810-18819 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 18820-18829 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 20, // 18830-18839 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 18840-18849 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 18850-18859 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 30, // 18860-18869 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 18870-18879 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 18880-18889 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 18890-18899 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 18900-18909 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 28, // 18910-18919 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 18920-18929 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 18930-18939 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 18940-18949 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 18950-18959 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 18960-18969 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 22, // 18970-18979 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 18980-18989 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 18990-18999 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 19000-19009 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 19010-19019 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 19020-19029 - 1, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 19030-19039 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 19040-19049 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 19050-19059 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 19060-19069 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 19070-19079 - 1, 6, 5, 4, 3, 2, 1, 34, 33, 32, // 19080-19089 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 19090-19099 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 19100-19109 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 19110-19119 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 19120-19129 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 19130-19139 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 19140-19149 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 19150-19159 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 19160-19169 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 19170-19179 - 1, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 19180-19189 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 19190-19199 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 19200-19209 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 19210-19219 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 19220-19229 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 19230-19239 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 19240-19249 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 19250-19259 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 19260-19269 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 19270-19279 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 19280-19289 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 19290-19299 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 19300-19309 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 19310-19319 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 19320-19329 - 3, 2, 1, 40, 39, 38, 37, 36, 35, 34, // 19330-19339 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 19340-19349 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 19350-19359 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 19360-19369 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 19370-19379 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 19380-19389 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 19390-19399 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 19400-19409 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 19410-19419 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 19420-19429 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 19430-19439 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 19440-19449 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 19450-19459 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 19460-19469 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 19470-19479 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 19480-19489 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 19490-19499 - 1, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 19500-19509 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 19510-19519 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 19520-19529 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 19530-19539 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 19540-19549 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 19550-19559 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 19560-19569 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 19570-19579 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 19580-19589 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 19590-19599 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 52, // 19600-19609 - 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, // 19610-19619 - 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, // 19620-19629 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 19630-19639 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 19640-19649 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 19650-19659 - 1, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 19660-19669 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 19670-19679 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 19680-19689 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 19690-19699 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 19700-19709 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 19710-19719 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 19720-19729 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 19730-19739 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 19740-19749 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 19750-19759 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 19760-19769 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 19770-19779 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 19780-19789 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 19790-19799 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 19800-19809 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 22, // 19810-19819 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 19820-19829 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 19830-19839 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 19840-19849 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 19850-19859 - 1, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 19860-19869 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 19870-19879 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 19880-19889 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 19890-19899 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 19900-19909 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 19910-19919 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 19920-19929 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 19930-19939 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 19940-19949 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 19950-19959 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 19960-19969 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 19970-19979 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 19980-19989 - 1, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 19990-19999 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 20000-20009 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 20010-20019 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 20020-20029 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 20030-20039 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 20040-20049 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 20050-20059 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 20060-20069 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 20070-20079 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 20080-20089 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 20090-20099 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 20100-20109 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 20110-20119 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 20120-20129 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 20130-20139 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 12, // 20140-20149 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 20150-20159 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 20160-20169 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 20170-20179 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 20180-20189 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 20190-20199 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 20200-20209 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 20210-20219 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 20220-20229 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 20230-20239 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 20240-20249 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 20250-20259 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 20260-20269 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 20270-20279 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 20280-20289 - 7, 6, 5, 4, 3, 2, 1, 26, 25, 24, // 20290-20299 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 20300-20309 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 20310-20319 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 20320-20329 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 20330-20339 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 20340-20349 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 10, // 20350-20359 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 20, // 20360-20369 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 20370-20379 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 20380-20389 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 20390-20399 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 20400-20409 - 1, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 20410-20419 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 20420-20429 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 20430-20439 - 1, 2, 1, 34, 33, 32, 31, 30, 29, 28, // 20440-20449 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 20450-20459 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 20460-20469 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 20470-20479 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 20480-20489 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 20490-20499 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 20500-20509 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 20510-20519 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 20520-20529 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 20530-20539 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 20540-20549 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 20550-20559 - 3, 2, 1, 30, 29, 28, 27, 26, 25, 24, // 20560-20569 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 20570-20579 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 20580-20589 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 20590-20599 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 20600-20609 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 20610-20619 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 20620-20629 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 20630-20639 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 20640-20649 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 20650-20659 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 20660-20669 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 20670-20679 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 20680-20689 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 20690-20699 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 20700-20709 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 20710-20719 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 20720-20729 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 20730-20739 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 20740-20749 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 20750-20759 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 20760-20769 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 20770-20779 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 20780-20789 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 20790-20799 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 40, // 20800-20809 - 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, // 20810-20819 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 20820-20829 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 20830-20839 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 20840-20849 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 20850-20859 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 20860-20869 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 20870-20879 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 20880-20889 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 20890-20899 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 20900-20909 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 20910-20919 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 20920-20929 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 20930-20939 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 20940-20949 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 20950-20959 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 20960-20969 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 20970-20979 - 1, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 20980-20989 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 20990-20999 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 21000-21009 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 21010-21019 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 21020-21029 - 1, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 21030-21039 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 21040-21049 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 21050-21059 - 1, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 21060-21069 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 21070-21079 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 21080-21089 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 21090-21099 - 1, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 21100-21109 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 21110-21119 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 21120-21129 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 21130-21139 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 21140-21149 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 21150-21159 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 21160-21169 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 21170-21179 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 21180-21189 - 1, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 21190-21199 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 21200-21209 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 21210-21219 - 1, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 21220-21229 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 21230-21239 - 7, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 21240-21249 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 21250-21259 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 21260-21269 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 21270-21279 - 3, 2, 1, 30, 29, 28, 27, 26, 25, 24, // 21280-21289 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 21290-21299 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 21300-21309 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 21310-21319 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 21320-21329 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 21330-21339 - 1, 6, 5, 4, 3, 2, 1, 30, 29, 28, // 21340-21349 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 21350-21359 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 21360-21369 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 21370-21379 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 21380-21389 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 21390-21399 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 21400-21409 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 21410-21419 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 21420-21429 - 3, 2, 1, 34, 33, 32, 31, 30, 29, 28, // 21430-21439 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 21440-21449 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 21450-21459 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 21460-21469 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 21470-21479 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 21480-21489 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 21490-21499 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 21500-21509 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 21510-21519 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 28, // 21520-21529 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 21530-21539 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 21540-21549 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 21550-21559 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 21560-21569 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 21570-21579 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 21580-21589 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 21590-21599 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 21600-21609 - 1, 2, 1, 4, 3, 2, 1, 30, 29, 28, // 21610-21619 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 21620-21629 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 21630-21639 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 21640-21649 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 21650-21659 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 21660-21669 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 21670-21679 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 21680-21689 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 21690-21699 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 21700-21709 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 21710-21719 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 21720-21729 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 21730-21739 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 21740-21749 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 21750-21759 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 21760-21769 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 21770-21779 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 21780-21789 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 21790-21799 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 21800-21809 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 21810-21819 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 21820-21829 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 21830-21839 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 21840-21849 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 21850-21859 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 21860-21869 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 21870-21879 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 21880-21889 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 21890-21899 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 21900-21909 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 21910-21919 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 21920-21929 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 21930-21939 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 21940-21949 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 21950-21959 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 21960-21969 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 21970-21979 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 21980-21989 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 21990-21999 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 22000-22009 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 22010-22019 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 22020-22029 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 22030-22039 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 22040-22049 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 22050-22059 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 22060-22069 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 22070-22079 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 22080-22089 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 22090-22099 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 22100-22109 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 22110-22119 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 22120-22129 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 22130-22139 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 22140-22149 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 12, // 22150-22159 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 22160-22169 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 22170-22179 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 22180-22189 - 3, 2, 1, 36, 35, 34, 33, 32, 31, 30, // 22190-22199 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 22200-22209 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 22210-22219 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 22220-22229 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 22230-22239 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 22240-22249 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 22250-22259 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 22260-22269 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 22270-22279 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 22280-22289 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 22290-22299 - 3, 2, 1, 4, 3, 2, 1, 36, 35, 34, // 22300-22309 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 22310-22319 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 22320-22329 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 22330-22339 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 22340-22349 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 22350-22359 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 22360-22369 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 22370-22379 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 22380-22389 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 22390-22399 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 24, // 22400-22409 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 22410-22419 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 22420-22429 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 22430-22439 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 22440-22449 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 22450-22459 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 22460-22469 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 22470-22479 - 1, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 22480-22489 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 22490-22499 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 22500-22509 - 1, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 22510-22519 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 22520-22529 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 22530-22539 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 22540-22549 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 22550-22559 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 22560-22569 - 1, 2, 1, 40, 39, 38, 37, 36, 35, 34, // 22570-22579 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 22580-22589 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 22590-22599 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 22600-22609 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 22610-22619 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 22620-22629 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 22630-22639 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 22640-22649 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 22650-22659 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 22660-22669 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 22670-22679 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 22680-22689 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 22690-22699 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 22700-22709 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 22710-22719 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 22720-22729 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 22730-22739 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 22740-22749 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 22750-22759 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 22760-22769 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 22770-22779 - 3, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 22780-22789 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 22790-22799 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 22800-22809 - 1, 6, 5, 4, 3, 2, 1, 36, 35, 34, // 22810-22819 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 22820-22829 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 22830-22839 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 22840-22849 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 22850-22859 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 22860-22869 - 1, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 22870-22879 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 22880-22889 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 22890-22899 - 1, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 22900-22909 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 22910-22919 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 22920-22929 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 22930-22939 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 22940-22949 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 22950-22959 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 22960-22969 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 22970-22979 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 22980-22989 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 22990-22999 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 23000-23009 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 23010-23019 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 23020-23029 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 23030-23039 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 23040-23049 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 23050-23059 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 23060-23069 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 23070-23079 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 23080-23089 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 23090-23099 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 23100-23109 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 23110-23119 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 23120-23129 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 23130-23139 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 23140-23149 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 23150-23159 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 23160-23169 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 23170-23179 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 23180-23189 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 23190-23199 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 23200-23209 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 23210-23219 - 7, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 23220-23229 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 23230-23239 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 23240-23249 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 23250-23259 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 23260-23269 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 23270-23279 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 23280-23289 - 1, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 23290-23299 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 23300-23309 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 23310-23319 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 23320-23329 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 23330-23339 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 23340-23349 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 23350-23359 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 23360-23369 - 1, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 23370-23379 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 23380-23389 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 23390-23399 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 23400-23409 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 23410-23419 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 23420-23429 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 23430-23439 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 23440-23449 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 23450-23459 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 23460-23469 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 23470-23479 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 23480-23489 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 23490-23499 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 22, // 23500-23509 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 23510-23519 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 23520-23529 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 23530-23539 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 23540-23549 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 23550-23559 - 1, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 23560-23569 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 23570-23579 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 23580-23589 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 23590-23599 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 23600-23609 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 23610-23619 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 23620-23629 - 3, 2, 1, 30, 29, 28, 27, 26, 25, 24, // 23630-23639 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 23640-23649 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 23650-23659 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 23660-23669 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 23670-23679 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 30, // 23680-23689 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 23690-23699 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 23700-23709 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 22, // 23710-23719 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 23720-23729 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 23730-23739 - 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 23740-23749 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 23750-23759 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 23760-23769 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 23770-23779 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 23780-23789 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 23790-23799 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 23800-23809 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 23810-23819 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 23820-23829 - 1, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 23830-23839 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 23840-23849 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 23850-23859 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 23860-23869 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 23870-23879 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 23880-23889 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 23890-23899 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 23900-23909 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 23910-23919 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 28, // 23920-23929 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 23930-23939 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 23940-23949 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 23950-23959 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 23960-23969 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 23970-23979 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 23980-23989 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 23990-23999 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 24000-24009 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 24010-24019 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 24020-24029 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 24030-24039 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 24040-24049 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 24050-24059 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 24060-24069 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 24070-24079 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 24080-24089 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 24090-24099 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 24100-24109 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 24110-24119 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 24120-24129 - 3, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 24130-24139 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 24140-24149 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 24150-24159 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 24160-24169 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 24170-24179 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 24180-24189 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 24190-24199 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 24200-24209 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 24210-24219 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 24220-24229 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 24230-24239 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 24240-24249 - 1, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 24250-24259 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 24260-24269 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 24270-24279 - 1, 36, 35, 34, 33, 32, 31, 30, 29, 28, // 24280-24289 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 24290-24299 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 24300-24309 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 24310-24319 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 24320-24329 - 7, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 24330-24339 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 24340-24349 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 24350-24359 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 24360-24369 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 24370-24379 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 24380-24389 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 24390-24399 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 24400-24409 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 24410-24419 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 24420-24429 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 24430-24439 - 3, 2, 1, 26, 25, 24, 23, 22, 21, 20, // 24440-24449 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 24450-24459 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 24460-24469 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 24470-24479 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 24480-24489 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 24490-24499 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 24500-24509 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 24510-24519 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 24520-24529 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 24530-24539 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 24540-24549 - 1, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 24550-24559 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 24560-24569 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 24570-24579 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 24580-24589 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 24590-24599 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 24600-24609 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 24610-24619 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 24620-24629 - 1, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 24630-24639 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 24640-24649 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 24650-24659 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 24660-24669 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 24670-24679 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 24680-24689 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 24690-24699 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 24, // 24700-24709 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 24710-24719 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 24720-24729 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 24730-24739 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 24740-24749 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 24750-24759 - 3, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 24760-24769 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 24770-24779 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 24780-24789 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 24790-24799 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 24800-24809 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 24810-24819 - 1, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 24820-24829 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 24830-24839 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 24840-24849 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 24850-24859 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 24860-24869 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 24870-24879 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 24880-24889 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 24890-24899 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 24900-24909 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 24910-24919 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 24920-24929 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 24930-24939 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 24940-24949 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 24950-24959 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 24960-24969 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 24970-24979 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 24, // 24980-24989 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 24990-24999 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 25000-25009 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 25010-25019 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 25020-25029 - 1, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 25030-25039 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 25040-25049 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 25050-25059 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 25060-25069 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 25070-25079 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 25080-25089 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 25090-25099 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 25100-25109 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 25110-25119 - 1, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 25120-25129 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 25130-25139 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 25140-25149 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 25150-25159 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 25160-25169 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 25170-25179 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 30, // 25180-25189 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 25190-25199 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 25200-25209 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 25210-25219 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 25220-25229 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 25230-25239 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 25240-25249 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 25250-25259 - 1, 40, 39, 38, 37, 36, 35, 34, 33, 32, // 25260-25269 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 25270-25279 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 25280-25289 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 25290-25299 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 12, // 25300-25309 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 25310-25319 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 25320-25329 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 25330-25339 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 25340-25349 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 25350-25359 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 25360-25369 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 25370-25379 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 25380-25389 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 25390-25399 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 25400-25409 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 25410-25419 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 25420-25429 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 25430-25439 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 25440-25449 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 25450-25459 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 25460-25469 - 1, 52, 51, 50, 49, 48, 47, 46, 45, 44, // 25470-25479 - 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, // 25480-25489 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 25490-25499 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 25500-25509 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 25510-25519 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 25520-25529 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 25530-25539 - 1, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 25540-25549 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 25550-25559 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 25560-25569 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 25570-25579 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 25580-25589 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 25590-25599 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 25600-25609 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 25610-25619 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 25620-25629 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 25630-25639 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 25640-25649 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 25650-25659 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 25660-25669 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 25670-25679 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 25680-25689 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 25690-25699 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 25700-25709 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 25710-25719 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 25720-25729 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 25730-25739 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 25740-25749 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 25750-25759 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 25760-25769 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 25770-25779 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 25780-25789 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 25790-25799 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 25800-25809 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 22, // 25810-25819 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 25820-25829 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 25830-25839 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 18, // 25840-25849 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 25850-25859 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 25860-25869 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 25870-25879 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 25880-25889 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 25890-25899 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 25900-25909 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 25910-25919 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 25920-25929 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 25930-25939 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 25940-25949 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 25950-25959 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 25960-25969 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 25970-25979 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 25980-25989 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 25990-25999 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 26000-26009 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 26010-26019 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 26020-26029 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 26030-26039 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 26040-26049 - 3, 2, 1, 30, 29, 28, 27, 26, 25, 24, // 26050-26059 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 26060-26069 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 26070-26079 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 26080-26089 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 26090-26099 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 26100-26109 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 22, // 26110-26119 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 26120-26129 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 26130-26139 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 26140-26149 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 26150-26159 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 26160-26169 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 26170-26179 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 26180-26189 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 26190-26199 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 26200-26209 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 26210-26219 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 26220-26229 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 26230-26239 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 26240-26249 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 26250-26259 - 1, 2, 1, 4, 3, 2, 1, 26, 25, 24, // 26260-26269 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 26270-26279 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 26280-26289 - 3, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 26290-26299 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 26300-26309 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 26310-26319 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 26320-26329 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 26330-26339 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 26340-26349 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 26350-26359 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 26360-26369 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 26370-26379 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 26380-26389 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 26390-26399 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 26400-26409 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 26410-26419 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 26420-26429 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 26430-26439 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 26440-26449 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 20, // 26450-26459 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 26460-26469 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 26470-26479 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 26480-26489 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 26490-26499 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 26500-26509 - 3, 2, 1, 26, 25, 24, 23, 22, 21, 20, // 26510-26519 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 26520-26529 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 26530-26539 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 26540-26549 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 26550-26559 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 26560-26569 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 26570-26579 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 26580-26589 - 1, 6, 5, 4, 3, 2, 1, 30, 29, 28, // 26590-26599 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 26600-26609 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 26610-26619 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 26620-26629 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 26630-26639 - 1, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 26640-26649 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 26650-26659 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 26660-26669 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 26670-26679 - 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 26680-26689 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 26690-26699 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 26700-26709 - 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 26710-26719 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 26720-26729 - 1, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 26730-26739 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 26740-26749 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 26750-26759 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 26760-26769 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 26770-26779 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 26780-26789 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 26790-26799 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 26800-26809 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 26810-26819 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 26820-26829 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 26830-26839 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 26840-26849 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 26850-26859 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 26860-26869 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 26870-26879 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 26880-26889 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 26890-26899 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 26900-26909 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 26910-26919 - 1, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 26920-26929 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 26930-26939 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 26940-26949 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 22, // 26950-26959 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 26960-26969 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 26970-26979 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 26980-26989 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 26990-26999 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 27000-27009 - 1, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 27010-27019 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 27020-27029 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 27030-27039 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 27040-27049 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 27050-27059 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 27060-27069 - 3, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 27070-27079 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 27080-27089 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 27090-27099 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 18, // 27100-27109 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 27110-27119 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 27120-27129 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 27130-27139 - 3, 2, 1, 36, 35, 34, 33, 32, 31, 30, // 27140-27149 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 27150-27159 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 27160-27169 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 27170-27179 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 27180-27189 - 1, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 27190-27199 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 27200-27209 - 1, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 27210-27219 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 27220-27229 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 27230-27239 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 27240-27249 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 27250-27259 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 27260-27269 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 27270-27279 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 27280-27289 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 30, // 27290-27299 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 27300-27309 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 27310-27319 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 27320-27329 - 7, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 27330-27339 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 27340-27349 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 27350-27359 - 1, 6, 5, 4, 3, 2, 1, 30, 29, 28, // 27360-27369 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 27370-27379 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 27380-27389 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 27390-27399 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 18, // 27400-27409 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 27410-27419 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 27420-27429 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 27430-27439 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 27440-27449 - 7, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 27450-27459 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 27460-27469 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 27470-27479 - 1, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 27480-27489 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 27490-27499 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 27500-27509 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 27510-27519 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 27520-27529 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 27530-27539 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 27540-27549 - 1, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 27550-27559 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 27560-27569 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 27570-27579 - 1, 2, 1, 28, 27, 26, 25, 24, 23, 22, // 27580-27589 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 27590-27599 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 27600-27609 - 1, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 27610-27619 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 27620-27629 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 27630-27639 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 27640-27649 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 27650-27659 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 27660-27669 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 27670-27679 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 27680-27689 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 27690-27699 - 1, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 27700-27709 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 27710-27719 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 27720-27729 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 27730-27739 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 27740-27749 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 27750-27759 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 27760-27769 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 27770-27779 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 27780-27789 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 27790-27799 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 27800-27809 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 27810-27819 - 3, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 27820-27829 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 27830-27839 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 27840-27849 - 1, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 27850-27859 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 27860-27869 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 27870-27879 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 27880-27889 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 27890-27899 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 27900-27909 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 22, // 27910-27919 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 27920-27929 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 27930-27939 - 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 27940-27949 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 27950-27959 - 1, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 27960-27969 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 27970-27979 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 27980-27989 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 27990-27999 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 28000-28009 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 28010-28019 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 28020-28029 - 1, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 28030-28039 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 28040-28049 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 28050-28059 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 28060-28069 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 28070-28079 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 28080-28089 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 28090-28099 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 28100-28109 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 28110-28119 - 3, 2, 1, 28, 27, 26, 25, 24, 23, 22, // 28120-28129 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 28130-28139 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 28140-28149 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 28150-28159 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 28160-28169 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 28170-28179 - 1, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 28180-28189 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 28190-28199 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 28200-28209 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 28210-28219 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 48, // 28220-28229 - 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, // 28230-28239 - 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, // 28240-28249 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 28250-28259 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 28260-28269 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 28270-28279 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 28280-28289 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 28290-28299 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 28300-28309 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 30, // 28310-28319 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 28320-28329 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 28330-28339 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 28340-28349 - 1, 36, 35, 34, 33, 32, 31, 30, 29, 28, // 28350-28359 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 28360-28369 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 28370-28379 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 28380-28389 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 28390-28399 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 28400-28409 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 28410-28419 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 28420-28429 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 28430-28439 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 28440-28449 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 28450-28459 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 28460-28469 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 28470-28479 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 28480-28489 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 28490-28499 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 28500-28509 - 3, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 28510-28519 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 28520-28529 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 28530-28539 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 28540-28549 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 28550-28559 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 28560-28569 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 28570-28579 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 28580-28589 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 28590-28599 - 3, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 28600-28609 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 28610-28619 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 28620-28629 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 28630-28639 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 28640-28649 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 28650-28659 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 28660-28669 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 28670-28679 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 28680-28689 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 28690-28699 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 28700-28709 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 28710-28719 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 22, // 28720-28729 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 28730-28739 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 28740-28749 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 28750-28759 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 28760-28769 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 28770-28779 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 28780-28789 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 28790-28799 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 28800-28809 - 3, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 28810-28819 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 28820-28829 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 28830-28839 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 28840-28849 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 28850-28859 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 28860-28869 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 22, // 28870-28879 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 28880-28889 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 28890-28899 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 28900-28909 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 28910-28919 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 28920-28929 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 28930-28939 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 28940-28949 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 28950-28959 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 28960-28969 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 30, // 28970-28979 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 28980-28989 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 28990-28999 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 29000-29009 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 29010-29019 - 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 29020-29029 - 3, 2, 1, 26, 25, 24, 23, 22, 21, 20, // 29030-29039 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 29040-29049 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 29050-29059 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 29060-29069 - 7, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 29070-29079 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 29080-29089 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 29090-29099 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 29100-29109 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 29110-29119 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 29120-29129 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 29130-29139 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 29140-29149 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 29150-29159 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 29160-29169 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 29170-29179 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 29180-29189 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 29190-29199 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 29200-29209 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 29210-29219 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 29220-29229 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 29230-29239 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 29240-29249 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 29250-29259 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 29260-29269 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 29270-29279 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 29280-29289 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 29290-29299 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 29300-29309 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 29310-29319 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 29320-29329 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 29330-29339 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 29340-29349 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 29350-29359 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 29360-29369 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 29370-29379 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 10, // 29380-29389 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 29390-29399 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 29400-29409 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 29410-29419 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 29420-29429 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 29430-29439 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 29440-29449 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 29450-29459 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 29460-29469 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 29470-29479 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 29480-29489 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 29490-29499 - 1, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 29500-29509 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 29510-29519 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 29520-29529 - 1, 6, 5, 4, 3, 2, 1, 30, 29, 28, // 29530-29539 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 29540-29549 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 29550-29559 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 29560-29569 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 29570-29579 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 29580-29589 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 29590-29599 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 29600-29609 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 29610-29619 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 29620-29629 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 29630-29639 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 29640-29649 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 29650-29659 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 29660-29669 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 29670-29679 - 3, 2, 1, 34, 33, 32, 31, 30, 29, 28, // 29680-29689 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 29690-29699 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 29700-29709 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 29710-29719 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 29720-29729 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 29730-29739 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 29740-29749 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 29750-29759 - 1, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 29760-29769 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 29770-29779 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 29780-29789 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 29790-29799 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 29800-29809 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 29810-29819 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 29820-29829 - 3, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 29830-29839 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 29840-29849 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 29850-29859 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 29860-29869 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 29870-29879 - 1, 36, 35, 34, 33, 32, 31, 30, 29, 28, // 29880-29889 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 29890-29899 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 29900-29909 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 29910-29919 - 1, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 29920-29929 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 29930-29939 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 29940-29949 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 24, // 29950-29959 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 29960-29969 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 29970-29979 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 22, // 29980-29989 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 29990-29999 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 30000-30009 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 30010-30019 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 30020-30029 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 30030-30039 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 30040-30049 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 30050-30059 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 30060-30069 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 30070-30079 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 30080-30089 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 30090-30099 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 30100-30109 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 30110-30119 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 30120-30129 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 22, // 30130-30139 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 30140-30149 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 30150-30159 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 30160-30169 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 30170-30179 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 30180-30189 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 30190-30199 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 30200-30209 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 30210-30219 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 30220-30229 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 30230-30239 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 30240-30249 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 30250-30259 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 30260-30269 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 30270-30279 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 30280-30289 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 30290-30299 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 30300-30309 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 30310-30319 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 30320-30329 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 30330-30339 - 1, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 30340-30349 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 30350-30359 - 7, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 30360-30369 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 30370-30379 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 30380-30389 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 30390-30399 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 30400-30409 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 30410-30419 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 30420-30429 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 30430-30439 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 30440-30449 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 30450-30459 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 22, // 30460-30469 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 30470-30479 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 30480-30489 - 1, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 30490-30499 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 30500-30509 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 30510-30519 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 30520-30529 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 30530-30539 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 30540-30549 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 18, // 30550-30559 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 30560-30569 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 30570-30579 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 30580-30589 - 3, 2, 1, 38, 37, 36, 35, 34, 33, 32, // 30590-30599 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 30600-30609 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 30610-30619 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 30620-30629 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 30630-30639 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 30640-30649 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 30650-30659 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 30660-30669 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 30670-30679 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 30680-30689 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 30690-30699 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 30700-30709 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 30710-30719 - 7, 6, 5, 4, 3, 2, 1, 30, 29, 28, // 30720-30729 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 30730-30739 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 30740-30749 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 30750-30759 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 30760-30769 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 30770-30779 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 30780-30789 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 30790-30799 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 30800-30809 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 30810-30819 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 30820-30829 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 30830-30839 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 30840-30849 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 30850-30859 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 30860-30869 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 30870-30879 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 30880-30889 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 30890-30899 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 30900-30909 - 1, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 30910-30919 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 30920-30929 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 30930-30939 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 22, // 30940-30949 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 30950-30959 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 30960-30969 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 30970-30979 - 3, 2, 1, 30, 29, 28, 27, 26, 25, 24, // 30980-30989 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 30990-30999 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 31000-31009 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 31010-31019 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 31020-31029 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 31030-31039 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 31040-31049 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 31050-31059 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 31060-31069 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 31070-31079 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 31080-31089 - 1, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 31090-31099 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 31100-31109 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 31110-31119 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 31120-31129 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 31130-31139 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 31140-31149 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 31150-31159 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 31160-31169 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 31170-31179 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 31180-31189 - 3, 2, 1, 26, 25, 24, 23, 22, 21, 20, // 31190-31199 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 31200-31209 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 31210-31219 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 31220-31229 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 31230-31239 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 31240-31249 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 31250-31259 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 31260-31269 - 1, 6, 5, 4, 3, 2, 1, 30, 29, 28, // 31270-31279 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 31280-31289 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 31290-31299 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 31300-31309 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 31310-31319 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 31320-31329 - 3, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 31330-31339 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 31340-31349 - 7, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 31350-31359 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 31360-31369 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 31370-31379 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 31380-31389 - 1, 2, 1, 4, 3, 2, 1, 72, 71, 70, // 31390-31399 - 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, // 31400-31409 - 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, // 31410-31419 - 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, // 31420-31429 - 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, // 31430-31439 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 31440-31449 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 31450-31459 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 31460-31469 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 31470-31479 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 22, // 31480-31489 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 31490-31499 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 31500-31509 - 1, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 31510-31519 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 31520-31529 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 31530-31539 - 1, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 31540-31549 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 31550-31559 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 31560-31569 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 31570-31579 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 31580-31589 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 31590-31599 - 1, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 31600-31609 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 31610-31619 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 31620-31629 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 31630-31639 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 31640-31649 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 31650-31659 - 3, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 31660-31669 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 31670-31679 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 31680-31689 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 22, // 31690-31699 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 31700-31709 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 31710-31719 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 12, // 31720-31729 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 31730-31739 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 31740-31749 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 31750-31759 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 31760-31769 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 31770-31779 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 31780-31789 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 31790-31799 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 31800-31809 - 7, 6, 5, 4, 3, 2, 1, 30, 29, 28, // 31810-31819 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 31820-31829 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 31830-31839 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 31840-31849 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 31850-31859 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 31860-31869 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 31870-31879 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 31880-31889 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 31890-31899 - 7, 6, 5, 4, 3, 2, 1, 50, 49, 48, // 31900-31909 - 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, // 31910-31919 - 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, // 31920-31929 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 31930-31939 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 31940-31949 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 31950-31959 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 31960-31969 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 31970-31979 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 31980-31989 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 31990-31999 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 32000-32009 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 32010-32019 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 22, // 32020-32029 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 32030-32039 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 32040-32049 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 32050-32059 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 32060-32069 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 32070-32079 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 32080-32089 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 32090-32099 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 32100-32109 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 22, // 32110-32119 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 32120-32129 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 32130-32139 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 32140-32149 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 32150-32159 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 32160-32169 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 32170-32179 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 32180-32189 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 32190-32199 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 32200-32209 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 32210-32219 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 32220-32229 - 3, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 32230-32239 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 32240-32249 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 32250-32259 - 1, 36, 35, 34, 33, 32, 31, 30, 29, 28, // 32260-32269 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 32270-32279 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 32280-32289 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 32290-32299 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 32300-32309 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 32310-32319 - 1, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 32320-32329 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 32330-32339 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 32340-32349 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 32350-32359 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 32360-32369 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 32370-32379 - 1, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 32380-32389 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 32390-32399 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 32400-32409 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 32410-32419 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 32420-32429 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 32430-32439 - 1, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 32440-32449 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 32450-32459 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 32460-32469 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 32470-32479 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 32480-32489 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 32490-32499 - 3, 2, 1, 4, 3, 2, 1, 24, 23, 22, // 32500-32509 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 32510-32519 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 32520-32529 - 1, 2, 1, 4, 3, 2, 1, 24, 23, 22, // 32530-32539 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 32540-32549 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 32550-32559 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 32560-32569 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 32570-32579 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 32580-32589 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 32590-32599 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 32600-32609 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 32610-32619 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 32620-32629 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 32630-32639 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 32640-32649 - 3, 2, 1, 34, 33, 32, 31, 30, 29, 28, // 32650-32659 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 32660-32669 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 32670-32679 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 32680-32689 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 32690-32699 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 32700-32709 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 30, // 32710-32719 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 32720-32729 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 32730-32739 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 22, // 32740-32749 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 32750-32759 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 32760-32769 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 32770-32779 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 32780-32789 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 32790-32799 - 1, 2, 1, 28, 27, 26, 25, 24, 23, 22, // 32800-32809 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 32810-32819 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 32820-32829 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 32830-32839 - 3, 2, 1, 26, 25, 24, 23, 22, 21, 20, // 32840-32849 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 32850-32859 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 32860-32869 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 32870-32879 - 7, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 32880-32889 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 32890-32899 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 32900-32909 - 1, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 32910-32919 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 32920-32929 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 32930-32939 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 32940-32949 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 32950-32959 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 32960-32969 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 32970-32979 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 32980-32989 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 32990-32999 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 33000-33009 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 33010-33019 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 33020-33029 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 33030-33039 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 33040-33049 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 33050-33059 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 33060-33069 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 33070-33079 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 33080-33089 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 33090-33099 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 33100-33109 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 30, // 33110-33119 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 33120-33129 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 33130-33139 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 33140-33149 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 33150-33159 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 33160-33169 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 33170-33179 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 33180-33189 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 33190-33199 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 33200-33209 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 33210-33219 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 33220-33229 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 33230-33239 - 7, 6, 5, 4, 3, 2, 1, 40, 39, 38, // 33240-33249 - 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, // 33250-33259 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 33260-33269 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 33270-33279 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 33280-33289 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 33290-33299 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 33300-33309 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 33310-33319 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 33320-33329 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 33330-33339 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 33340-33349 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 33350-33359 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 33360-33369 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 33370-33379 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 33380-33389 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 33390-33399 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 33400-33409 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 33410-33419 - 7, 6, 5, 4, 3, 2, 1, 30, 29, 28, // 33420-33429 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 33430-33439 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 33440-33449 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 33450-33459 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 33460-33469 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 33470-33479 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 33480-33489 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 33490-33499 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 33500-33509 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 33510-33519 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 33520-33529 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 33530-33539 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 33540-33549 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 33550-33559 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 33560-33569 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 33570-33579 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 33580-33589 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 33590-33599 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 33600-33609 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 33610-33619 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 33620-33629 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 33630-33639 - 1, 6, 5, 4, 3, 2, 1, 32, 31, 30, // 33640-33649 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 33650-33659 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 33660-33669 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 24, // 33670-33679 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 33680-33689 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 33690-33699 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 33700-33709 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 33710-33719 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 33720-33729 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 33730-33739 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 33740-33749 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 33750-33759 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 33760-33769 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 33770-33779 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 33780-33789 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 33790-33799 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 33800-33809 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 33810-33819 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 22, // 33820-33829 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 33830-33839 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 33840-33849 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 33850-33859 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 33860-33869 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 33870-33879 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 33880-33889 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 33890-33899 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 33900-33909 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 33910-33919 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 33920-33929 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 33930-33939 - 1, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 33940-33949 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 33950-33959 - 1, 6, 5, 4, 3, 2, 1, 30, 29, 28, // 33960-33969 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 33970-33979 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 33980-33989 - 7, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 33990-33999 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 34000-34009 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 34010-34019 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 34020-34029 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 34030-34039 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 34040-34049 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 34050-34059 - 1, 62, 61, 60, 59, 58, 57, 56, 55, 54, // 34060-34069 - 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, // 34070-34079 - 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, // 34080-34089 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 34090-34099 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 34100-34109 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 34110-34119 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 12, // 34120-34129 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 34130-34139 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 34140-34149 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 34150-34159 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 34160-34169 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 34170-34179 - 3, 2, 1, 28, 27, 26, 25, 24, 23, 22, // 34180-34189 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 34190-34199 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 34200-34209 - 1, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 34210-34219 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 34220-34229 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 34230-34239 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 34240-34249 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 34250-34259 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 34260-34269 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 34270-34279 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 34280-34289 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 34290-34299 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 34300-34309 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 34310-34319 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 34320-34329 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 34330-34339 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 34340-34349 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 34350-34359 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 34360-34369 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 34370-34379 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 34380-34389 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 34390-34399 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 34400-34409 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 34410-34419 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 34420-34429 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 34430-34439 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 34440-34449 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 34450-34459 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 34460-34469 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 34470-34479 - 3, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 34480-34489 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 34490-34499 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 34500-34509 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 34510-34519 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 34520-34529 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 34530-34539 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 34, // 34540-34549 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 34550-34559 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 34560-34569 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 34570-34579 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 34580-34589 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 34590-34599 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 34600-34609 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 34610-34619 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 34620-34629 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 34630-34639 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 34640-34649 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 34650-34659 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 34660-34669 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 34670-34679 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 34680-34689 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 34690-34699 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 34700-34709 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 34710-34719 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 34720-34729 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 34730-34739 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 34740-34749 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 34750-34759 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 34760-34769 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 34770-34779 - 1, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 34780-34789 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 34790-34799 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 34800-34809 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 22, // 34810-34819 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 34820-34829 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 34830-34839 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 22, // 34840-34849 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 34850-34859 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 34860-34869 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 34870-34879 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 34880-34889 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 34890-34899 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 34900-34909 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 20, // 34910-34919 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 34920-34929 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 34930-34939 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 34940-34949 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 34950-34959 - 1, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 34960-34969 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 34970-34979 - 1, 42, 41, 40, 39, 38, 37, 36, 35, 34, // 34980-34989 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 34990-34999 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 35000-35009 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 35010-35019 - 3, 2, 1, 4, 3, 2, 1, 24, 23, 22, // 35020-35029 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 35030-35039 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 35040-35049 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 35050-35059 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 35060-35069 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 35070-35079 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 35080-35089 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 35090-35099 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 35100-35109 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 35110-35119 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 35120-35129 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 35130-35139 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 35140-35149 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 35150-35159 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 35160-35169 - 1, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 35170-35179 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 35180-35189 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 35190-35199 - 1, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 35200-35209 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 35210-35219 - 1, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 35220-35229 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 35230-35239 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 35240-35249 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 35250-35259 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 35260-35269 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 35270-35279 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 35280-35289 - 1, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 35290-35299 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 35300-35309 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 35310-35319 - 3, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 35320-35329 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 35330-35339 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 35340-35349 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 35350-35359 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 35360-35369 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 35370-35379 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 35380-35389 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 35390-35399 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 35400-35409 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 35410-35419 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 35420-35429 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 35430-35439 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 35440-35449 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 35450-35459 - 1, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 35460-35469 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 35470-35479 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 35480-35489 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 35490-35499 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 35500-35509 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 35510-35519 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 35520-35529 - 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 35530-35539 - 3, 2, 1, 26, 25, 24, 23, 22, 21, 20, // 35540-35549 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 35550-35559 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 35560-35569 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 35570-35579 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 35580-35589 - 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 35590-35599 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 35600-35609 - 7, 6, 5, 4, 3, 2, 1, 54, 53, 52, // 35610-35619 - 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, // 35620-35629 - 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, // 35630-35639 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 35640-35649 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 35650-35659 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 35660-35669 - 1, 6, 5, 4, 3, 2, 1, 52, 51, 50, // 35670-35679 - 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, // 35680-35689 - 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, // 35690-35699 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 35700-35709 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 35710-35719 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 35720-35729 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 35730-35739 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 35740-35749 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 35750-35759 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 35760-35769 - 1, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 35770-35779 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 35780-35789 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 35790-35799 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 22, // 35800-35809 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 35810-35819 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 35820-35829 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 35830-35839 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 35840-35849 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 35850-35859 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 35860-35869 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 35870-35879 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 35880-35889 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 35890-35899 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 35900-35909 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 35910-35919 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 35920-35929 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 35930-35939 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 35940-35949 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 35950-35959 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 35960-35969 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 35970-35979 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 35980-35989 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 35990-35999 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 36000-36009 - 1, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 36010-36019 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 36020-36029 - 7, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 36030-36039 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 36040-36049 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 36050-36059 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 36060-36069 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 36070-36079 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 36080-36089 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 36090-36099 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 22, // 36100-36109 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 36110-36119 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 36120-36129 - 1, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 36130-36139 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 36140-36149 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 36150-36159 - 1, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 36160-36169 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 36170-36179 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 36180-36189 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 36190-36199 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 36200-36209 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 36210-36219 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 36220-36229 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 36230-36239 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 36240-36249 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 36250-36259 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 36260-36269 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 36270-36279 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 36280-36289 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 36290-36299 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 36300-36309 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 22, // 36310-36319 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 36320-36329 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 36330-36339 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 36340-36349 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 36350-36359 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 36360-36369 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 36370-36379 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 44, // 36380-36389 - 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, // 36390-36399 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 36400-36409 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 36410-36419 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 36420-36429 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 36430-36439 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 36440-36449 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 36450-36459 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 36460-36469 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 36470-36479 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 36480-36489 - 3, 2, 1, 4, 3, 2, 1, 26, 25, 24, // 36490-36499 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 36500-36509 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 36510-36519 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 12, // 36520-36529 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 36530-36539 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 36540-36549 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 36550-36559 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 36560-36569 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 36570-36579 - 3, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 36580-36589 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 36590-36599 - 7, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 36600-36609 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 36610-36619 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 36620-36629 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 36630-36639 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 36640-36649 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 36650-36659 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 36660-36669 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 36670-36679 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 36680-36689 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 36690-36699 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 36700-36709 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 36710-36719 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 36720-36729 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 36730-36739 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 36740-36749 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 36750-36759 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 36760-36769 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 36770-36779 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 36780-36789 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 36790-36799 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 36800-36809 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 36810-36819 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 36820-36829 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 36830-36839 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 36840-36849 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 36850-36859 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 36860-36869 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 36870-36879 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 36880-36889 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 36890-36899 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 36900-36909 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 36910-36919 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 36920-36929 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 36930-36939 - 3, 2, 1, 4, 3, 2, 1, 26, 25, 24, // 36940-36949 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 36950-36959 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 36960-36969 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 36970-36979 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 36980-36989 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 36990-36999 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 37000-37009 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 37010-37019 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 37020-37029 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 37030-37039 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 37040-37049 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 37050-37059 - 1, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 37060-37069 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 37070-37079 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 37080-37089 - 7, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 37090-37099 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 37100-37109 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 37110-37119 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 37120-37129 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 20, // 37130-37139 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 37140-37149 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 37150-37159 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 37160-37169 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 37170-37179 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 37180-37189 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 37190-37199 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 37200-37209 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 37210-37219 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 37220-37229 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 37230-37239 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 37240-37249 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 37250-37259 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 37260-37269 - 3, 2, 1, 4, 3, 2, 1, 30, 29, 28, // 37270-37279 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 37280-37289 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 37290-37299 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 37300-37309 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 37310-37319 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 37320-37329 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 18, // 37330-37339 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 37340-37349 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 37350-37359 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 37360-37369 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 37370-37379 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 37380-37389 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 37390-37399 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 37400-37409 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 37410-37419 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 37420-37429 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 37430-37439 - 1, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 37440-37449 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 37450-37459 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 37460-37469 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 37470-37479 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 37480-37489 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 37490-37499 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 37500-37509 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 37510-37519 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 37520-37529 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 37530-37539 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 37540-37549 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 37550-37559 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 37560-37569 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 37570-37579 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 37580-37589 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 37590-37599 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 37600-37609 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 37610-37619 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 37620-37629 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 37630-37639 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 37640-37649 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 37650-37659 - 3, 2, 1, 28, 27, 26, 25, 24, 23, 22, // 37660-37669 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 37670-37679 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 37680-37689 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 37690-37699 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 37700-37709 - 7, 6, 5, 4, 3, 2, 1, 30, 29, 28, // 37710-37719 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 37720-37729 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 37730-37739 - 7, 6, 5, 4, 3, 2, 1, 34, 33, 32, // 37740-37749 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 37750-37759 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 37760-37769 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 37770-37779 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 37780-37789 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 37790-37799 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 37800-37809 - 1, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 37810-37819 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 37820-37829 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 37830-37839 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 37840-37849 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 37850-37859 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 37860-37869 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 37870-37879 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 37880-37889 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 37890-37899 - 7, 6, 5, 4, 3, 2, 1, 44, 43, 42, // 37900-37909 - 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, // 37910-37919 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 37920-37929 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 37930-37939 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 37940-37949 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 37950-37959 - 3, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 37960-37969 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 37970-37979 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 37980-37989 - 1, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 37990-37999 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 38000-38009 - 1, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 38010-38019 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 38020-38029 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 38030-38039 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 38040-38049 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 38050-38059 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 38060-38069 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 38070-38079 - 3, 2, 1, 30, 29, 28, 27, 26, 25, 24, // 38080-38089 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 38090-38099 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 38100-38109 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 30, // 38110-38119 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 38120-38129 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 38130-38139 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 38140-38149 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 38150-38159 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 38160-38169 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 38170-38179 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 38180-38189 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 38190-38199 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 38200-38209 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 38210-38219 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 38220-38229 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 22, // 38230-38239 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 38240-38249 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 38250-38259 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 38260-38269 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 38270-38279 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 38280-38289 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 38290-38299 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 38300-38309 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 38310-38319 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 38320-38329 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 38330-38339 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 38340-38349 - 1, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 38350-38359 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 38360-38369 - 1, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 38370-38379 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 38380-38389 - 3, 2, 1, 38, 37, 36, 35, 34, 33, 32, // 38390-38399 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 38400-38409 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 38410-38419 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 38420-38429 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 38430-38439 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 38440-38449 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 38450-38459 - 1, 40, 39, 38, 37, 36, 35, 34, 33, 32, // 38460-38469 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 38470-38479 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 38480-38489 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 38490-38499 - 1, 42, 41, 40, 39, 38, 37, 36, 35, 34, // 38500-38509 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 38510-38519 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 38520-38529 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 38530-38539 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 38540-38549 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 38550-38559 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 24, // 38560-38569 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 38570-38579 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 38580-38589 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 38590-38599 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 38600-38609 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 38610-38619 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 38620-38629 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 38630-38639 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 38640-38649 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 38650-38659 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 38660-38669 - 1, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 38670-38679 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 38680-38689 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 38690-38699 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 38700-38709 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 38710-38719 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 38720-38729 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 38730-38739 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 18, // 38740-38749 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 38750-38759 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 38760-38769 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 38770-38779 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 38780-38789 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 38790-38799 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 38800-38809 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 38810-38819 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 38820-38829 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 38830-38839 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 38840-38849 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 38850-38859 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 38860-38869 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 38870-38879 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 38880-38889 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 38890-38899 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 38900-38909 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 38910-38919 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 38920-38929 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 38930-38939 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 38940-38949 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 38950-38959 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 38960-38969 - 1, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 38970-38979 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 38980-38989 - 3, 2, 1, 26, 25, 24, 23, 22, 21, 20, // 38990-38999 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 39000-39009 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 39010-39019 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 39020-39029 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 39030-39039 - 1, 2, 1, 4, 3, 2, 1, 32, 31, 30, // 39040-39049 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 39050-39059 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 39060-39069 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 39070-39079 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 39080-39089 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 39090-39099 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 39100-39109 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 39110-39119 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 39120-39129 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 39130-39139 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 39140-39149 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 39150-39159 - 1, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 39160-39169 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 39170-39179 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 39180-39189 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 39190-39199 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 39200-39209 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 39210-39219 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 39220-39229 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 39230-39239 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 39240-39249 - 1, 42, 41, 40, 39, 38, 37, 36, 35, 34, // 39250-39259 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 39260-39269 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 39270-39279 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 39280-39289 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 39290-39299 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 39300-39309 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 39310-39319 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 39320-39329 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 39330-39339 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 39340-39349 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 39350-39359 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 39360-39369 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 39370-39379 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 39380-39389 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 39390-39399 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 39400-39409 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 20, // 39410-39419 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 39420-39429 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 39430-39439 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 39440-39449 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 39450-39459 - 1, 38, 37, 36, 35, 34, 33, 32, 31, 30, // 39460-39469 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 39470-39479 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 39480-39489 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 39490-39499 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 39500-39509 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 39510-39519 - 1, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 39520-39529 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 39530-39539 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 39540-39549 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 39550-39559 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 39560-39569 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 39570-39579 - 1, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 39580-39589 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 39590-39599 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 39600-39609 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 39610-39619 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 39620-39629 - 1, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 39630-39639 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 39640-39649 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 39650-39659 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 39660-39669 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 24, // 39670-39679 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 39680-39689 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 39690-39699 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 39700-39709 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 39710-39719 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 39720-39729 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 39730-39739 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 39740-39749 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 39750-39759 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 39760-39769 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 39770-39779 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 39780-39789 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 22, // 39790-39799 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 39800-39809 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 39810-39819 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 39820-39829 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 39830-39839 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 39840-39849 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 39850-39859 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 39860-39869 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 39870-39879 - 3, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 39880-39889 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 39890-39899 - 1, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 39900-39909 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 39910-39919 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 39920-39929 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 39930-39939 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 39940-39949 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 39950-39959 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 39960-39969 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 39970-39979 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 20, // 39980-39989 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 39990-39999 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 40000-40009 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 40010-40019 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 40020-40029 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 24, // 40030-40039 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 40040-40049 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 40050-40059 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 40060-40069 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 40070-40079 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 40080-40089 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 40090-40099 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 40100-40109 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 40110-40119 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 22, // 40120-40129 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 40130-40139 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 40140-40149 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 40150-40159 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 40160-40169 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 40170-40179 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 40180-40189 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 40190-40199 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 40200-40209 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 40210-40219 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 40220-40229 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 40230-40239 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 40240-40249 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 40250-40259 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 40260-40269 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 40270-40279 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 54, // 40280-40289 - 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, // 40290-40299 - 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, // 40300-40309 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 40310-40319 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 40320-40329 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 40330-40339 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 40340-40349 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 40350-40359 - 1, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 40360-40369 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 40370-40379 - 7, 6, 5, 4, 3, 2, 1, 36, 35, 34, // 40380-40389 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 40390-40399 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 40400-40409 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 40410-40419 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 40420-40429 - 3, 2, 1, 26, 25, 24, 23, 22, 21, 20, // 40430-40439 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 40440-40449 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 40450-40459 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 40460-40469 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 40470-40479 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 40480-40489 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 40490-40499 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 40500-40509 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 40510-40519 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 40520-40529 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 40530-40539 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 40540-40549 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 40550-40559 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 40560-40569 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 40570-40579 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 40580-40589 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 40590-40599 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 40600-40609 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 40610-40619 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 40620-40629 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 54, // 40630-40639 - 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, // 40640-40649 - 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, // 40650-40659 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 40660-40669 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 40670-40679 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 40680-40689 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 10, // 40690-40699 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 30, // 40700-40709 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 40710-40719 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 40720-40729 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 40730-40739 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 40740-40749 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 40750-40759 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 40760-40769 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 40770-40779 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 40780-40789 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 40790-40799 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 40800-40809 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 40810-40819 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 40820-40829 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 40830-40839 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 40840-40849 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 40850-40859 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 40860-40869 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 40870-40879 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 40880-40889 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 40890-40899 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 40900-40909 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 40910-40919 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 40920-40929 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 40930-40939 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 40940-40949 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 40950-40959 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 40960-40969 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 40970-40979 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 40980-40989 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 40990-40999 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 41000-41009 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 41010-41019 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 41020-41029 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 41030-41039 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 41040-41049 - 1, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 41050-41059 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 41060-41069 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 41070-41079 - 1, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 41080-41089 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 41090-41099 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 41100-41109 - 3, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 41110-41119 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 41120-41129 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 41130-41139 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 41140-41149 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 41150-41159 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 41160-41169 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 41170-41179 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 41180-41189 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 41190-41199 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 41200-41209 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 41210-41219 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 41220-41229 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 41230-41239 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 41240-41249 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 41250-41259 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 41260-41269 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 41270-41279 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 41280-41289 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 34, // 41290-41299 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 41300-41309 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 41310-41319 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 41320-41329 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 41330-41339 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 41340-41349 - 1, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 41350-41359 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 41360-41369 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 41370-41379 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 41380-41389 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 41390-41399 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 41400-41409 - 1, 2, 1, 30, 29, 28, 27, 26, 25, 24, // 41410-41419 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 41420-41429 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 41430-41439 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 41440-41449 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 41450-41459 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 41460-41469 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 41470-41479 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 41480-41489 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 41490-41499 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 41500-41509 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 41510-41519 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 41520-41529 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 41530-41539 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 30, // 41540-41549 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 41550-41559 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 41560-41569 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 41570-41579 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 41580-41589 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 41590-41599 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 41600-41609 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 41610-41619 - 1, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 41620-41629 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 41630-41639 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 41640-41649 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 41650-41659 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 41660-41669 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 41670-41679 - 1, 6, 5, 4, 3, 2, 1, 32, 31, 30, // 41680-41689 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 41690-41699 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 41700-41709 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 41710-41719 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 41720-41729 - 7, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 41730-41739 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 41740-41749 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 41750-41759 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 41760-41769 - 1, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 41770-41779 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 41780-41789 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 41790-41799 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 41800-41809 - 3, 2, 1, 30, 29, 28, 27, 26, 25, 24, // 41810-41819 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 41820-41829 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 41830-41839 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 41840-41849 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 41850-41859 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 41860-41869 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 41870-41879 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 41880-41889 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 41890-41899 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 41900-41909 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 41910-41919 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 41920-41929 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 41930-41939 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 41940-41949 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 10, // 41950-41959 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 41960-41969 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 41970-41979 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 41980-41989 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 41990-41999 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 42000-42009 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 42010-42019 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 42020-42029 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 42030-42039 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 42040-42049 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 42050-42059 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 42060-42069 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 42070-42079 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 42080-42089 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 42090-42099 - 1, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 42100-42109 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 42110-42119 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 42120-42129 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 42130-42139 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 42140-42149 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 42150-42159 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 42160-42169 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 42170-42179 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 42180-42189 - 3, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 42190-42199 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 42200-42209 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 42210-42219 - 1, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 42220-42229 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 42230-42239 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 42240-42249 - 7, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 42250-42259 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 42260-42269 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 42270-42279 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 42280-42289 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 42290-42299 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 42300-42309 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 42310-42319 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 42320-42329 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 42330-42339 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 42340-42349 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 42350-42359 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 42360-42369 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 42370-42379 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 42380-42389 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 42390-42399 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 24, // 42400-42409 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 42410-42419 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 42420-42429 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 42430-42439 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 42440-42449 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 42450-42459 - 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 42460-42469 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 42470-42479 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 42480-42489 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 42490-42499 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 24, // 42500-42509 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 42510-42519 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 42520-42529 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 42530-42539 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 42540-42549 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 42550-42559 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 42560-42569 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 42570-42579 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 22, // 42580-42589 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 42590-42599 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 42600-42609 - 1, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 42610-42619 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 42620-42629 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 42630-42639 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 42640-42649 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 42650-42659 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 42660-42669 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 42670-42679 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 42680-42689 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 42690-42699 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 42700-42709 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 42710-42719 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 42720-42729 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 42730-42739 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 42740-42749 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 42750-42759 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 42760-42769 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 42770-42779 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 42780-42789 - 3, 2, 1, 4, 3, 2, 1, 24, 23, 22, // 42790-42799 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 42800-42809 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 42810-42819 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 42820-42829 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 42830-42839 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 42840-42849 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 42850-42859 - 3, 2, 1, 36, 35, 34, 33, 32, 31, 30, // 42860-42869 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 42870-42879 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 42880-42889 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 42890-42899 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 42900-42909 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 42910-42919 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 42920-42929 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 42930-42939 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 42940-42949 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 42950-42959 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 42960-42969 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 42970-42979 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 42980-42989 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 42990-42999 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 43000-43009 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 43010-43019 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 43020-43029 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 43030-43039 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 43040-43049 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 43050-43059 - 3, 2, 1, 4, 3, 2, 1, 26, 25, 24, // 43060-43069 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 43070-43079 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 43080-43089 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 43090-43099 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 43100-43109 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 43110-43119 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 43120-43129 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 43130-43139 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 43140-43149 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 43150-43159 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 43160-43169 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 43170-43179 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 43180-43189 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 43190-43199 - 1, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 43200-43209 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 43210-43219 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 43220-43229 - 7, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 43230-43239 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 43240-43249 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 43250-43259 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 43260-43269 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 43270-43279 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 43280-43289 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 43290-43299 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 43300-43309 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 43310-43319 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 43320-43329 - 1, 60, 59, 58, 57, 56, 55, 54, 53, 52, // 43330-43339 - 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, // 43340-43349 - 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, // 43350-43359 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 43360-43369 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 43370-43379 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 43380-43389 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 43390-43399 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 43400-43409 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 43410-43419 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 43420-43429 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 43430-43439 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 43440-43449 - 1, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 43450-43459 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 43460-43469 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 43470-43479 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 43480-43489 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 43490-43499 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 43500-43509 - 7, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 43510-43519 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 43520-43529 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 43530-43539 - 1, 2, 1, 30, 29, 28, 27, 26, 25, 24, // 43540-43549 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 43550-43559 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 43560-43569 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 12, // 43570-43579 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 43580-43589 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 43590-43599 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 43600-43609 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 43610-43619 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 43620-43629 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 43630-43639 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 43640-43649 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 43650-43659 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 22, // 43660-43669 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 43670-43679 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 43680-43689 - 1, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 43690-43699 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 43700-43709 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 43710-43719 - 1, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 43720-43729 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 43730-43739 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 43740-43749 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 43750-43759 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 43760-43769 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 43770-43779 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 43780-43789 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 43790-43799 - 1, 52, 51, 50, 49, 48, 47, 46, 45, 44, // 43800-43809 - 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, // 43810-43819 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 43820-43829 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 43830-43839 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 43840-43849 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 43850-43859 - 7, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 43860-43869 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 43870-43879 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 43880-43889 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 43890-43899 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 43900-43909 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 43910-43919 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 43920-43929 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 43930-43939 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 43940-43949 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 43950-43959 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 43960-43969 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 43970-43979 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 43980-43989 - 1, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 43990-43999 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 44000-44009 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 44010-44019 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 44020-44029 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 44030-44039 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 44040-44049 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 44050-44059 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 44060-44069 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 44070-44079 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 44080-44089 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 44090-44099 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 44100-44109 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 44110-44119 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 44120-44129 - 1, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 44130-44139 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 44140-44149 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 44150-44159 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 44160-44169 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 44170-44179 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 44180-44189 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 44190-44199 - 1, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 44200-44209 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 44210-44219 - 1, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 44220-44229 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 44230-44239 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 44240-44249 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 44250-44259 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 44260-44269 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 44270-44279 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 44280-44289 - 3, 2, 1, 58, 57, 56, 55, 54, 53, 52, // 44290-44299 - 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, // 44300-44309 - 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, // 44310-44319 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 44320-44329 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 44330-44339 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 44340-44349 - 1, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 44350-44359 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 44360-44369 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 44370-44379 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 28, // 44380-44389 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 44390-44399 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 44400-44409 - 7, 6, 5, 4, 3, 2, 1, 32, 31, 30, // 44410-44419 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 44420-44429 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 44430-44439 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 44440-44449 - 3, 2, 1, 30, 29, 28, 27, 26, 25, 24, // 44450-44459 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 44460-44469 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 44470-44479 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 44480-44489 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 44490-44499 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 44500-44509 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 44510-44519 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 44520-44529 - 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 44530-44539 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 44540-44549 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 44550-44559 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 44560-44569 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 44570-44579 - 7, 6, 5, 4, 3, 2, 1, 30, 29, 28, // 44580-44589 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 44590-44599 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 44600-44609 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 44610-44619 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 44620-44629 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 44630-44639 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 44640-44649 - 1, 6, 5, 4, 3, 2, 1, 26, 25, 24, // 44650-44659 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 44660-44669 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 44670-44679 - 3, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 44680-44689 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 44690-44699 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 44700-44709 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 44710-44719 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 44720-44729 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 44730-44739 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 44740-44749 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 44750-44759 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 44760-44769 - 1, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 44770-44779 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 44780-44789 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 44790-44799 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 44800-44809 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 20, // 44810-44819 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 44820-44829 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 44830-44839 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 44840-44849 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 44850-44859 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 44860-44869 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 44870-44879 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 44880-44889 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 44890-44899 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 44900-44909 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 44910-44919 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 44920-44929 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 44930-44939 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 44940-44949 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 44950-44959 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 44960-44969 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 44970-44979 - 3, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 44980-44989 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 44990-44999 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 45000-45009 - 3, 2, 1, 40, 39, 38, 37, 36, 35, 34, // 45010-45019 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 45020-45029 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 45030-45039 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 45040-45049 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 45050-45059 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 45060-45069 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 45070-45079 - 3, 2, 1, 36, 35, 34, 33, 32, 31, 30, // 45080-45089 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 45090-45099 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 45100-45109 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 45110-45119 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 45120-45129 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 22, // 45130-45139 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 45140-45149 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 45150-45159 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 45160-45169 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 45170-45179 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 45180-45189 - 1, 6, 5, 4, 3, 2, 1, 36, 35, 34, // 45190-45199 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 45200-45209 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 45210-45219 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 45220-45229 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 45230-45239 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 45240-45249 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 45250-45259 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 45260-45269 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 45270-45279 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 45280-45289 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 45290-45299 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 45300-45309 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 45310-45319 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 45320-45329 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 45330-45339 - 1, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 45340-45349 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 45350-45359 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 45360-45369 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 45370-45379 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 45380-45389 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 45390-45399 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 45400-45409 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 45410-45419 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 45420-45429 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 42, // 45430-45439 - 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, // 45440-45449 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 45450-45459 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 45460-45469 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 45470-45479 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 45480-45489 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 45490-45499 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 45500-45509 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 45510-45519 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 45520-45529 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 45530-45539 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 45540-45549 - 3, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 45550-45559 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 45560-45569 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 45570-45579 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 45580-45589 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 45590-45599 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 45600-45609 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 45610-45619 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 45620-45629 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 45630-45639 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 45640-45649 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 45650-45659 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 45660-45669 - 3, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 45670-45679 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 45680-45689 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 45690-45699 - 7, 6, 5, 4, 3, 2, 1, 30, 29, 28, // 45700-45709 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 45710-45719 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 45720-45729 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 45730-45739 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 45740-45749 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 45750-45759 - 3, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 45760-45769 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 38, // 45770-45779 - 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, // 45780-45789 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 45790-45799 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 45800-45809 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 45810-45819 - 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 45820-45829 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 45830-45839 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 45840-45849 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 45850-45859 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 45860-45869 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 45870-45879 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 45880-45889 - 3, 2, 1, 50, 49, 48, 47, 46, 45, 44, // 45890-45899 - 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, // 45900-45909 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 45910-45919 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 45920-45929 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 45930-45939 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 45940-45949 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 45950-45959 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 45960-45969 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 45970-45979 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 32, // 45980-45989 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 45990-45999 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 46000-46009 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 46010-46019 - 1, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 46020-46029 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 46030-46039 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 46040-46049 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 46050-46059 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 46060-46069 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 46070-46079 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 46080-46089 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 46090-46099 - 3, 2, 1, 30, 29, 28, 27, 26, 25, 24, // 46100-46109 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 46110-46119 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 46120-46129 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 46130-46139 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 46140-46149 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 46150-46159 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 46160-46169 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 46170-46179 - 1, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 46180-46189 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 20, // 46190-46199 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 46200-46209 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 46210-46219 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 46220-46229 - 7, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 46230-46239 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 46240-46249 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 46250-46259 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 46260-46269 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 22, // 46270-46279 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 46280-46289 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 46290-46299 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 18, // 46300-46309 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 46310-46319 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 46320-46329 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 46330-46339 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 46340-46349 - 1, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 46350-46359 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 46360-46369 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 46370-46379 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 46380-46389 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 46390-46399 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 46400-46409 - 1, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 46410-46419 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 46420-46429 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 46430-46439 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 46440-46449 - 1, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 46450-46459 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 46460-46469 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 46470-46479 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 46480-46489 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 46490-46499 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 46500-46509 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 46510-46519 - 3, 2, 1, 26, 25, 24, 23, 22, 21, 20, // 46520-46529 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 46530-46539 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 46540-46549 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 46550-46559 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 46560-46569 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 46570-46579 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 46580-46589 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 46590-46599 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 46600-46609 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 46610-46619 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 46620-46629 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 46630-46639 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 46640-46649 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 46650-46659 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 46660-46669 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 46670-46679 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 46680-46689 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 46690-46699 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 46700-46709 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 46710-46719 - 3, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 46720-46729 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 46730-46739 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 46740-46749 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 46750-46759 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 46760-46769 - 1, 36, 35, 34, 33, 32, 31, 30, 29, 28, // 46770-46779 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 46780-46789 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 46790-46799 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 46800-46809 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 46810-46819 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 46820-46829 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 46830-46839 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 46840-46849 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 46850-46859 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 46860-46869 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 46870-46879 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 46880-46889 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 46890-46899 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 46900-46909 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 46910-46919 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 46920-46929 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 46930-46939 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 46940-46949 - 7, 6, 5, 4, 3, 2, 1, 36, 35, 34, // 46950-46959 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 46960-46969 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 46970-46979 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 46980-46989 - 3, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 46990-46999 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 47000-47009 - 7, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 47010-47019 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 47020-47029 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 47030-47039 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 47040-47049 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 28, // 47050-47059 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 47060-47069 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 47070-47079 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 47080-47089 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 47090-47099 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 47100-47109 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 47110-47119 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 47120-47129 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 47130-47139 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 12, // 47140-47149 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 47150-47159 - 1, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 47160-47169 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 47170-47179 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 47180-47189 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 47190-47199 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 47200-47209 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 47210-47219 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 47220-47229 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 47230-47239 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 47240-47249 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 47250-47259 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 47260-47269 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 47270-47279 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 47280-47289 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 47290-47299 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 47300-47309 - 7, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 47310-47319 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 47320-47329 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 47330-47339 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 47340-47349 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 47350-47359 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 47360-47369 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 47370-47379 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 18, // 47380-47389 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 47390-47399 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 47400-47409 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 47410-47419 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 47420-47429 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 47430-47439 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 47440-47449 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 32, // 47450-47459 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 47460-47469 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 47470-47479 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 47480-47489 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 47490-47499 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 47500-47509 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 47510-47519 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 47520-47529 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 47530-47539 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 47540-47549 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 47550-47559 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 47560-47569 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 47570-47579 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 47580-47589 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 47590-47599 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 47600-47609 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 47610-47619 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 47620-47629 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 47630-47639 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 47640-47649 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 22, // 47650-47659 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 47660-47669 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 47670-47679 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 47680-47689 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 47690-47699 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 47700-47709 - 1, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 47710-47719 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 47720-47729 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 47730-47739 - 1, 2, 1, 34, 33, 32, 31, 30, 29, 28, // 47740-47749 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 47750-47759 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 47760-47769 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 47770-47779 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 47780-47789 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 47790-47799 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 47800-47809 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 47810-47819 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 47820-47829 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 47830-47839 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 47840-47849 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 47850-47859 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 47860-47869 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 47870-47879 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 47880-47889 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 47890-47899 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 47900-47909 - 1, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 47910-47919 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 47920-47929 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 47930-47939 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 47940-47949 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 47950-47959 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 47960-47969 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 47970-47979 - 1, 36, 35, 34, 33, 32, 31, 30, 29, 28, // 47980-47989 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 47990-47999 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 48000-48009 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 48010-48019 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 20, // 48020-48029 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 48030-48039 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 24, // 48040-48049 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 48050-48059 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 48060-48069 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 48070-48079 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 48080-48089 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 48090-48099 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 48100-48109 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 48110-48119 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 48120-48129 - 1, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 48130-48139 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 48140-48149 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 48150-48159 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 48160-48169 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 48170-48179 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 48180-48189 - 3, 2, 1, 4, 3, 2, 1, 24, 23, 22, // 48190-48199 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 48200-48209 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 48210-48219 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 48220-48229 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 48230-48239 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 48240-48249 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 48250-48259 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 48260-48269 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 48270-48279 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 48280-48289 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 48290-48299 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 48300-48309 - 1, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 48310-48319 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 48320-48329 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 48330-48339 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 48340-48349 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 48350-48359 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 48360-48369 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 48370-48379 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 48380-48389 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 48390-48399 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 48400-48409 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 48410-48419 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 48420-48429 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 48430-48439 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 48440-48449 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 48450-48459 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 48460-48469 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 48470-48479 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 48480-48489 - 1, 6, 5, 4, 3, 2, 1, 26, 25, 24, // 48490-48499 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 48500-48509 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 48510-48519 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 48520-48529 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 48530-48539 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 48540-48549 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 48550-48559 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 48560-48569 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 48570-48579 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 48580-48589 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 48590-48599 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 48600-48609 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 48610-48619 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 48620-48629 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 48630-48639 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 48640-48649 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 48650-48659 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 48660-48669 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 52, // 48670-48679 - 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, // 48680-48689 - 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, // 48690-48699 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 48700-48709 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 48710-48719 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 48720-48729 - 1, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 48730-48739 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 48740-48749 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 48750-48759 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 48760-48769 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 48770-48779 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 48780-48789 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 48790-48799 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 48800-48809 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 48810-48819 - 1, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 48820-48829 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 48830-48839 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 48840-48849 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 48850-48859 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 48860-48869 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 48870-48879 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 48880-48889 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 48890-48899 - 7, 6, 5, 4, 3, 2, 1, 40, 39, 38, // 48900-48909 - 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, // 48910-48919 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 48920-48929 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 48930-48939 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 48940-48949 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 48950-48959 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 48960-48969 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 48970-48979 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 48980-48989 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 48990-48999 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 49000-49009 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 49010-49019 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 49020-49029 - 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 49030-49039 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 49040-49049 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 49050-49059 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 49060-49069 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 49070-49079 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 49080-49089 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 49090-49099 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 49100-49109 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 49110-49119 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 49120-49129 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 49130-49139 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 49140-49149 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 49150-49159 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 49160-49169 - 1, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 49170-49179 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 49180-49189 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 49190-49199 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 49200-49209 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 49210-49219 - 3, 2, 1, 30, 29, 28, 27, 26, 25, 24, // 49220-49229 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 49230-49239 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 49240-49249 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 49250-49259 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 49260-49269 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 18, // 49270-49279 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 49280-49289 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 49290-49299 - 7, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 49300-49309 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 49310-49319 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 49320-49329 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 24, // 49330-49339 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 49340-49349 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 49350-49359 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 22, // 49360-49369 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 49370-49379 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 49380-49389 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 49390-49399 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 49400-49409 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 49410-49419 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 49420-49429 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 49430-49439 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 49440-49449 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 49450-49459 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 49460-49469 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 49470-49479 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 49480-49489 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 24, // 49490-49499 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 49500-49509 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 49510-49519 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 49520-49529 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 49530-49539 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 49540-49549 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 38, // 49550-49559 - 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, // 49560-49569 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 49570-49579 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 49580-49589 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 49590-49599 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 49600-49609 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 49610-49619 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 49620-49629 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 24, // 49630-49639 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 49640-49649 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 49650-49659 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 12, // 49660-49669 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 49670-49679 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 49680-49689 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 49690-49699 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 49700-49709 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 49710-49719 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 49720-49729 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 49730-49739 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 49740-49749 - 7, 6, 5, 4, 3, 2, 1, 26, 25, 24, // 49750-49759 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 49760-49769 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 49770-49779 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 12, // 49780-49789 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 49790-49799 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 49800-49809 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 49810-49819 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 49820-49829 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 49830-49839 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 49840-49849 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 49850-49859 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 49860-49869 - 1, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 49870-49879 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 49880-49889 - 1, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 49890-49899 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 49900-49909 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 49910-49919 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 49920-49929 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 49930-49939 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 49940-49949 - 7, 6, 5, 4, 3, 2, 1, 34, 33, 32, // 49950-49959 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 49960-49969 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 49970-49979 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 49980-49989 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 22, // 49990-49999 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 50000-50009 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 50010-50019 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 50020-50029 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 50030-50039 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 50040-50049 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 50050-50059 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 50060-50069 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 50070-50079 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 50080-50089 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 50090-50099 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 50100-50109 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 50110-50119 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 50120-50129 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 50130-50139 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 50140-50149 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 50150-50159 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 50160-50169 - 7, 6, 5, 4, 3, 2, 1, 30, 29, 28, // 50170-50179 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 50180-50189 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 50190-50199 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 50200-50209 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 50210-50219 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 50220-50229 - 1, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 50230-50239 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 50240-50249 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 50250-50259 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 50260-50269 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 50270-50279 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 50280-50289 - 1, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 50290-50299 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 50300-50309 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 50310-50319 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 50320-50329 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 50330-50339 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 50340-50349 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 50350-50359 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 50360-50369 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 50370-50379 - 3, 2, 1, 4, 3, 2, 1, 24, 23, 22, // 50380-50389 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 50390-50399 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 50400-50409 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 50410-50419 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 50420-50429 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 50430-50439 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 50440-50449 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 50450-50459 - 1, 36, 35, 34, 33, 32, 31, 30, 29, 28, // 50460-50469 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 50470-50479 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 50480-50489 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 50490-50499 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 50500-50509 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 50510-50519 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 50520-50529 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 50530-50539 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 50540-50549 - 1, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 50550-50559 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 50560-50569 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 50570-50579 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 50580-50589 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 28, // 50590-50599 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 50600-50609 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 50610-50619 - 7, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 50620-50629 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 50630-50639 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 50640-50649 - 1, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 50650-50659 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 50660-50669 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 50670-50679 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 50680-50689 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 50690-50699 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 50700-50709 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 50710-50719 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 50720-50729 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 50730-50739 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 50740-50749 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 50750-50759 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 50760-50769 - 3, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 50770-50779 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 32, // 50780-50789 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 50790-50799 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 50800-50809 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 50810-50819 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 50820-50829 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 50830-50839 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 50840-50849 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 50850-50859 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 50860-50869 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 50870-50879 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 50880-50889 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 50890-50899 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 50900-50909 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 50910-50919 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 22, // 50920-50929 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 50930-50939 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 50940-50949 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 50950-50959 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 50960-50969 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 50970-50979 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 50980-50989 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 50990-50999 - 1, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 51000-51009 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 51010-51019 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 51020-51029 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 51030-51039 - 3, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 51040-51049 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 51050-51059 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 51060-51069 - 1, 38, 37, 36, 35, 34, 33, 32, 31, 30, // 51070-51079 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 51080-51089 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 51090-51099 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 22, // 51100-51109 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 51110-51119 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 51120-51129 - 1, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 51130-51139 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 51140-51149 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 51150-51159 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 24, // 51160-51169 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 51170-51179 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 51180-51189 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 51190-51199 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 51200-51209 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 51210-51219 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 51220-51229 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 51230-51239 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 51240-51249 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 51250-51259 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 51260-51269 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 51270-51279 - 3, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 51280-51289 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 51290-51299 - 7, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 51300-51309 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 51310-51319 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 51320-51329 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 51330-51339 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 12, // 51340-51349 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 51350-51359 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 51360-51369 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 51370-51379 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 51380-51389 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 51390-51399 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 51400-51409 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 51410-51419 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 51420-51429 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 51430-51439 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 51440-51449 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 51450-51459 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 51460-51469 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 51470-51479 - 1, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 51480-51489 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 51490-51499 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 51500-51509 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 51510-51519 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 51520-51529 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 51530-51539 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 51540-51549 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 51550-51559 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 51560-51569 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 51570-51579 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 51580-51589 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 51590-51599 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 51600-51609 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 51610-51619 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 51620-51629 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 51630-51639 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 51640-51649 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 51650-51659 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 51660-51669 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 51670-51679 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 51680-51689 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 51690-51699 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 51700-51709 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 51710-51719 - 1, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 51720-51729 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 51730-51739 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 51740-51749 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 51750-51759 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 18, // 51760-51769 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 51770-51779 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 51780-51789 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 51790-51799 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 51800-51809 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 51810-51819 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 51820-51829 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 51830-51839 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 51840-51849 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 51850-51859 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 51860-51869 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 51870-51879 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 51880-51889 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 51890-51899 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 51900-51909 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 51910-51919 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 51920-51929 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 51930-51939 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 22, // 51940-51949 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 51950-51959 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 51960-51969 - 1, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 51970-51979 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 51980-51989 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 51990-51999 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 52000-52009 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 52010-52019 - 1, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 52020-52029 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 52030-52039 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 52040-52049 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 52050-52059 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 52060-52069 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 52070-52079 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 52080-52089 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 52090-52099 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 52100-52109 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 52110-52119 - 1, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 52120-52129 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 52130-52139 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 52140-52149 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 52150-52159 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 52160-52169 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 52170-52179 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 52180-52189 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 52190-52199 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 52200-52209 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 52210-52219 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 52220-52229 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 52230-52239 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 52240-52249 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 52250-52259 - 7, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 52260-52269 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 52270-52279 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 52280-52289 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 52290-52299 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 52300-52309 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 52310-52319 - 1, 40, 39, 38, 37, 36, 35, 34, 33, 32, // 52320-52329 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 52330-52339 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 52340-52349 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 52350-52359 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 52360-52369 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 52370-52379 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 52380-52389 - 1, 42, 41, 40, 39, 38, 37, 36, 35, 34, // 52390-52399 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 52400-52409 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 52410-52419 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 52420-52429 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 52430-52439 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 52440-52449 - 3, 2, 1, 4, 3, 2, 1, 32, 31, 30, // 52450-52459 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 52460-52469 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 52470-52479 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 52480-52489 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 52490-52499 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 52500-52509 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 52510-52519 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 52520-52529 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 52530-52539 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 52540-52549 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 52550-52559 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 52560-52569 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 52570-52579 - 3, 2, 1, 26, 25, 24, 23, 22, 21, 20, // 52580-52589 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 52590-52599 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 52600-52609 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 52610-52619 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 52620-52629 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 28, // 52630-52639 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 52640-52649 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 52650-52659 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 52660-52669 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 52670-52679 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 52680-52689 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 52690-52699 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 52700-52709 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 52710-52719 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 52720-52729 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 52730-52739 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 52740-52749 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 52750-52759 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 52760-52769 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 52770-52779 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 52780-52789 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 52790-52799 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 52800-52809 - 3, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 52810-52819 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 52820-52829 - 7, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 52830-52839 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 52840-52849 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 52850-52859 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 52860-52869 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 52870-52879 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 52880-52889 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 52890-52899 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 52900-52909 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 52910-52919 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 52920-52929 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 52930-52939 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 52940-52949 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 52950-52959 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 52960-52969 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 52970-52979 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 52980-52989 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 52990-52999 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 53000-53009 - 7, 6, 5, 4, 3, 2, 1, 30, 29, 28, // 53010-53019 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 53020-53029 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 53030-53039 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 53040-53049 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 53050-53059 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 53060-53069 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 53070-53079 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 53080-53089 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 53090-53099 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 53100-53109 - 3, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 53110-53119 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 53120-53129 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 53130-53139 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 53140-53149 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 53150-53159 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 53160-53169 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 53170-53179 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 53180-53189 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 53190-53199 - 1, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 53200-53209 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 53210-53219 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 53220-53229 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 28, // 53230-53239 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 53240-53249 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 53250-53259 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 53260-53269 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 53270-53279 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 53280-53289 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 53290-53299 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 53300-53309 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 53310-53319 - 3, 2, 1, 4, 3, 2, 1, 26, 25, 24, // 53320-53329 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 53330-53339 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 53340-53349 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 53350-53359 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 53360-53369 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 53370-53379 - 1, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 53380-53389 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 53390-53399 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 53400-53409 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 53410-53419 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 53420-53429 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 53430-53439 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 53440-53449 - 3, 2, 1, 26, 25, 24, 23, 22, 21, 20, // 53450-53459 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 53460-53469 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 24, // 53470-53479 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 53480-53489 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 53490-53499 - 3, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 53500-53509 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 53510-53519 - 7, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 53520-53529 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 53530-53539 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 53540-53549 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 53550-53559 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 22, // 53560-53569 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 53570-53579 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 53580-53589 - 1, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 53590-53599 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 53600-53609 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 53610-53619 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 53620-53629 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 53630-53639 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 53640-53649 - 3, 2, 1, 4, 3, 2, 1, 24, 23, 22, // 53650-53659 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 53660-53669 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 53670-53679 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 53680-53689 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 53690-53699 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 53700-53709 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 53710-53719 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 53720-53729 - 1, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 53730-53739 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 53740-53749 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 53750-53759 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 53760-53769 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 53770-53779 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 53780-53789 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 53790-53799 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 53800-53809 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 53810-53819 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 53820-53829 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 53830-53839 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 53840-53849 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 53850-53859 - 1, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 53860-53869 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 53870-53879 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 53880-53889 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 18, // 53890-53899 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 53900-53909 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 53910-53919 - 3, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 53920-53929 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 53930-53939 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 53940-53949 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 28, // 53950-53959 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 53960-53969 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 53970-53979 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 53980-53989 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 53990-53999 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 54000-54009 - 1, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 54010-54019 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 54020-54029 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 54030-54039 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 54040-54049 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 24, // 54050-54059 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 54060-54069 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 54070-54079 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 54080-54089 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 54090-54099 - 1, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 54100-54109 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 54110-54119 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 54120-54129 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 54130-54139 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 54140-54149 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 54150-54159 - 3, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 54160-54169 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 54170-54179 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 54180-54189 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 54190-54199 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 54200-54209 - 7, 6, 5, 4, 3, 2, 1, 34, 33, 32, // 54210-54219 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 54220-54229 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 54230-54239 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 54240-54249 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 54250-54259 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 54260-54269 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 54270-54279 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 54280-54289 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 54290-54299 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 54300-54309 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 54310-54319 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 54320-54329 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 54330-54339 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 54340-54349 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 54350-54359 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 54360-54369 - 1, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 54370-54379 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 54380-54389 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 54390-54399 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 54400-54409 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 54410-54419 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 54420-54429 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 54430-54439 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 20, // 54440-54449 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 54450-54459 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 24, // 54460-54469 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 54470-54479 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 54480-54489 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 54490-54499 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 54500-54509 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 54510-54519 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 54520-54529 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 54530-54539 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 54540-54549 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 54550-54559 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 54560-54569 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 54570-54579 - 1, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 54580-54589 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 54590-54599 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 54600-54609 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 54610-54619 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 54620-54629 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 54630-54639 - 7, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 54640-54649 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 54650-54659 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 54660-54669 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 30, // 54670-54679 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 54680-54689 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 54690-54699 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 54700-54709 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 54710-54719 - 1, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 54720-54729 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 54730-54739 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 54740-54749 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 54750-54759 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 54760-54769 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 54770-54779 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 54780-54789 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 30, // 54790-54799 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 54800-54809 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 54810-54819 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 54820-54829 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 54830-54839 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 54840-54849 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 54850-54859 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 54860-54869 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 54870-54879 - 1, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 54880-54889 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 54890-54899 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 54900-54909 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 22, // 54910-54919 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 54920-54929 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 54930-54939 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 54940-54949 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 54950-54959 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 54960-54969 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 54970-54979 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 54980-54989 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 54990-54999 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 55000-55009 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 55010-55019 - 1, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 55020-55029 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 55030-55039 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 55040-55049 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 55050-55059 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 55060-55069 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 24, // 55070-55079 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 55080-55089 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 55090-55099 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 55100-55109 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 55110-55119 - 7, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 55120-55129 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 55130-55139 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 55140-55149 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 55150-55159 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 55160-55169 - 1, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 55170-55179 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 55180-55189 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 55190-55199 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 55200-55209 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 10, // 55210-55219 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 55220-55229 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 55230-55239 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 55240-55249 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 32, // 55250-55259 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 55260-55269 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 55270-55279 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 55280-55289 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 55290-55299 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 55300-55309 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 55310-55319 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 55320-55329 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 55330-55339 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 55340-55349 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 55350-55359 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 55360-55369 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 55370-55379 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 55380-55389 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 55390-55399 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 55400-55409 - 1, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 55410-55419 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 55420-55429 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 55430-55439 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 55440-55449 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 55450-55459 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 55460-55469 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 55470-55479 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 55480-55489 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 55490-55499 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 55500-55509 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 55510-55519 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 55520-55529 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 55530-55539 - 1, 6, 5, 4, 3, 2, 1, 32, 31, 30, // 55540-55549 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 55550-55559 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 55560-55569 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 55570-55579 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 55580-55589 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 55590-55599 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 55600-55609 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 55610-55619 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 55620-55629 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 22, // 55630-55639 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 55640-55649 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 55650-55659 - 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 55660-55669 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 55670-55679 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 55680-55689 - 1, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 55690-55699 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 55700-55709 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 55710-55719 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 55720-55729 - 3, 2, 1, 30, 29, 28, 27, 26, 25, 24, // 55730-55739 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 55740-55749 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 55750-55759 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 55760-55769 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 55770-55779 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 55780-55789 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 55790-55799 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 55800-55809 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 55810-55819 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 55820-55829 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 55830-55839 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 22, // 55840-55849 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 55850-55859 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 55860-55869 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 55870-55879 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 55880-55889 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 55890-55899 - 1, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 55900-55909 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 55910-55919 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 55920-55929 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 55930-55939 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 55940-55949 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 55950-55959 - 7, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 55960-55969 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 55970-55979 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 55980-55989 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 55990-55999 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 30, // 56000-56009 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 56010-56019 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 56020-56029 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 56030-56039 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 56040-56049 - 3, 2, 1, 28, 27, 26, 25, 24, 23, 22, // 56050-56059 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 56060-56069 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 56070-56079 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 56080-56089 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 56090-56099 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 56100-56109 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 56110-56119 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 56120-56129 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 56130-56139 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 56140-56149 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 56150-56159 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 56160-56169 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 56170-56179 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 56180-56189 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 56190-56199 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 28, // 56200-56209 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 56210-56219 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 56220-56229 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 56230-56239 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 56240-56249 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 56250-56259 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 30, // 56260-56269 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 56270-56279 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 56280-56289 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 56290-56299 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 56300-56309 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 56310-56319 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 56320-56329 - 3, 2, 1, 26, 25, 24, 23, 22, 21, 20, // 56330-56339 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 56340-56349 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 56350-56359 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 56360-56369 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 56370-56379 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 56380-56389 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 56390-56399 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 56400-56409 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 56410-56419 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 56420-56429 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 56430-56439 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 56440-56449 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 56450-56459 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 56460-56469 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 10, // 56470-56479 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 56480-56489 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 56490-56499 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 56500-56509 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 56510-56519 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 56520-56529 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 56530-56539 - 3, 2, 1, 26, 25, 24, 23, 22, 21, 20, // 56540-56549 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 56550-56559 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 22, // 56560-56569 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 56570-56579 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 56580-56589 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 56590-56599 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 56600-56609 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 56610-56619 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 56620-56629 - 3, 2, 1, 26, 25, 24, 23, 22, 21, 20, // 56630-56639 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 56640-56649 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 56650-56659 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 56660-56669 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 56670-56679 - 1, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 56680-56689 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 56690-56699 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 56700-56709 - 1, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 56710-56719 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 56720-56729 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 56730-56739 - 7, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 56740-56749 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 56750-56759 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 56760-56769 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 56770-56779 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 56780-56789 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 56790-56799 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 56800-56809 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 56810-56819 - 1, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 56820-56829 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 56830-56839 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 56840-56849 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 56850-56859 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 56860-56869 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 56870-56879 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 56880-56889 - 1, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 56890-56899 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 56900-56909 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 56910-56919 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 56920-56929 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 56930-56939 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 56940-56949 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 56950-56959 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 56960-56969 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 56970-56979 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 56980-56989 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 38, // 56990-56999 - 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, // 57000-57009 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 57010-57019 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 57020-57029 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 57030-57039 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 57040-57049 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 57050-57059 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 57060-57069 - 3, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 57070-57079 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 57080-57089 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 57090-57099 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 57100-57109 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 57110-57119 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 57120-57129 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 57130-57139 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 57140-57149 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 57150-57159 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 57160-57169 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 57170-57179 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 57180-57189 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 57190-57199 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 57200-57209 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 57210-57219 - 1, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 57220-57229 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 57230-57239 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 57240-57249 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 57250-57259 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 57260-57269 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 57270-57279 - 3, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 57280-57289 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 57290-57299 - 1, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 57300-57309 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 57310-57319 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 57320-57329 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 57330-57339 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 18, // 57340-57349 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 57350-57359 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 57360-57369 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 57370-57379 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 57380-57389 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 57390-57399 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 57400-57409 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 57410-57419 - 7, 6, 5, 4, 3, 2, 1, 30, 29, 28, // 57420-57429 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 57430-57439 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 57440-57449 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 57450-57459 - 7, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 57460-57469 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 57470-57479 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 57480-57489 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 57490-57499 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 57500-57509 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 57510-57519 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 28, // 57520-57529 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 57530-57539 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 57540-57549 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 57550-57559 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 57560-57569 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 57570-57579 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 57580-57589 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 57590-57599 - 1, 36, 35, 34, 33, 32, 31, 30, 29, 28, // 57600-57609 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 57610-57619 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 57620-57629 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 57630-57639 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 57640-57649 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 57650-57659 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 57660-57669 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 57670-57679 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 57680-57689 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 57690-57699 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 57700-57709 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 57710-57719 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 57720-57729 - 1, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 57730-57739 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 57740-57749 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 57750-57759 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 57760-57769 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 57770-57779 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 57780-57789 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 57790-57799 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 20, // 57800-57809 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 57810-57819 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 57820-57829 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 57830-57839 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 57840-57849 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 22, // 57850-57859 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 57860-57869 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 57870-57879 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 57880-57889 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 57890-57899 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 57900-57909 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 57910-57919 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 57920-57929 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 57930-57939 - 3, 2, 1, 4, 3, 2, 1, 26, 25, 24, // 57940-57949 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 57950-57959 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 57960-57969 - 3, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 57970-57979 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 57980-57989 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 57990-57999 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 58000-58009 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 58010-58019 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 58020-58029 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 58030-58039 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 58040-58049 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 58050-58059 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 58060-58069 - 3, 2, 1, 26, 25, 24, 23, 22, 21, 20, // 58070-58079 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 58080-58089 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 58090-58099 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 58100-58109 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 58110-58119 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 58120-58129 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 58130-58139 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 58140-58149 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 58150-58159 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 58160-58169 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 58170-58179 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 58180-58189 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 58190-58199 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 58200-58209 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 58210-58219 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 58220-58229 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 58230-58239 - 3, 2, 1, 28, 27, 26, 25, 24, 23, 22, // 58240-58249 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 58250-58259 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 58260-58269 - 1, 38, 37, 36, 35, 34, 33, 32, 31, 30, // 58270-58279 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 58280-58289 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 58290-58299 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 58300-58309 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 58310-58319 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 58320-58329 - 7, 6, 5, 4, 3, 2, 1, 26, 25, 24, // 58330-58339 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 58340-58349 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 58350-58359 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 10, // 58360-58369 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 58370-58379 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 58380-58389 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 58390-58399 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 58400-58409 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 58410-58419 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 58420-58429 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 58430-58439 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 58440-58449 - 1, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 58450-58459 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 58460-58469 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 58470-58479 - 1, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 58480-58489 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 58490-58499 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 58500-58509 - 1, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 58510-58519 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 58520-58529 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 58530-58539 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 58540-58549 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 58550-58559 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 58560-58569 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 22, // 58570-58579 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 58580-58589 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 58590-58599 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 58600-58609 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 58610-58619 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 58620-58629 - 1, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 58630-58639 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 58640-58649 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 58650-58659 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 58660-58669 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 58670-58679 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 58680-58689 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 58690-58699 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 58700-58709 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 58710-58719 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 58720-58729 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 58730-58739 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 58740-58749 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 58750-58759 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 58760-58769 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 58770-58779 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 42, // 58780-58789 - 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, // 58790-58799 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 58800-58809 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 58810-58819 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 58820-58829 - 1, 58, 57, 56, 55, 54, 53, 52, 51, 50, // 58830-58839 - 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, // 58840-58849 - 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, // 58850-58859 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 58860-58869 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 58870-58879 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 58880-58889 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 58890-58899 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 58900-58909 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 58910-58919 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 58920-58929 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 58930-58939 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 58940-58949 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 58950-58959 - 3, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 58960-58969 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 58970-58979 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 58980-58989 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 58990-58999 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 59000-59009 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 59010-59019 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 22, // 59020-59029 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 59030-59039 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 59040-59049 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 59050-59059 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 59060-59069 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 59070-59079 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 59080-59089 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 59090-59099 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 59100-59109 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 59110-59119 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 59120-59129 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 59130-59139 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 59140-59149 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 59150-59159 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 59160-59169 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 59170-59179 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 59180-59189 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 59190-59199 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 59200-59209 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 59210-59219 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 59220-59229 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 59230-59239 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 59240-59249 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 59250-59259 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 59260-59269 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 59270-59279 - 1, 52, 51, 50, 49, 48, 47, 46, 45, 44, // 59280-59289 - 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, // 59290-59299 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 59300-59309 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 59310-59319 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 59320-59329 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 59330-59339 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 59340-59349 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 59350-59359 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 59360-59369 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 59370-59379 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 59380-59389 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 59390-59399 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 59400-59409 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 22, // 59410-59419 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 59420-59429 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 59430-59439 - 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 59440-59449 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 59450-59459 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 59460-59469 - 1, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 59470-59479 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 59480-59489 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 59490-59499 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 59500-59509 - 3, 2, 1, 26, 25, 24, 23, 22, 21, 20, // 59510-59519 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 59520-59529 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 59530-59539 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 59540-59549 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 59550-59559 - 1, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 59560-59569 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 59570-59579 - 1, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 59580-59589 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 59590-59599 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 59600-59609 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 59610-59619 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 22, // 59620-59629 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 59630-59639 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 59640-59649 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 59650-59659 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 59660-59669 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 59670-59679 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 59680-59689 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 59690-59699 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 59700-59709 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 59710-59719 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 59720-59729 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 59730-59739 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 59740-59749 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 59750-59759 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 59760-59769 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 59770-59779 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 59780-59789 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 59790-59799 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 24, // 59800-59809 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 59810-59819 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 59820-59829 - 3, 2, 1, 30, 29, 28, 27, 26, 25, 24, // 59830-59839 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 59840-59849 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 59850-59859 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 59860-59869 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 59870-59879 - 7, 6, 5, 4, 3, 2, 1, 34, 33, 32, // 59880-59889 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 59890-59899 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 59900-59909 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 59910-59919 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 22, // 59920-59929 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 59930-59939 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 59940-59949 - 1, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 59950-59959 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 59960-59969 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 59970-59979 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 59980-59989 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 59990-59999 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 60000-60009 - 3, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 60010-60019 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 60020-60029 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 60030-60039 - 1, 36, 35, 34, 33, 32, 31, 30, 29, 28, // 60040-60049 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 60050-60059 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 60060-60069 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 60070-60079 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 60080-60089 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 60090-60099 - 1, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 60100-60109 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 60110-60119 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 60120-60129 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 60130-60139 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 60140-60149 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 60150-60159 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 40, // 60160-60169 - 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, // 60170-60179 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 60180-60189 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 60190-60199 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 60200-60209 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 60210-60219 - 3, 2, 1, 28, 27, 26, 25, 24, 23, 22, // 60220-60229 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 60230-60239 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 60240-60249 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 60250-60259 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 60260-60269 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 60270-60279 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 60280-60289 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 60290-60299 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 60300-60309 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 60310-60319 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 60320-60329 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 60330-60339 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 60340-60349 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 60350-60359 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 60360-60369 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 60370-60379 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 60380-60389 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 60390-60399 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 60400-60409 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 60410-60419 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 60420-60429 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 60430-60439 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 60440-60449 - 7, 6, 5, 4, 3, 2, 1, 36, 35, 34, // 60450-60459 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 60460-60469 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 60470-60479 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 60480-60489 - 3, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 60490-60499 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 60500-60509 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 60510-60519 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 60520-60529 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 50, // 60530-60539 - 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, // 60540-60549 - 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, // 60550-60559 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 60560-60569 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 60570-60579 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 60580-60589 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 60590-60599 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 60600-60609 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 60610-60619 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 60620-60629 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 60630-60639 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 60640-60649 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 60650-60659 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 60660-60669 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 60670-60679 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 60680-60689 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 60690-60699 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 60700-60709 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 60710-60719 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 60720-60729 - 3, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 60730-60739 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 60740-60749 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 60750-60759 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 60760-60769 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 60770-60779 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 60780-60789 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 60790-60799 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 60800-60809 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 60810-60819 - 1, 38, 37, 36, 35, 34, 33, 32, 31, 30, // 60820-60829 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 60830-60839 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 60840-60849 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 60850-60859 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 60860-60869 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 60870-60879 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 60880-60889 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 60890-60899 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 60900-60909 - 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, // 60910-60919 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 60920-60929 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 60930-60939 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 60940-60949 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 60950-60959 - 1, 40, 39, 38, 37, 36, 35, 34, 33, 32, // 60960-60969 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 60970-60979 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 60980-60989 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 60990-60999 - 1, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 61000-61009 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 61010-61019 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 61020-61029 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 61030-61039 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 61040-61049 - 1, 6, 5, 4, 3, 2, 1, 34, 33, 32, // 61050-61059 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 61060-61069 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 61070-61079 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 61080-61089 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 22, // 61090-61099 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 61100-61109 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 61110-61119 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 61120-61129 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 61130-61139 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 61140-61149 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 61150-61159 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 42, // 61160-61169 - 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, // 61170-61179 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 61180-61189 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 61190-61199 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 61200-61209 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 61210-61219 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 61220-61229 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 61230-61239 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 61240-61249 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 61250-61259 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 61260-61269 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 61270-61279 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 61280-61289 - 1, 6, 5, 4, 3, 2, 1, 34, 33, 32, // 61290-61299 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 61300-61309 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 61310-61319 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 61320-61329 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 61330-61339 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 61340-61349 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 61350-61359 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 61360-61369 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 61370-61379 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 61380-61389 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 61390-61399 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 8, // 61400-61409 - 7, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 61410-61419 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 61420-61429 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 61430-61439 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 61440-61449 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 61450-61459 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 61460-61469 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 61470-61479 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 61480-61489 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 61490-61499 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 61500-61509 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 24, // 61510-61519 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 61520-61529 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 61530-61539 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 61540-61549 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 2, // 61550-61559 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 61560-61569 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 61570-61579 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 61580-61589 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 61590-61599 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 61600-61609 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 61610-61619 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 61620-61629 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 61630-61639 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 61640-61649 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 61650-61659 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 61660-61669 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 61670-61679 - 1, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 61680-61689 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 61690-61699 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 61700-61709 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 61710-61719 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 22, // 61720-61729 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 61730-61739 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 61740-61749 - 1, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 61750-61759 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 61760-61769 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 61770-61779 - 1, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 61780-61789 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 61790-61799 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 61800-61809 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 61810-61819 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 61820-61829 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 61830-61839 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 61840-61849 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 61850-61859 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 61860-61869 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 30, // 61870-61879 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 61880-61889 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 61890-61899 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 61900-61909 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 61910-61919 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 61920-61929 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 61930-61939 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 61940-61949 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 61950-61959 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 61960-61969 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 61970-61979 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 61980-61989 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 61990-61999 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 62000-62009 - 1, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 62010-62019 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 62020-62029 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 62030-62039 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 62040-62049 - 3, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 62050-62059 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 62060-62069 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 62070-62079 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 62080-62089 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 20, // 62090-62099 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 62100-62109 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 62110-62119 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 62120-62129 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 62130-62139 - 1, 2, 1, 28, 27, 26, 25, 24, 23, 22, // 62140-62149 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 62150-62159 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 62160-62169 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 62170-62179 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 62180-62189 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 62190-62199 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 62200-62209 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 62210-62219 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 62220-62229 - 3, 2, 1, 40, 39, 38, 37, 36, 35, 34, // 62230-62239 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 62240-62249 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 62250-62259 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 62260-62269 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 62270-62279 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 62280-62289 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 62290-62299 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 62300-62309 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 62310-62319 - 3, 2, 1, 4, 3, 2, 1, 20, 19, 18, // 62320-62329 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 62330-62339 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 62340-62349 - 1, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 62350-62359 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 62360-62369 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 62370-62379 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 62380-62389 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 62390-62399 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 62400-62409 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 62410-62419 - 3, 2, 1, 36, 35, 34, 33, 32, 31, 30, // 62420-62429 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 62430-62439 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 62440-62449 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 62450-62459 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 62460-62469 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 62470-62479 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 62480-62489 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 62490-62499 - 1, 6, 5, 4, 3, 2, 1, 26, 25, 24, // 62500-62509 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 62510-62519 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 62520-62529 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 62530-62539 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 62540-62549 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 62550-62559 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 62560-62569 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 62570-62579 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 62580-62589 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 62590-62599 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 62600-62609 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 62610-62619 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 62620-62629 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 62630-62639 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 62640-62649 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 24, // 62650-62659 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 62660-62669 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 62670-62679 - 3, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 62680-62689 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 62690-62699 - 1, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 62700-62709 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 62710-62719 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 62720-62729 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 62730-62739 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 62740-62749 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 62750-62759 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 62760-62769 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 62770-62779 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 62780-62789 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 62790-62799 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 62800-62809 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 62810-62819 - 7, 6, 5, 4, 3, 2, 1, 24, 23, 22, // 62820-62829 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 62830-62839 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 62840-62849 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 62850-62859 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 62860-62869 - 3, 2, 1, 24, 23, 22, 21, 20, 19, 18, // 62870-62879 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 62880-62889 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 62890-62899 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 62900-62909 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 62910-62919 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 62920-62929 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 30, // 62930-62939 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 62940-62949 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 62950-62959 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 62960-62969 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 62970-62979 - 1, 2, 1, 4, 3, 2, 1, 2, 1, 40, // 62980-62989 - 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, // 62990-62999 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 63000-63009 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 63010-63019 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 63020-63029 - 1, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 63030-63039 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 63040-63049 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 63050-63059 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 63060-63069 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 18, // 63070-63079 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 63080-63089 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 63090-63099 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 63100-63109 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 63110-63119 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 63120-63129 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 63130-63139 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 30, // 63140-63149 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 63150-63159 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 63160-63169 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 63170-63179 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 63180-63189 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 63190-63199 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 63200-63209 - 1, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 63210-63219 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 63220-63229 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 63230-63239 - 1, 6, 5, 4, 3, 2, 1, 30, 29, 28, // 63240-63249 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 63250-63259 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 63260-63269 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 63270-63279 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 63280-63289 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 12, // 63290-63299 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 63300-63309 - 1, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 63310-63319 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 63320-63329 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 63330-63339 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 63340-63349 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 63350-63359 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 63360-63369 - 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 63370-63379 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 63380-63389 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 63390-63399 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 63400-63409 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 63410-63419 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 63420-63429 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 63430-63439 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 63440-63449 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 63450-63459 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 63460-63469 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 63470-63479 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 63480-63489 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 22, // 63490-63499 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 63500-63509 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 63510-63519 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 63520-63529 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 63530-63539 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 63540-63549 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 63550-63559 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 63560-63569 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 63570-63579 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 63580-63589 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 63590-63599 - 1, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 63600-63609 - 1, 6, 5, 4, 3, 2, 1, 12, 11, 10, // 63610-63619 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 63620-63629 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 63630-63639 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 10, // 63640-63649 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 63650-63659 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 63660-63669 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 63670-63679 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 63680-63689 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 63690-63699 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 63700-63709 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 63710-63719 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 63720-63729 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 63730-63739 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 63740-63749 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 63750-63759 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 63760-63769 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 63770-63779 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 63780-63789 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 63790-63799 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 63800-63809 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 63810-63819 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 63820-63829 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 63830-63839 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 63840-63849 - 3, 2, 1, 4, 3, 2, 1, 6, 5, 4, // 63850-63859 - 3, 2, 1, 38, 37, 36, 35, 34, 33, 32, // 63860-63869 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 63870-63879 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 63880-63889 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 63890-63899 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 63900-63909 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 63910-63919 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 20, // 63920-63929 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 63930-63939 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 28, // 63940-63949 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 63950-63959 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 63960-63969 - 7, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 63970-63979 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 63980-63989 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 63990-63999 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 64000-64009 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 14, // 64010-64019 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 64020-64029 - 3, 2, 1, 4, 3, 2, 1, 26, 25, 24, // 64030-64039 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 64040-64049 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 64050-64059 - 3, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 64060-64069 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 64070-64079 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 64080-64089 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 64090-64099 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 64100-64109 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 64110-64119 - 3, 2, 1, 28, 27, 26, 25, 24, 23, 22, // 64120-64129 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 64130-64139 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 64140-64149 - 1, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 64150-64159 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 64160-64169 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 64170-64179 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 28, // 64180-64189 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 64190-64199 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 64200-64209 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 64210-64219 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 64220-64229 - 1, 6, 5, 4, 3, 2, 1, 34, 33, 32, // 64230-64239 - 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, // 64240-64249 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 64250-64259 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 64260-64269 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 64270-64279 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 64280-64289 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 64290-64299 - 1, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 64300-64309 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 64310-64319 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 64320-64329 - 3, 2, 1, 40, 39, 38, 37, 36, 35, 34, // 64330-64339 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 64340-64349 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 64350-64359 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 64360-64369 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 64370-64379 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 64380-64389 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 64390-64399 - 3, 2, 1, 30, 29, 28, 27, 26, 25, 24, // 64400-64409 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 64410-64419 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 64420-64429 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 64430-64439 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 64440-64449 - 1, 2, 1, 30, 29, 28, 27, 26, 25, 24, // 64450-64459 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 64460-64469 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 64470-64479 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 10, // 64480-64489 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 64490-64499 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 64500-64509 - 3, 2, 1, 40, 39, 38, 37, 36, 35, 34, // 64510-64519 - 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, // 64520-64529 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 64530-64539 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 64540-64549 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 64550-64559 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 64560-64569 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 64570-64579 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 64580-64589 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 64590-64599 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 64600-64609 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 64610-64619 - 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 64620-64629 - 3, 2, 1, 28, 27, 26, 25, 24, 23, 22, // 64630-64639 - 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, // 64640-64649 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 64650-64659 - 1, 2, 1, 4, 3, 2, 1, 12, 11, 10, // 64660-64669 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 64670-64679 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 64680-64689 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 64690-64699 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, // 64700-64709 - 7, 6, 5, 4, 3, 2, 1, 30, 29, 28, // 64710-64719 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 64720-64729 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 64730-64739 - 7, 6, 5, 4, 3, 2, 1, 16, 15, 14, // 64740-64749 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 64750-64759 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 64760-64769 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 64770-64779 - 1, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 64780-64789 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 64790-64799 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 64800-64809 - 1, 6, 5, 4, 3, 2, 1, 32, 31, 30, // 64810-64819 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 64820-64829 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 64830-64839 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 64840-64849 - 3, 2, 1, 18, 17, 16, 15, 14, 13, 12, // 64850-64859 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 64860-64869 - 1, 6, 5, 4, 3, 2, 1, 2, 1, 12, // 64870-64879 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 64880-64889 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 64890-64899 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 64900-64909 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 64910-64919 - 1, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 64920-64929 - 7, 6, 5, 4, 3, 2, 1, 14, 13, 12, // 64930-64939 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 64940-64949 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 64950-64959 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 28, // 64960-64969 - 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, // 64970-64979 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 64980-64989 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 64990-64999 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 65000-65009 - 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 65010-65019 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 4, // 65020-65029 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 65030-65039 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 65040-65049 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 65050-65059 - 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, // 65060-65069 - 1, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 65070-65079 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, // 65080-65089 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 65090-65099 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 65100-65109 - 1, 8, 7, 6, 5, 4, 3, 2, 1, 4, // 65110-65119 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 12, // 65120-65129 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 65130-65139 - 1, 6, 5, 4, 3, 2, 1, 20, 19, 18, // 65140-65149 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 65150-65159 - 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, // 65160-65169 - 1, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 65170-65179 - 3, 2, 1, 20, 19, 18, 17, 16, 15, 14, // 65180-65189 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 65190-65199 - 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, // 65200-65209 - 3, 2, 1, 26, 25, 24, 23, 22, 21, 20, // 65210-65219 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 65220-65229 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 65230-65239 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 65240-65249 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 65250-65259 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 18, // 65260-65269 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 65270-65279 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 65280-65289 - 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, // 65290-65299 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, // 65300-65309 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 65310-65319 - 3, 2, 1, 4, 3, 2, 1, 26, 25, 24, // 65320-65329 - 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, // 65330-65339 - 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 65340-65349 - 3, 2, 1, 4, 3, 2, 1, 14, 13, 12, // 65350-65359 - 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 65360-65369 - 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, // 65370-65379 - 1, 12, 11, 10, 9, 8, 7, 6, 5, 4, // 65380-65389 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 65390-65399 - 7, 6, 5, 4, 3, 2, 1, 6, 5, 4, // 65400-65409 - 3, 2, 1, 6, 5, 4, 3, 2, 1, 4, // 65410-65419 - 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, // 65420-65429 - 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, // 65430-65439 - 7, 6, 5, 4, 3, 2, 1, 2, 1, 30, // 65440-65449 - 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, // 65450-65459 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 65460-65469 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 18, // 65470-65479 - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, // 65480-65489 - 7, 6, 5, 4, 3, 2, 1, 22, 21, 20, // 65490-65499 - 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, // 65500-65509 - 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, // 65510-65519 - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 65520-65529 - 0, 0, 0, 0, 0, 0, - } - - lohi [256]struct{ lo, hi int } -) - -func init() { - for i, v := range liars { - blk := v >> 24 - x := &lohi[blk] - if x.lo == 0 || i < x.lo { - x.lo = i - } - if i > x.hi { - x.hi = i - } - } -} diff --git a/vendor/github.com/cznic/mathutil/test_deps.go b/vendor/github.com/cznic/mathutil/test_deps.go deleted file mode 100644 index 40054dc..0000000 --- a/vendor/github.com/cznic/mathutil/test_deps.go +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright (c) 2014 The mathutil Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package mathutil - -// Pull test dependencies too. -// Enables easy 'go test X' after 'go get X' -import ( -// nothing yet -) diff --git a/vendor/github.com/go-sql-driver/mysql/AUTHORS b/vendor/github.com/go-sql-driver/mysql/AUTHORS deleted file mode 100644 index 692c186..0000000 --- a/vendor/github.com/go-sql-driver/mysql/AUTHORS +++ /dev/null @@ -1,56 +0,0 @@ -# This is the official list of Go-MySQL-Driver authors for copyright purposes. - -# If you are submitting a patch, please add your name or the name of the -# organization which holds the copyright to this list in alphabetical order. - -# Names should be added to this file as -# Name -# The email address is not required for organizations. -# Please keep the list sorted. - - -# Individual Persons - -Aaron Hopkins -Arne Hormann -Carlos Nieto -Chris Moos -Daniel Nichter -Daniël van Eeden -DisposaBoy -Frederick Mayle -Gustavo Kristic -Hanno Braun -Henri Yandell -Hirotaka Yamamoto -INADA Naoki -James Harr -Jian Zhen -Joshua Prunier -Julien Lefevre -Julien Schmidt -Kamil Dziedzic -Kevin Malachowski -Lennart Rudolph -Leonardo YongUk Kim -Luca Looz -Lucas Liu -Luke Scott -Michael Woolnough -Nicola Peduzzi -Olivier Mengué -Paul Bonser -Runrioter Wung -Soroush Pour -Stan Putrya -Stanley Gunawan -Xiangyu Hu -Xiaobing Jiang -Xiuming Chen -Zhenye Xie - -# Organizations - -Barracuda Networks, Inc. -Google Inc. -Stripe Inc. diff --git a/vendor/github.com/go-sql-driver/mysql/LICENSE b/vendor/github.com/go-sql-driver/mysql/LICENSE deleted file mode 100644 index 14e2f77..0000000 --- a/vendor/github.com/go-sql-driver/mysql/LICENSE +++ /dev/null @@ -1,373 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -1. Definitions --------------- - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions --------------------------------- - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities -------------------- - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation ---------------------------------------------------- - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination --------------- - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -************************************************************************ -* * -* 6. Disclaimer of Warranty * -* ------------------------- * -* * -* Covered Software is provided under this License on an "as is" * -* basis, without warranty of any kind, either expressed, implied, or * -* statutory, including, without limitation, warranties that the * -* Covered Software is free of defects, merchantable, fit for a * -* particular purpose or non-infringing. The entire risk as to the * -* quality and performance of the Covered Software is with You. * -* Should any Covered Software prove defective in any respect, You * -* (not any Contributor) assume the cost of any necessary servicing, * -* repair, or correction. This disclaimer of warranty constitutes an * -* essential part of this License. No use of any Covered Software is * -* authorized under this License except under this disclaimer. * -* * -************************************************************************ - -************************************************************************ -* * -* 7. Limitation of Liability * -* -------------------------- * -* * -* Under no circumstances and under no legal theory, whether tort * -* (including negligence), contract, or otherwise, shall any * -* Contributor, or anyone who distributes Covered Software as * -* permitted above, be liable to You for any direct, indirect, * -* special, incidental, or consequential damages of any character * -* including, without limitation, damages for lost profits, loss of * -* goodwill, work stoppage, computer failure or malfunction, or any * -* and all other commercial damages or losses, even if such party * -* shall have been informed of the possibility of such damages. This * -* limitation of liability shall not apply to liability for death or * -* personal injury resulting from such party's negligence to the * -* extent applicable law prohibits such limitation. Some * -* jurisdictions do not allow the exclusion or limitation of * -* incidental or consequential damages, so this exclusion and * -* limitation may not apply to You. * -* * -************************************************************************ - -8. Litigation -------------- - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous ----------------- - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License ---------------------------- - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice -------------------------------------------- - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------- - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. diff --git a/vendor/github.com/go-sql-driver/mysql/appengine.go b/vendor/github.com/go-sql-driver/mysql/appengine.go deleted file mode 100644 index 565614e..0000000 --- a/vendor/github.com/go-sql-driver/mysql/appengine.go +++ /dev/null @@ -1,19 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// +build appengine - -package mysql - -import ( - "appengine/cloudsql" -) - -func init() { - RegisterDial("cloudsql", cloudsql.Dial) -} diff --git a/vendor/github.com/go-sql-driver/mysql/buffer.go b/vendor/github.com/go-sql-driver/mysql/buffer.go deleted file mode 100644 index 2001fea..0000000 --- a/vendor/github.com/go-sql-driver/mysql/buffer.go +++ /dev/null @@ -1,147 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package mysql - -import ( - "io" - "net" - "time" -) - -const defaultBufSize = 4096 - -// A buffer which is used for both reading and writing. -// This is possible since communication on each connection is synchronous. -// In other words, we can't write and read simultaneously on the same connection. -// The buffer is similar to bufio.Reader / Writer but zero-copy-ish -// Also highly optimized for this particular use case. -type buffer struct { - buf []byte - nc net.Conn - idx int - length int - timeout time.Duration -} - -func newBuffer(nc net.Conn) buffer { - var b [defaultBufSize]byte - return buffer{ - buf: b[:], - nc: nc, - } -} - -// fill reads into the buffer until at least _need_ bytes are in it -func (b *buffer) fill(need int) error { - n := b.length - - // move existing data to the beginning - if n > 0 && b.idx > 0 { - copy(b.buf[0:n], b.buf[b.idx:]) - } - - // grow buffer if necessary - // TODO: let the buffer shrink again at some point - // Maybe keep the org buf slice and swap back? - if need > len(b.buf) { - // Round up to the next multiple of the default size - newBuf := make([]byte, ((need/defaultBufSize)+1)*defaultBufSize) - copy(newBuf, b.buf) - b.buf = newBuf - } - - b.idx = 0 - - for { - if b.timeout > 0 { - if err := b.nc.SetReadDeadline(time.Now().Add(b.timeout)); err != nil { - return err - } - } - - nn, err := b.nc.Read(b.buf[n:]) - n += nn - - switch err { - case nil: - if n < need { - continue - } - b.length = n - return nil - - case io.EOF: - if n >= need { - b.length = n - return nil - } - return io.ErrUnexpectedEOF - - default: - return err - } - } -} - -// returns next N bytes from buffer. -// The returned slice is only guaranteed to be valid until the next read -func (b *buffer) readNext(need int) ([]byte, error) { - if b.length < need { - // refill - if err := b.fill(need); err != nil { - return nil, err - } - } - - offset := b.idx - b.idx += need - b.length -= need - return b.buf[offset:b.idx], nil -} - -// returns a buffer with the requested size. -// If possible, a slice from the existing buffer is returned. -// Otherwise a bigger buffer is made. -// Only one buffer (total) can be used at a time. -func (b *buffer) takeBuffer(length int) []byte { - if b.length > 0 { - return nil - } - - // test (cheap) general case first - if length <= defaultBufSize || length <= cap(b.buf) { - return b.buf[:length] - } - - if length < maxPacketSize { - b.buf = make([]byte, length) - return b.buf - } - return make([]byte, length) -} - -// shortcut which can be used if the requested buffer is guaranteed to be -// smaller than defaultBufSize -// Only one buffer (total) can be used at a time. -func (b *buffer) takeSmallBuffer(length int) []byte { - if b.length == 0 { - return b.buf[:length] - } - return nil -} - -// takeCompleteBuffer returns the complete existing buffer. -// This can be used if the necessary buffer size is unknown. -// Only one buffer (total) can be used at a time. -func (b *buffer) takeCompleteBuffer() []byte { - if b.length == 0 { - return b.buf - } - return nil -} diff --git a/vendor/github.com/go-sql-driver/mysql/collations.go b/vendor/github.com/go-sql-driver/mysql/collations.go deleted file mode 100644 index 82079cf..0000000 --- a/vendor/github.com/go-sql-driver/mysql/collations.go +++ /dev/null @@ -1,250 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2014 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package mysql - -const defaultCollation = "utf8_general_ci" - -// A list of available collations mapped to the internal ID. -// To update this map use the following MySQL query: -// SELECT COLLATION_NAME, ID FROM information_schema.COLLATIONS -var collations = map[string]byte{ - "big5_chinese_ci": 1, - "latin2_czech_cs": 2, - "dec8_swedish_ci": 3, - "cp850_general_ci": 4, - "latin1_german1_ci": 5, - "hp8_english_ci": 6, - "koi8r_general_ci": 7, - "latin1_swedish_ci": 8, - "latin2_general_ci": 9, - "swe7_swedish_ci": 10, - "ascii_general_ci": 11, - "ujis_japanese_ci": 12, - "sjis_japanese_ci": 13, - "cp1251_bulgarian_ci": 14, - "latin1_danish_ci": 15, - "hebrew_general_ci": 16, - "tis620_thai_ci": 18, - "euckr_korean_ci": 19, - "latin7_estonian_cs": 20, - "latin2_hungarian_ci": 21, - "koi8u_general_ci": 22, - "cp1251_ukrainian_ci": 23, - "gb2312_chinese_ci": 24, - "greek_general_ci": 25, - "cp1250_general_ci": 26, - "latin2_croatian_ci": 27, - "gbk_chinese_ci": 28, - "cp1257_lithuanian_ci": 29, - "latin5_turkish_ci": 30, - "latin1_german2_ci": 31, - "armscii8_general_ci": 32, - "utf8_general_ci": 33, - "cp1250_czech_cs": 34, - "ucs2_general_ci": 35, - "cp866_general_ci": 36, - "keybcs2_general_ci": 37, - "macce_general_ci": 38, - "macroman_general_ci": 39, - "cp852_general_ci": 40, - "latin7_general_ci": 41, - "latin7_general_cs": 42, - "macce_bin": 43, - "cp1250_croatian_ci": 44, - "utf8mb4_general_ci": 45, - "utf8mb4_bin": 46, - "latin1_bin": 47, - "latin1_general_ci": 48, - "latin1_general_cs": 49, - "cp1251_bin": 50, - "cp1251_general_ci": 51, - "cp1251_general_cs": 52, - "macroman_bin": 53, - "utf16_general_ci": 54, - "utf16_bin": 55, - "utf16le_general_ci": 56, - "cp1256_general_ci": 57, - "cp1257_bin": 58, - "cp1257_general_ci": 59, - "utf32_general_ci": 60, - "utf32_bin": 61, - "utf16le_bin": 62, - "binary": 63, - "armscii8_bin": 64, - "ascii_bin": 65, - "cp1250_bin": 66, - "cp1256_bin": 67, - "cp866_bin": 68, - "dec8_bin": 69, - "greek_bin": 70, - "hebrew_bin": 71, - "hp8_bin": 72, - "keybcs2_bin": 73, - "koi8r_bin": 74, - "koi8u_bin": 75, - "latin2_bin": 77, - "latin5_bin": 78, - "latin7_bin": 79, - "cp850_bin": 80, - "cp852_bin": 81, - "swe7_bin": 82, - "utf8_bin": 83, - "big5_bin": 84, - "euckr_bin": 85, - "gb2312_bin": 86, - "gbk_bin": 87, - "sjis_bin": 88, - "tis620_bin": 89, - "ucs2_bin": 90, - "ujis_bin": 91, - "geostd8_general_ci": 92, - "geostd8_bin": 93, - "latin1_spanish_ci": 94, - "cp932_japanese_ci": 95, - "cp932_bin": 96, - "eucjpms_japanese_ci": 97, - "eucjpms_bin": 98, - "cp1250_polish_ci": 99, - "utf16_unicode_ci": 101, - "utf16_icelandic_ci": 102, - "utf16_latvian_ci": 103, - "utf16_romanian_ci": 104, - "utf16_slovenian_ci": 105, - "utf16_polish_ci": 106, - "utf16_estonian_ci": 107, - "utf16_spanish_ci": 108, - "utf16_swedish_ci": 109, - "utf16_turkish_ci": 110, - "utf16_czech_ci": 111, - "utf16_danish_ci": 112, - "utf16_lithuanian_ci": 113, - "utf16_slovak_ci": 114, - "utf16_spanish2_ci": 115, - "utf16_roman_ci": 116, - "utf16_persian_ci": 117, - "utf16_esperanto_ci": 118, - "utf16_hungarian_ci": 119, - "utf16_sinhala_ci": 120, - "utf16_german2_ci": 121, - "utf16_croatian_ci": 122, - "utf16_unicode_520_ci": 123, - "utf16_vietnamese_ci": 124, - "ucs2_unicode_ci": 128, - "ucs2_icelandic_ci": 129, - "ucs2_latvian_ci": 130, - "ucs2_romanian_ci": 131, - "ucs2_slovenian_ci": 132, - "ucs2_polish_ci": 133, - "ucs2_estonian_ci": 134, - "ucs2_spanish_ci": 135, - "ucs2_swedish_ci": 136, - "ucs2_turkish_ci": 137, - "ucs2_czech_ci": 138, - "ucs2_danish_ci": 139, - "ucs2_lithuanian_ci": 140, - "ucs2_slovak_ci": 141, - "ucs2_spanish2_ci": 142, - "ucs2_roman_ci": 143, - "ucs2_persian_ci": 144, - "ucs2_esperanto_ci": 145, - "ucs2_hungarian_ci": 146, - "ucs2_sinhala_ci": 147, - "ucs2_german2_ci": 148, - "ucs2_croatian_ci": 149, - "ucs2_unicode_520_ci": 150, - "ucs2_vietnamese_ci": 151, - "ucs2_general_mysql500_ci": 159, - "utf32_unicode_ci": 160, - "utf32_icelandic_ci": 161, - "utf32_latvian_ci": 162, - "utf32_romanian_ci": 163, - "utf32_slovenian_ci": 164, - "utf32_polish_ci": 165, - "utf32_estonian_ci": 166, - "utf32_spanish_ci": 167, - "utf32_swedish_ci": 168, - "utf32_turkish_ci": 169, - "utf32_czech_ci": 170, - "utf32_danish_ci": 171, - "utf32_lithuanian_ci": 172, - "utf32_slovak_ci": 173, - "utf32_spanish2_ci": 174, - "utf32_roman_ci": 175, - "utf32_persian_ci": 176, - "utf32_esperanto_ci": 177, - "utf32_hungarian_ci": 178, - "utf32_sinhala_ci": 179, - "utf32_german2_ci": 180, - "utf32_croatian_ci": 181, - "utf32_unicode_520_ci": 182, - "utf32_vietnamese_ci": 183, - "utf8_unicode_ci": 192, - "utf8_icelandic_ci": 193, - "utf8_latvian_ci": 194, - "utf8_romanian_ci": 195, - "utf8_slovenian_ci": 196, - "utf8_polish_ci": 197, - "utf8_estonian_ci": 198, - "utf8_spanish_ci": 199, - "utf8_swedish_ci": 200, - "utf8_turkish_ci": 201, - "utf8_czech_ci": 202, - "utf8_danish_ci": 203, - "utf8_lithuanian_ci": 204, - "utf8_slovak_ci": 205, - "utf8_spanish2_ci": 206, - "utf8_roman_ci": 207, - "utf8_persian_ci": 208, - "utf8_esperanto_ci": 209, - "utf8_hungarian_ci": 210, - "utf8_sinhala_ci": 211, - "utf8_german2_ci": 212, - "utf8_croatian_ci": 213, - "utf8_unicode_520_ci": 214, - "utf8_vietnamese_ci": 215, - "utf8_general_mysql500_ci": 223, - "utf8mb4_unicode_ci": 224, - "utf8mb4_icelandic_ci": 225, - "utf8mb4_latvian_ci": 226, - "utf8mb4_romanian_ci": 227, - "utf8mb4_slovenian_ci": 228, - "utf8mb4_polish_ci": 229, - "utf8mb4_estonian_ci": 230, - "utf8mb4_spanish_ci": 231, - "utf8mb4_swedish_ci": 232, - "utf8mb4_turkish_ci": 233, - "utf8mb4_czech_ci": 234, - "utf8mb4_danish_ci": 235, - "utf8mb4_lithuanian_ci": 236, - "utf8mb4_slovak_ci": 237, - "utf8mb4_spanish2_ci": 238, - "utf8mb4_roman_ci": 239, - "utf8mb4_persian_ci": 240, - "utf8mb4_esperanto_ci": 241, - "utf8mb4_hungarian_ci": 242, - "utf8mb4_sinhala_ci": 243, - "utf8mb4_german2_ci": 244, - "utf8mb4_croatian_ci": 245, - "utf8mb4_unicode_520_ci": 246, - "utf8mb4_vietnamese_ci": 247, -} - -// A blacklist of collations which is unsafe to interpolate parameters. -// These multibyte encodings may contains 0x5c (`\`) in their trailing bytes. -var unsafeCollations = map[string]bool{ - "big5_chinese_ci": true, - "sjis_japanese_ci": true, - "gbk_chinese_ci": true, - "big5_bin": true, - "gb2312_bin": true, - "gbk_bin": true, - "sjis_bin": true, - "cp932_japanese_ci": true, - "cp932_bin": true, -} diff --git a/vendor/github.com/go-sql-driver/mysql/connection.go b/vendor/github.com/go-sql-driver/mysql/connection.go deleted file mode 100644 index d82c728..0000000 --- a/vendor/github.com/go-sql-driver/mysql/connection.go +++ /dev/null @@ -1,377 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package mysql - -import ( - "database/sql/driver" - "net" - "strconv" - "strings" - "time" -) - -type mysqlConn struct { - buf buffer - netConn net.Conn - affectedRows uint64 - insertId uint64 - cfg *Config - maxAllowedPacket int - maxWriteSize int - writeTimeout time.Duration - flags clientFlag - status statusFlag - sequence uint8 - parseTime bool - strict bool -} - -// Handles parameters set in DSN after the connection is established -func (mc *mysqlConn) handleParams() (err error) { - for param, val := range mc.cfg.Params { - switch param { - // Charset - case "charset": - charsets := strings.Split(val, ",") - for i := range charsets { - // ignore errors here - a charset may not exist - err = mc.exec("SET NAMES " + charsets[i]) - if err == nil { - break - } - } - if err != nil { - return - } - - // System Vars - default: - err = mc.exec("SET " + param + "=" + val + "") - if err != nil { - return - } - } - } - - return -} - -func (mc *mysqlConn) Begin() (driver.Tx, error) { - if mc.netConn == nil { - errLog.Print(ErrInvalidConn) - return nil, driver.ErrBadConn - } - err := mc.exec("START TRANSACTION") - if err == nil { - return &mysqlTx{mc}, err - } - - return nil, err -} - -func (mc *mysqlConn) Close() (err error) { - // Makes Close idempotent - if mc.netConn != nil { - err = mc.writeCommandPacket(comQuit) - } - - mc.cleanup() - - return -} - -// Closes the network connection and unsets internal variables. Do not call this -// function after successfully authentication, call Close instead. This function -// is called before auth or on auth failure because MySQL will have already -// closed the network connection. -func (mc *mysqlConn) cleanup() { - // Makes cleanup idempotent - if mc.netConn != nil { - if err := mc.netConn.Close(); err != nil { - errLog.Print(err) - } - mc.netConn = nil - } - mc.cfg = nil - mc.buf.nc = nil -} - -func (mc *mysqlConn) Prepare(query string) (driver.Stmt, error) { - if mc.netConn == nil { - errLog.Print(ErrInvalidConn) - return nil, driver.ErrBadConn - } - // Send command - err := mc.writeCommandPacketStr(comStmtPrepare, query) - if err != nil { - return nil, err - } - - stmt := &mysqlStmt{ - mc: mc, - } - - // Read Result - columnCount, err := stmt.readPrepareResultPacket() - if err == nil { - if stmt.paramCount > 0 { - if err = mc.readUntilEOF(); err != nil { - return nil, err - } - } - - if columnCount > 0 { - err = mc.readUntilEOF() - } - } - - return stmt, err -} - -func (mc *mysqlConn) interpolateParams(query string, args []driver.Value) (string, error) { - // Number of ? should be same to len(args) - if strings.Count(query, "?") != len(args) { - return "", driver.ErrSkip - } - - buf := mc.buf.takeCompleteBuffer() - if buf == nil { - // can not take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) - return "", driver.ErrBadConn - } - buf = buf[:0] - argPos := 0 - - for i := 0; i < len(query); i++ { - q := strings.IndexByte(query[i:], '?') - if q == -1 { - buf = append(buf, query[i:]...) - break - } - buf = append(buf, query[i:i+q]...) - i += q - - arg := args[argPos] - argPos++ - - if arg == nil { - buf = append(buf, "NULL"...) - continue - } - - switch v := arg.(type) { - case int64: - buf = strconv.AppendInt(buf, v, 10) - case float64: - buf = strconv.AppendFloat(buf, v, 'g', -1, 64) - case bool: - if v { - buf = append(buf, '1') - } else { - buf = append(buf, '0') - } - case time.Time: - if v.IsZero() { - buf = append(buf, "'0000-00-00'"...) - } else { - v := v.In(mc.cfg.Loc) - v = v.Add(time.Nanosecond * 500) // To round under microsecond - year := v.Year() - year100 := year / 100 - year1 := year % 100 - month := v.Month() - day := v.Day() - hour := v.Hour() - minute := v.Minute() - second := v.Second() - micro := v.Nanosecond() / 1000 - - buf = append(buf, []byte{ - '\'', - digits10[year100], digits01[year100], - digits10[year1], digits01[year1], - '-', - digits10[month], digits01[month], - '-', - digits10[day], digits01[day], - ' ', - digits10[hour], digits01[hour], - ':', - digits10[minute], digits01[minute], - ':', - digits10[second], digits01[second], - }...) - - if micro != 0 { - micro10000 := micro / 10000 - micro100 := micro / 100 % 100 - micro1 := micro % 100 - buf = append(buf, []byte{ - '.', - digits10[micro10000], digits01[micro10000], - digits10[micro100], digits01[micro100], - digits10[micro1], digits01[micro1], - }...) - } - buf = append(buf, '\'') - } - case []byte: - if v == nil { - buf = append(buf, "NULL"...) - } else { - buf = append(buf, "_binary'"...) - if mc.status&statusNoBackslashEscapes == 0 { - buf = escapeBytesBackslash(buf, v) - } else { - buf = escapeBytesQuotes(buf, v) - } - buf = append(buf, '\'') - } - case string: - buf = append(buf, '\'') - if mc.status&statusNoBackslashEscapes == 0 { - buf = escapeStringBackslash(buf, v) - } else { - buf = escapeStringQuotes(buf, v) - } - buf = append(buf, '\'') - default: - return "", driver.ErrSkip - } - - if len(buf)+4 > mc.maxAllowedPacket { - return "", driver.ErrSkip - } - } - if argPos != len(args) { - return "", driver.ErrSkip - } - return string(buf), nil -} - -func (mc *mysqlConn) Exec(query string, args []driver.Value) (driver.Result, error) { - if mc.netConn == nil { - errLog.Print(ErrInvalidConn) - return nil, driver.ErrBadConn - } - if len(args) != 0 { - if !mc.cfg.InterpolateParams { - return nil, driver.ErrSkip - } - // try to interpolate the parameters to save extra roundtrips for preparing and closing a statement - prepared, err := mc.interpolateParams(query, args) - if err != nil { - return nil, err - } - query = prepared - args = nil - } - mc.affectedRows = 0 - mc.insertId = 0 - - err := mc.exec(query) - if err == nil { - return &mysqlResult{ - affectedRows: int64(mc.affectedRows), - insertId: int64(mc.insertId), - }, err - } - return nil, err -} - -// Internal function to execute commands -func (mc *mysqlConn) exec(query string) error { - // Send command - err := mc.writeCommandPacketStr(comQuery, query) - if err != nil { - return err - } - - // Read Result - resLen, err := mc.readResultSetHeaderPacket() - if err == nil && resLen > 0 { - if err = mc.readUntilEOF(); err != nil { - return err - } - - err = mc.readUntilEOF() - } - - return err -} - -func (mc *mysqlConn) Query(query string, args []driver.Value) (driver.Rows, error) { - if mc.netConn == nil { - errLog.Print(ErrInvalidConn) - return nil, driver.ErrBadConn - } - if len(args) != 0 { - if !mc.cfg.InterpolateParams { - return nil, driver.ErrSkip - } - // try client-side prepare to reduce roundtrip - prepared, err := mc.interpolateParams(query, args) - if err != nil { - return nil, err - } - query = prepared - args = nil - } - // Send command - err := mc.writeCommandPacketStr(comQuery, query) - if err == nil { - // Read Result - var resLen int - resLen, err = mc.readResultSetHeaderPacket() - if err == nil { - rows := new(textRows) - rows.mc = mc - - if resLen == 0 { - // no columns, no more data - return emptyRows{}, nil - } - // Columns - rows.columns, err = mc.readColumns(resLen) - return rows, err - } - } - return nil, err -} - -// Gets the value of the given MySQL System Variable -// The returned byte slice is only valid until the next read -func (mc *mysqlConn) getSystemVar(name string) ([]byte, error) { - // Send command - if err := mc.writeCommandPacketStr(comQuery, "SELECT @@"+name); err != nil { - return nil, err - } - - // Read Result - resLen, err := mc.readResultSetHeaderPacket() - if err == nil { - rows := new(textRows) - rows.mc = mc - rows.columns = []mysqlField{{fieldType: fieldTypeVarChar}} - - if resLen > 0 { - // Columns - if err := mc.readUntilEOF(); err != nil { - return nil, err - } - } - - dest := make([]driver.Value, resLen) - if err = rows.readRow(dest); err == nil { - return dest[0].([]byte), mc.readUntilEOF() - } - } - return nil, err -} diff --git a/vendor/github.com/go-sql-driver/mysql/const.go b/vendor/github.com/go-sql-driver/mysql/const.go deleted file mode 100644 index 88cfff3..0000000 --- a/vendor/github.com/go-sql-driver/mysql/const.go +++ /dev/null @@ -1,163 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package mysql - -const ( - minProtocolVersion byte = 10 - maxPacketSize = 1<<24 - 1 - timeFormat = "2006-01-02 15:04:05.999999" -) - -// MySQL constants documentation: -// http://dev.mysql.com/doc/internals/en/client-server-protocol.html - -const ( - iOK byte = 0x00 - iLocalInFile byte = 0xfb - iEOF byte = 0xfe - iERR byte = 0xff -) - -// https://dev.mysql.com/doc/internals/en/capability-flags.html#packet-Protocol::CapabilityFlags -type clientFlag uint32 - -const ( - clientLongPassword clientFlag = 1 << iota - clientFoundRows - clientLongFlag - clientConnectWithDB - clientNoSchema - clientCompress - clientODBC - clientLocalFiles - clientIgnoreSpace - clientProtocol41 - clientInteractive - clientSSL - clientIgnoreSIGPIPE - clientTransactions - clientReserved - clientSecureConn - clientMultiStatements - clientMultiResults - clientPSMultiResults - clientPluginAuth - clientConnectAttrs - clientPluginAuthLenEncClientData - clientCanHandleExpiredPasswords - clientSessionTrack - clientDeprecateEOF -) - -const ( - comQuit byte = iota + 1 - comInitDB - comQuery - comFieldList - comCreateDB - comDropDB - comRefresh - comShutdown - comStatistics - comProcessInfo - comConnect - comProcessKill - comDebug - comPing - comTime - comDelayedInsert - comChangeUser - comBinlogDump - comTableDump - comConnectOut - comRegisterSlave - comStmtPrepare - comStmtExecute - comStmtSendLongData - comStmtClose - comStmtReset - comSetOption - comStmtFetch -) - -// https://dev.mysql.com/doc/internals/en/com-query-response.html#packet-Protocol::ColumnType -const ( - fieldTypeDecimal byte = iota - fieldTypeTiny - fieldTypeShort - fieldTypeLong - fieldTypeFloat - fieldTypeDouble - fieldTypeNULL - fieldTypeTimestamp - fieldTypeLongLong - fieldTypeInt24 - fieldTypeDate - fieldTypeTime - fieldTypeDateTime - fieldTypeYear - fieldTypeNewDate - fieldTypeVarChar - fieldTypeBit -) -const ( - fieldTypeJSON byte = iota + 0xf5 - fieldTypeNewDecimal - fieldTypeEnum - fieldTypeSet - fieldTypeTinyBLOB - fieldTypeMediumBLOB - fieldTypeLongBLOB - fieldTypeBLOB - fieldTypeVarString - fieldTypeString - fieldTypeGeometry -) - -type fieldFlag uint16 - -const ( - flagNotNULL fieldFlag = 1 << iota - flagPriKey - flagUniqueKey - flagMultipleKey - flagBLOB - flagUnsigned - flagZeroFill - flagBinary - flagEnum - flagAutoIncrement - flagTimestamp - flagSet - flagUnknown1 - flagUnknown2 - flagUnknown3 - flagUnknown4 -) - -// http://dev.mysql.com/doc/internals/en/status-flags.html -type statusFlag uint16 - -const ( - statusInTrans statusFlag = 1 << iota - statusInAutocommit - statusReserved // Not in documentation - statusMoreResultsExists - statusNoGoodIndexUsed - statusNoIndexUsed - statusCursorExists - statusLastRowSent - statusDbDropped - statusNoBackslashEscapes - statusMetadataChanged - statusQueryWasSlow - statusPsOutParams - statusInTransReadonly - statusSessionStateChanged -) diff --git a/vendor/github.com/go-sql-driver/mysql/driver.go b/vendor/github.com/go-sql-driver/mysql/driver.go deleted file mode 100644 index 0022d1f..0000000 --- a/vendor/github.com/go-sql-driver/mysql/driver.go +++ /dev/null @@ -1,183 +0,0 @@ -// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// Package mysql provides a MySQL driver for Go's database/sql package -// -// The driver should be used via the database/sql package: -// -// import "database/sql" -// import _ "github.com/go-sql-driver/mysql" -// -// db, err := sql.Open("mysql", "user:password@/dbname") -// -// See https://github.com/go-sql-driver/mysql#usage for details -package mysql - -import ( - "database/sql" - "database/sql/driver" - "net" -) - -// MySQLDriver is exported to make the driver directly accessible. -// In general the driver is used via the database/sql package. -type MySQLDriver struct{} - -// DialFunc is a function which can be used to establish the network connection. -// Custom dial functions must be registered with RegisterDial -type DialFunc func(addr string) (net.Conn, error) - -var dials map[string]DialFunc - -// RegisterDial registers a custom dial function. It can then be used by the -// network address mynet(addr), where mynet is the registered new network. -// addr is passed as a parameter to the dial function. -func RegisterDial(net string, dial DialFunc) { - if dials == nil { - dials = make(map[string]DialFunc) - } - dials[net] = dial -} - -// Open new Connection. -// See https://github.com/go-sql-driver/mysql#dsn-data-source-name for how -// the DSN string is formated -func (d MySQLDriver) Open(dsn string) (driver.Conn, error) { - var err error - - // New mysqlConn - mc := &mysqlConn{ - maxAllowedPacket: maxPacketSize, - maxWriteSize: maxPacketSize - 1, - } - mc.cfg, err = ParseDSN(dsn) - if err != nil { - return nil, err - } - mc.parseTime = mc.cfg.ParseTime - mc.strict = mc.cfg.Strict - - // Connect to Server - if dial, ok := dials[mc.cfg.Net]; ok { - mc.netConn, err = dial(mc.cfg.Addr) - } else { - nd := net.Dialer{Timeout: mc.cfg.Timeout} - mc.netConn, err = nd.Dial(mc.cfg.Net, mc.cfg.Addr) - } - if err != nil { - return nil, err - } - - // Enable TCP Keepalives on TCP connections - if tc, ok := mc.netConn.(*net.TCPConn); ok { - if err := tc.SetKeepAlive(true); err != nil { - // Don't send COM_QUIT before handshake. - mc.netConn.Close() - mc.netConn = nil - return nil, err - } - } - - mc.buf = newBuffer(mc.netConn) - - // Set I/O timeouts - mc.buf.timeout = mc.cfg.ReadTimeout - mc.writeTimeout = mc.cfg.WriteTimeout - - // Reading Handshake Initialization Packet - cipher, err := mc.readInitPacket() - if err != nil { - mc.cleanup() - return nil, err - } - - // Send Client Authentication Packet - if err = mc.writeAuthPacket(cipher); err != nil { - mc.cleanup() - return nil, err - } - - // Handle response to auth packet, switch methods if possible - if err = handleAuthResult(mc, cipher); err != nil { - // Authentication failed and MySQL has already closed the connection - // (https://dev.mysql.com/doc/internals/en/authentication-fails.html). - // Do not send COM_QUIT, just cleanup and return the error. - mc.cleanup() - return nil, err - } - - if mc.cfg.MaxAllowedPacket > 0 { - mc.maxAllowedPacket = mc.cfg.MaxAllowedPacket - } else { - // Get max allowed packet size - maxap, err := mc.getSystemVar("max_allowed_packet") - if err != nil { - mc.Close() - return nil, err - } - mc.maxAllowedPacket = stringToInt(maxap) - 1 - } - if mc.maxAllowedPacket < maxPacketSize { - mc.maxWriteSize = mc.maxAllowedPacket - } - - // Handle DSN Params - err = mc.handleParams() - if err != nil { - mc.Close() - return nil, err - } - - return mc, nil -} - -func handleAuthResult(mc *mysqlConn, oldCipher []byte) error { - // Read Result Packet - cipher, err := mc.readResultOK() - if err == nil { - return nil // auth successful - } - - if mc.cfg == nil { - return err // auth failed and retry not possible - } - - // Retry auth if configured to do so. - if mc.cfg.AllowOldPasswords && err == ErrOldPassword { - // Retry with old authentication method. Note: there are edge cases - // where this should work but doesn't; this is currently "wontfix": - // https://github.com/go-sql-driver/mysql/issues/184 - - // If CLIENT_PLUGIN_AUTH capability is not supported, no new cipher is - // sent and we have to keep using the cipher sent in the init packet. - if cipher == nil { - cipher = oldCipher - } - - if err = mc.writeOldAuthPacket(cipher); err != nil { - return err - } - _, err = mc.readResultOK() - } else if mc.cfg.AllowCleartextPasswords && err == ErrCleartextPassword { - // Retry with clear text password for - // http://dev.mysql.com/doc/refman/5.7/en/cleartext-authentication-plugin.html - // http://dev.mysql.com/doc/refman/5.7/en/pam-authentication-plugin.html - if err = mc.writeClearAuthPacket(); err != nil { - return err - } - _, err = mc.readResultOK() - } else if mc.cfg.AllowNativePasswords && err == ErrNativePassword { - if err = mc.writeNativeAuthPacket(cipher); err != nil { - return err - } - _, err = mc.readResultOK() - } - return err -} - -func init() { - sql.Register("mysql", &MySQLDriver{}) -} diff --git a/vendor/github.com/go-sql-driver/mysql/dsn.go b/vendor/github.com/go-sql-driver/mysql/dsn.go deleted file mode 100644 index ac00dce..0000000 --- a/vendor/github.com/go-sql-driver/mysql/dsn.go +++ /dev/null @@ -1,548 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2016 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package mysql - -import ( - "bytes" - "crypto/tls" - "errors" - "fmt" - "net" - "net/url" - "strconv" - "strings" - "time" -) - -var ( - errInvalidDSNUnescaped = errors.New("invalid DSN: did you forget to escape a param value?") - errInvalidDSNAddr = errors.New("invalid DSN: network address not terminated (missing closing brace)") - errInvalidDSNNoSlash = errors.New("invalid DSN: missing the slash separating the database name") - errInvalidDSNUnsafeCollation = errors.New("invalid DSN: interpolateParams can not be used with unsafe collations") -) - -// Config is a configuration parsed from a DSN string -type Config struct { - User string // Username - Passwd string // Password (requires User) - Net string // Network type - Addr string // Network address (requires Net) - DBName string // Database name - Params map[string]string // Connection parameters - Collation string // Connection collation - Loc *time.Location // Location for time.Time values - MaxAllowedPacket int // Max packet size allowed - TLSConfig string // TLS configuration name - tls *tls.Config // TLS configuration - Timeout time.Duration // Dial timeout - ReadTimeout time.Duration // I/O read timeout - WriteTimeout time.Duration // I/O write timeout - - AllowAllFiles bool // Allow all files to be used with LOAD DATA LOCAL INFILE - AllowCleartextPasswords bool // Allows the cleartext client side plugin - AllowNativePasswords bool // Allows the native password authentication method - AllowOldPasswords bool // Allows the old insecure password method - ClientFoundRows bool // Return number of matching rows instead of rows changed - ColumnsWithAlias bool // Prepend table alias to column names - InterpolateParams bool // Interpolate placeholders into query string - MultiStatements bool // Allow multiple statements in one query - ParseTime bool // Parse time values to time.Time - Strict bool // Return warnings as errors -} - -// FormatDSN formats the given Config into a DSN string which can be passed to -// the driver. -func (cfg *Config) FormatDSN() string { - var buf bytes.Buffer - - // [username[:password]@] - if len(cfg.User) > 0 { - buf.WriteString(cfg.User) - if len(cfg.Passwd) > 0 { - buf.WriteByte(':') - buf.WriteString(cfg.Passwd) - } - buf.WriteByte('@') - } - - // [protocol[(address)]] - if len(cfg.Net) > 0 { - buf.WriteString(cfg.Net) - if len(cfg.Addr) > 0 { - buf.WriteByte('(') - buf.WriteString(cfg.Addr) - buf.WriteByte(')') - } - } - - // /dbname - buf.WriteByte('/') - buf.WriteString(cfg.DBName) - - // [?param1=value1&...¶mN=valueN] - hasParam := false - - if cfg.AllowAllFiles { - hasParam = true - buf.WriteString("?allowAllFiles=true") - } - - if cfg.AllowCleartextPasswords { - if hasParam { - buf.WriteString("&allowCleartextPasswords=true") - } else { - hasParam = true - buf.WriteString("?allowCleartextPasswords=true") - } - } - - if cfg.AllowNativePasswords { - if hasParam { - buf.WriteString("&allowNativePasswords=true") - } else { - hasParam = true - buf.WriteString("?allowNativePasswords=true") - } - } - - if cfg.AllowOldPasswords { - if hasParam { - buf.WriteString("&allowOldPasswords=true") - } else { - hasParam = true - buf.WriteString("?allowOldPasswords=true") - } - } - - if cfg.ClientFoundRows { - if hasParam { - buf.WriteString("&clientFoundRows=true") - } else { - hasParam = true - buf.WriteString("?clientFoundRows=true") - } - } - - if col := cfg.Collation; col != defaultCollation && len(col) > 0 { - if hasParam { - buf.WriteString("&collation=") - } else { - hasParam = true - buf.WriteString("?collation=") - } - buf.WriteString(col) - } - - if cfg.ColumnsWithAlias { - if hasParam { - buf.WriteString("&columnsWithAlias=true") - } else { - hasParam = true - buf.WriteString("?columnsWithAlias=true") - } - } - - if cfg.InterpolateParams { - if hasParam { - buf.WriteString("&interpolateParams=true") - } else { - hasParam = true - buf.WriteString("?interpolateParams=true") - } - } - - if cfg.Loc != time.UTC && cfg.Loc != nil { - if hasParam { - buf.WriteString("&loc=") - } else { - hasParam = true - buf.WriteString("?loc=") - } - buf.WriteString(url.QueryEscape(cfg.Loc.String())) - } - - if cfg.MultiStatements { - if hasParam { - buf.WriteString("&multiStatements=true") - } else { - hasParam = true - buf.WriteString("?multiStatements=true") - } - } - - if cfg.ParseTime { - if hasParam { - buf.WriteString("&parseTime=true") - } else { - hasParam = true - buf.WriteString("?parseTime=true") - } - } - - if cfg.ReadTimeout > 0 { - if hasParam { - buf.WriteString("&readTimeout=") - } else { - hasParam = true - buf.WriteString("?readTimeout=") - } - buf.WriteString(cfg.ReadTimeout.String()) - } - - if cfg.Strict { - if hasParam { - buf.WriteString("&strict=true") - } else { - hasParam = true - buf.WriteString("?strict=true") - } - } - - if cfg.Timeout > 0 { - if hasParam { - buf.WriteString("&timeout=") - } else { - hasParam = true - buf.WriteString("?timeout=") - } - buf.WriteString(cfg.Timeout.String()) - } - - if len(cfg.TLSConfig) > 0 { - if hasParam { - buf.WriteString("&tls=") - } else { - hasParam = true - buf.WriteString("?tls=") - } - buf.WriteString(url.QueryEscape(cfg.TLSConfig)) - } - - if cfg.WriteTimeout > 0 { - if hasParam { - buf.WriteString("&writeTimeout=") - } else { - hasParam = true - buf.WriteString("?writeTimeout=") - } - buf.WriteString(cfg.WriteTimeout.String()) - } - - if cfg.MaxAllowedPacket > 0 { - if hasParam { - buf.WriteString("&maxAllowedPacket=") - } else { - hasParam = true - buf.WriteString("?maxAllowedPacket=") - } - buf.WriteString(strconv.Itoa(cfg.MaxAllowedPacket)) - - } - - // other params - if cfg.Params != nil { - for param, value := range cfg.Params { - if hasParam { - buf.WriteByte('&') - } else { - hasParam = true - buf.WriteByte('?') - } - - buf.WriteString(param) - buf.WriteByte('=') - buf.WriteString(url.QueryEscape(value)) - } - } - - return buf.String() -} - -// ParseDSN parses the DSN string to a Config -func ParseDSN(dsn string) (cfg *Config, err error) { - // New config with some default values - cfg = &Config{ - Loc: time.UTC, - Collation: defaultCollation, - } - - // [user[:password]@][net[(addr)]]/dbname[?param1=value1¶mN=valueN] - // Find the last '/' (since the password or the net addr might contain a '/') - foundSlash := false - for i := len(dsn) - 1; i >= 0; i-- { - if dsn[i] == '/' { - foundSlash = true - var j, k int - - // left part is empty if i <= 0 - if i > 0 { - // [username[:password]@][protocol[(address)]] - // Find the last '@' in dsn[:i] - for j = i; j >= 0; j-- { - if dsn[j] == '@' { - // username[:password] - // Find the first ':' in dsn[:j] - for k = 0; k < j; k++ { - if dsn[k] == ':' { - cfg.Passwd = dsn[k+1 : j] - break - } - } - cfg.User = dsn[:k] - - break - } - } - - // [protocol[(address)]] - // Find the first '(' in dsn[j+1:i] - for k = j + 1; k < i; k++ { - if dsn[k] == '(' { - // dsn[i-1] must be == ')' if an address is specified - if dsn[i-1] != ')' { - if strings.ContainsRune(dsn[k+1:i], ')') { - return nil, errInvalidDSNUnescaped - } - return nil, errInvalidDSNAddr - } - cfg.Addr = dsn[k+1 : i-1] - break - } - } - cfg.Net = dsn[j+1 : k] - } - - // dbname[?param1=value1&...¶mN=valueN] - // Find the first '?' in dsn[i+1:] - for j = i + 1; j < len(dsn); j++ { - if dsn[j] == '?' { - if err = parseDSNParams(cfg, dsn[j+1:]); err != nil { - return - } - break - } - } - cfg.DBName = dsn[i+1 : j] - - break - } - } - - if !foundSlash && len(dsn) > 0 { - return nil, errInvalidDSNNoSlash - } - - if cfg.InterpolateParams && unsafeCollations[cfg.Collation] { - return nil, errInvalidDSNUnsafeCollation - } - - // Set default network if empty - if cfg.Net == "" { - cfg.Net = "tcp" - } - - // Set default address if empty - if cfg.Addr == "" { - switch cfg.Net { - case "tcp": - cfg.Addr = "127.0.0.1:3306" - case "unix": - cfg.Addr = "/tmp/mysql.sock" - default: - return nil, errors.New("default addr for network '" + cfg.Net + "' unknown") - } - - } - - return -} - -// parseDSNParams parses the DSN "query string" -// Values must be url.QueryEscape'ed -func parseDSNParams(cfg *Config, params string) (err error) { - for _, v := range strings.Split(params, "&") { - param := strings.SplitN(v, "=", 2) - if len(param) != 2 { - continue - } - - // cfg params - switch value := param[1]; param[0] { - - // Disable INFILE whitelist / enable all files - case "allowAllFiles": - var isBool bool - cfg.AllowAllFiles, isBool = readBool(value) - if !isBool { - return errors.New("invalid bool value: " + value) - } - - // Use cleartext authentication mode (MySQL 5.5.10+) - case "allowCleartextPasswords": - var isBool bool - cfg.AllowCleartextPasswords, isBool = readBool(value) - if !isBool { - return errors.New("invalid bool value: " + value) - } - - // Use native password authentication - case "allowNativePasswords": - var isBool bool - cfg.AllowNativePasswords, isBool = readBool(value) - if !isBool { - return errors.New("invalid bool value: " + value) - } - - // Use old authentication mode (pre MySQL 4.1) - case "allowOldPasswords": - var isBool bool - cfg.AllowOldPasswords, isBool = readBool(value) - if !isBool { - return errors.New("invalid bool value: " + value) - } - - // Switch "rowsAffected" mode - case "clientFoundRows": - var isBool bool - cfg.ClientFoundRows, isBool = readBool(value) - if !isBool { - return errors.New("invalid bool value: " + value) - } - - // Collation - case "collation": - cfg.Collation = value - break - - case "columnsWithAlias": - var isBool bool - cfg.ColumnsWithAlias, isBool = readBool(value) - if !isBool { - return errors.New("invalid bool value: " + value) - } - - // Compression - case "compress": - return errors.New("compression not implemented yet") - - // Enable client side placeholder substitution - case "interpolateParams": - var isBool bool - cfg.InterpolateParams, isBool = readBool(value) - if !isBool { - return errors.New("invalid bool value: " + value) - } - - // Time Location - case "loc": - if value, err = url.QueryUnescape(value); err != nil { - return - } - cfg.Loc, err = time.LoadLocation(value) - if err != nil { - return - } - - // multiple statements in one query - case "multiStatements": - var isBool bool - cfg.MultiStatements, isBool = readBool(value) - if !isBool { - return errors.New("invalid bool value: " + value) - } - - // time.Time parsing - case "parseTime": - var isBool bool - cfg.ParseTime, isBool = readBool(value) - if !isBool { - return errors.New("invalid bool value: " + value) - } - - // I/O read Timeout - case "readTimeout": - cfg.ReadTimeout, err = time.ParseDuration(value) - if err != nil { - return - } - - // Strict mode - case "strict": - var isBool bool - cfg.Strict, isBool = readBool(value) - if !isBool { - return errors.New("invalid bool value: " + value) - } - - // Dial Timeout - case "timeout": - cfg.Timeout, err = time.ParseDuration(value) - if err != nil { - return - } - - // TLS-Encryption - case "tls": - boolValue, isBool := readBool(value) - if isBool { - if boolValue { - cfg.TLSConfig = "true" - cfg.tls = &tls.Config{} - } else { - cfg.TLSConfig = "false" - } - } else if vl := strings.ToLower(value); vl == "skip-verify" { - cfg.TLSConfig = vl - cfg.tls = &tls.Config{InsecureSkipVerify: true} - } else { - name, err := url.QueryUnescape(value) - if err != nil { - return fmt.Errorf("invalid value for TLS config name: %v", err) - } - - if tlsConfig, ok := tlsConfigRegister[name]; ok { - if len(tlsConfig.ServerName) == 0 && !tlsConfig.InsecureSkipVerify { - host, _, err := net.SplitHostPort(cfg.Addr) - if err == nil { - tlsConfig.ServerName = host - } - } - - cfg.TLSConfig = name - cfg.tls = tlsConfig - } else { - return errors.New("invalid value / unknown config name: " + name) - } - } - - // I/O write Timeout - case "writeTimeout": - cfg.WriteTimeout, err = time.ParseDuration(value) - if err != nil { - return - } - case "maxAllowedPacket": - cfg.MaxAllowedPacket, err = strconv.Atoi(value) - if err != nil { - return - } - default: - // lazy init - if cfg.Params == nil { - cfg.Params = make(map[string]string) - } - - if cfg.Params[param[0]], err = url.QueryUnescape(value); err != nil { - return - } - } - } - - return -} diff --git a/vendor/github.com/go-sql-driver/mysql/errors.go b/vendor/github.com/go-sql-driver/mysql/errors.go deleted file mode 100644 index 857854e..0000000 --- a/vendor/github.com/go-sql-driver/mysql/errors.go +++ /dev/null @@ -1,132 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package mysql - -import ( - "database/sql/driver" - "errors" - "fmt" - "io" - "log" - "os" -) - -// Various errors the driver might return. Can change between driver versions. -var ( - ErrInvalidConn = errors.New("invalid connection") - ErrMalformPkt = errors.New("malformed packet") - ErrNoTLS = errors.New("TLS requested but server does not support TLS") - ErrCleartextPassword = errors.New("this user requires clear text authentication. If you still want to use it, please add 'allowCleartextPasswords=1' to your DSN") - ErrNativePassword = errors.New("this user requires mysql native password authentication.") - ErrOldPassword = errors.New("this user requires old password authentication. If you still want to use it, please add 'allowOldPasswords=1' to your DSN. See also https://github.com/go-sql-driver/mysql/wiki/old_passwords") - ErrUnknownPlugin = errors.New("this authentication plugin is not supported") - ErrOldProtocol = errors.New("MySQL server does not support required protocol 41+") - ErrPktSync = errors.New("commands out of sync. You can't run this command now") - ErrPktSyncMul = errors.New("commands out of sync. Did you run multiple statements at once?") - ErrPktTooLarge = errors.New("packet for query is too large. Try adjusting the 'max_allowed_packet' variable on the server") - ErrBusyBuffer = errors.New("busy buffer") -) - -var errLog = Logger(log.New(os.Stderr, "[mysql] ", log.Ldate|log.Ltime|log.Lshortfile)) - -// Logger is used to log critical error messages. -type Logger interface { - Print(v ...interface{}) -} - -// SetLogger is used to set the logger for critical errors. -// The initial logger is os.Stderr. -func SetLogger(logger Logger) error { - if logger == nil { - return errors.New("logger is nil") - } - errLog = logger - return nil -} - -// MySQLError is an error type which represents a single MySQL error -type MySQLError struct { - Number uint16 - Message string -} - -func (me *MySQLError) Error() string { - return fmt.Sprintf("Error %d: %s", me.Number, me.Message) -} - -// MySQLWarnings is an error type which represents a group of one or more MySQL -// warnings -type MySQLWarnings []MySQLWarning - -func (mws MySQLWarnings) Error() string { - var msg string - for i, warning := range mws { - if i > 0 { - msg += "\r\n" - } - msg += fmt.Sprintf( - "%s %s: %s", - warning.Level, - warning.Code, - warning.Message, - ) - } - return msg -} - -// MySQLWarning is an error type which represents a single MySQL warning. -// Warnings are returned in groups only. See MySQLWarnings -type MySQLWarning struct { - Level string - Code string - Message string -} - -func (mc *mysqlConn) getWarnings() (err error) { - rows, err := mc.Query("SHOW WARNINGS", nil) - if err != nil { - return - } - - var warnings = MySQLWarnings{} - var values = make([]driver.Value, 3) - - for { - err = rows.Next(values) - switch err { - case nil: - warning := MySQLWarning{} - - if raw, ok := values[0].([]byte); ok { - warning.Level = string(raw) - } else { - warning.Level = fmt.Sprintf("%s", values[0]) - } - if raw, ok := values[1].([]byte); ok { - warning.Code = string(raw) - } else { - warning.Code = fmt.Sprintf("%s", values[1]) - } - if raw, ok := values[2].([]byte); ok { - warning.Message = string(raw) - } else { - warning.Message = fmt.Sprintf("%s", values[0]) - } - - warnings = append(warnings, warning) - - case io.EOF: - return warnings - - default: - rows.Close() - return - } - } -} diff --git a/vendor/github.com/go-sql-driver/mysql/infile.go b/vendor/github.com/go-sql-driver/mysql/infile.go deleted file mode 100644 index 547357c..0000000 --- a/vendor/github.com/go-sql-driver/mysql/infile.go +++ /dev/null @@ -1,182 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package mysql - -import ( - "fmt" - "io" - "os" - "strings" - "sync" -) - -var ( - fileRegister map[string]bool - fileRegisterLock sync.RWMutex - readerRegister map[string]func() io.Reader - readerRegisterLock sync.RWMutex -) - -// RegisterLocalFile adds the given file to the file whitelist, -// so that it can be used by "LOAD DATA LOCAL INFILE ". -// Alternatively you can allow the use of all local files with -// the DSN parameter 'allowAllFiles=true' -// -// filePath := "/home/gopher/data.csv" -// mysql.RegisterLocalFile(filePath) -// err := db.Exec("LOAD DATA LOCAL INFILE '" + filePath + "' INTO TABLE foo") -// if err != nil { -// ... -// -func RegisterLocalFile(filePath string) { - fileRegisterLock.Lock() - // lazy map init - if fileRegister == nil { - fileRegister = make(map[string]bool) - } - - fileRegister[strings.Trim(filePath, `"`)] = true - fileRegisterLock.Unlock() -} - -// DeregisterLocalFile removes the given filepath from the whitelist. -func DeregisterLocalFile(filePath string) { - fileRegisterLock.Lock() - delete(fileRegister, strings.Trim(filePath, `"`)) - fileRegisterLock.Unlock() -} - -// RegisterReaderHandler registers a handler function which is used -// to receive a io.Reader. -// The Reader can be used by "LOAD DATA LOCAL INFILE Reader::". -// If the handler returns a io.ReadCloser Close() is called when the -// request is finished. -// -// mysql.RegisterReaderHandler("data", func() io.Reader { -// var csvReader io.Reader // Some Reader that returns CSV data -// ... // Open Reader here -// return csvReader -// }) -// err := db.Exec("LOAD DATA LOCAL INFILE 'Reader::data' INTO TABLE foo") -// if err != nil { -// ... -// -func RegisterReaderHandler(name string, handler func() io.Reader) { - readerRegisterLock.Lock() - // lazy map init - if readerRegister == nil { - readerRegister = make(map[string]func() io.Reader) - } - - readerRegister[name] = handler - readerRegisterLock.Unlock() -} - -// DeregisterReaderHandler removes the ReaderHandler function with -// the given name from the registry. -func DeregisterReaderHandler(name string) { - readerRegisterLock.Lock() - delete(readerRegister, name) - readerRegisterLock.Unlock() -} - -func deferredClose(err *error, closer io.Closer) { - closeErr := closer.Close() - if *err == nil { - *err = closeErr - } -} - -func (mc *mysqlConn) handleInFileRequest(name string) (err error) { - var rdr io.Reader - var data []byte - packetSize := 16 * 1024 // 16KB is small enough for disk readahead and large enough for TCP - if mc.maxWriteSize < packetSize { - packetSize = mc.maxWriteSize - } - - if idx := strings.Index(name, "Reader::"); idx == 0 || (idx > 0 && name[idx-1] == '/') { // io.Reader - // The server might return an an absolute path. See issue #355. - name = name[idx+8:] - - readerRegisterLock.RLock() - handler, inMap := readerRegister[name] - readerRegisterLock.RUnlock() - - if inMap { - rdr = handler() - if rdr != nil { - if cl, ok := rdr.(io.Closer); ok { - defer deferredClose(&err, cl) - } - } else { - err = fmt.Errorf("Reader '%s' is ", name) - } - } else { - err = fmt.Errorf("Reader '%s' is not registered", name) - } - } else { // File - name = strings.Trim(name, `"`) - fileRegisterLock.RLock() - fr := fileRegister[name] - fileRegisterLock.RUnlock() - if mc.cfg.AllowAllFiles || fr { - var file *os.File - var fi os.FileInfo - - if file, err = os.Open(name); err == nil { - defer deferredClose(&err, file) - - // get file size - if fi, err = file.Stat(); err == nil { - rdr = file - if fileSize := int(fi.Size()); fileSize < packetSize { - packetSize = fileSize - } - } - } - } else { - err = fmt.Errorf("local file '%s' is not registered", name) - } - } - - // send content packets - if err == nil { - data := make([]byte, 4+packetSize) - var n int - for err == nil { - n, err = rdr.Read(data[4:]) - if n > 0 { - if ioErr := mc.writePacket(data[:4+n]); ioErr != nil { - return ioErr - } - } - } - if err == io.EOF { - err = nil - } - } - - // send empty packet (termination) - if data == nil { - data = make([]byte, 4) - } - if ioErr := mc.writePacket(data[:4]); ioErr != nil { - return ioErr - } - - // read OK packet - if err == nil { - _, err = mc.readResultOK() - return err - } - - mc.readPacket() - return err -} diff --git a/vendor/github.com/go-sql-driver/mysql/packets.go b/vendor/github.com/go-sql-driver/mysql/packets.go deleted file mode 100644 index aafe979..0000000 --- a/vendor/github.com/go-sql-driver/mysql/packets.go +++ /dev/null @@ -1,1287 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package mysql - -import ( - "bytes" - "crypto/tls" - "database/sql/driver" - "encoding/binary" - "errors" - "fmt" - "io" - "math" - "time" -) - -// Packets documentation: -// http://dev.mysql.com/doc/internals/en/client-server-protocol.html - -// Read packet to buffer 'data' -func (mc *mysqlConn) readPacket() ([]byte, error) { - var prevData []byte - for { - // read packet header - data, err := mc.buf.readNext(4) - if err != nil { - errLog.Print(err) - mc.Close() - return nil, driver.ErrBadConn - } - - // packet length [24 bit] - pktLen := int(uint32(data[0]) | uint32(data[1])<<8 | uint32(data[2])<<16) - - // check packet sync [8 bit] - if data[3] != mc.sequence { - if data[3] > mc.sequence { - return nil, ErrPktSyncMul - } - return nil, ErrPktSync - } - mc.sequence++ - - // packets with length 0 terminate a previous packet which is a - // multiple of (2^24)−1 bytes long - if pktLen == 0 { - // there was no previous packet - if prevData == nil { - errLog.Print(ErrMalformPkt) - mc.Close() - return nil, driver.ErrBadConn - } - - return prevData, nil - } - - // read packet body [pktLen bytes] - data, err = mc.buf.readNext(pktLen) - if err != nil { - errLog.Print(err) - mc.Close() - return nil, driver.ErrBadConn - } - - // return data if this was the last packet - if pktLen < maxPacketSize { - // zero allocations for non-split packets - if prevData == nil { - return data, nil - } - - return append(prevData, data...), nil - } - - prevData = append(prevData, data...) - } -} - -// Write packet buffer 'data' -func (mc *mysqlConn) writePacket(data []byte) error { - pktLen := len(data) - 4 - - if pktLen > mc.maxAllowedPacket { - return ErrPktTooLarge - } - - for { - var size int - if pktLen >= maxPacketSize { - data[0] = 0xff - data[1] = 0xff - data[2] = 0xff - size = maxPacketSize - } else { - data[0] = byte(pktLen) - data[1] = byte(pktLen >> 8) - data[2] = byte(pktLen >> 16) - size = pktLen - } - data[3] = mc.sequence - - // Write packet - if mc.writeTimeout > 0 { - if err := mc.netConn.SetWriteDeadline(time.Now().Add(mc.writeTimeout)); err != nil { - return err - } - } - - n, err := mc.netConn.Write(data[:4+size]) - if err == nil && n == 4+size { - mc.sequence++ - if size != maxPacketSize { - return nil - } - pktLen -= size - data = data[size:] - continue - } - - // Handle error - if err == nil { // n != len(data) - errLog.Print(ErrMalformPkt) - } else { - errLog.Print(err) - } - return driver.ErrBadConn - } -} - -/****************************************************************************** -* Initialisation Process * -******************************************************************************/ - -// Handshake Initialization Packet -// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::Handshake -func (mc *mysqlConn) readInitPacket() ([]byte, error) { - data, err := mc.readPacket() - if err != nil { - return nil, err - } - - if data[0] == iERR { - return nil, mc.handleErrorPacket(data) - } - - // protocol version [1 byte] - if data[0] < minProtocolVersion { - return nil, fmt.Errorf( - "unsupported protocol version %d. Version %d or higher is required", - data[0], - minProtocolVersion, - ) - } - - // server version [null terminated string] - // connection id [4 bytes] - pos := 1 + bytes.IndexByte(data[1:], 0x00) + 1 + 4 - - // first part of the password cipher [8 bytes] - cipher := data[pos : pos+8] - - // (filler) always 0x00 [1 byte] - pos += 8 + 1 - - // capability flags (lower 2 bytes) [2 bytes] - mc.flags = clientFlag(binary.LittleEndian.Uint16(data[pos : pos+2])) - if mc.flags&clientProtocol41 == 0 { - return nil, ErrOldProtocol - } - if mc.flags&clientSSL == 0 && mc.cfg.tls != nil { - return nil, ErrNoTLS - } - pos += 2 - - if len(data) > pos { - // character set [1 byte] - // status flags [2 bytes] - // capability flags (upper 2 bytes) [2 bytes] - // length of auth-plugin-data [1 byte] - // reserved (all [00]) [10 bytes] - pos += 1 + 2 + 2 + 1 + 10 - - // second part of the password cipher [mininum 13 bytes], - // where len=MAX(13, length of auth-plugin-data - 8) - // - // The web documentation is ambiguous about the length. However, - // according to mysql-5.7/sql/auth/sql_authentication.cc line 538, - // the 13th byte is "\0 byte, terminating the second part of - // a scramble". So the second part of the password cipher is - // a NULL terminated string that's at least 13 bytes with the - // last byte being NULL. - // - // The official Python library uses the fixed length 12 - // which seems to work but technically could have a hidden bug. - cipher = append(cipher, data[pos:pos+12]...) - - // TODO: Verify string termination - // EOF if version (>= 5.5.7 and < 5.5.10) or (>= 5.6.0 and < 5.6.2) - // \NUL otherwise - // - //if data[len(data)-1] == 0 { - // return - //} - //return ErrMalformPkt - - // make a memory safe copy of the cipher slice - var b [20]byte - copy(b[:], cipher) - return b[:], nil - } - - // make a memory safe copy of the cipher slice - var b [8]byte - copy(b[:], cipher) - return b[:], nil -} - -// Client Authentication Packet -// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::HandshakeResponse -func (mc *mysqlConn) writeAuthPacket(cipher []byte) error { - // Adjust client flags based on server support - clientFlags := clientProtocol41 | - clientSecureConn | - clientLongPassword | - clientTransactions | - clientLocalFiles | - clientPluginAuth | - clientMultiResults | - mc.flags&clientLongFlag - - if mc.cfg.ClientFoundRows { - clientFlags |= clientFoundRows - } - - // To enable TLS / SSL - if mc.cfg.tls != nil { - clientFlags |= clientSSL - } - - if mc.cfg.MultiStatements { - clientFlags |= clientMultiStatements - } - - // User Password - scrambleBuff := scramblePassword(cipher, []byte(mc.cfg.Passwd)) - - pktLen := 4 + 4 + 1 + 23 + len(mc.cfg.User) + 1 + 1 + len(scrambleBuff) + 21 + 1 - - // To specify a db name - if n := len(mc.cfg.DBName); n > 0 { - clientFlags |= clientConnectWithDB - pktLen += n + 1 - } - - // Calculate packet length and get buffer with that size - data := mc.buf.takeSmallBuffer(pktLen + 4) - if data == nil { - // can not take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) - return driver.ErrBadConn - } - - // ClientFlags [32 bit] - data[4] = byte(clientFlags) - data[5] = byte(clientFlags >> 8) - data[6] = byte(clientFlags >> 16) - data[7] = byte(clientFlags >> 24) - - // MaxPacketSize [32 bit] (none) - data[8] = 0x00 - data[9] = 0x00 - data[10] = 0x00 - data[11] = 0x00 - - // Charset [1 byte] - var found bool - data[12], found = collations[mc.cfg.Collation] - if !found { - // Note possibility for false negatives: - // could be triggered although the collation is valid if the - // collations map does not contain entries the server supports. - return errors.New("unknown collation") - } - - // SSL Connection Request Packet - // http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::SSLRequest - if mc.cfg.tls != nil { - // Send TLS / SSL request packet - if err := mc.writePacket(data[:(4+4+1+23)+4]); err != nil { - return err - } - - // Switch to TLS - tlsConn := tls.Client(mc.netConn, mc.cfg.tls) - if err := tlsConn.Handshake(); err != nil { - return err - } - mc.netConn = tlsConn - mc.buf.nc = tlsConn - } - - // Filler [23 bytes] (all 0x00) - pos := 13 - for ; pos < 13+23; pos++ { - data[pos] = 0 - } - - // User [null terminated string] - if len(mc.cfg.User) > 0 { - pos += copy(data[pos:], mc.cfg.User) - } - data[pos] = 0x00 - pos++ - - // ScrambleBuffer [length encoded integer] - data[pos] = byte(len(scrambleBuff)) - pos += 1 + copy(data[pos+1:], scrambleBuff) - - // Databasename [null terminated string] - if len(mc.cfg.DBName) > 0 { - pos += copy(data[pos:], mc.cfg.DBName) - data[pos] = 0x00 - pos++ - } - - // Assume native client during response - pos += copy(data[pos:], "mysql_native_password") - data[pos] = 0x00 - - // Send Auth packet - return mc.writePacket(data) -} - -// Client old authentication packet -// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchResponse -func (mc *mysqlConn) writeOldAuthPacket(cipher []byte) error { - // User password - scrambleBuff := scrambleOldPassword(cipher, []byte(mc.cfg.Passwd)) - - // Calculate the packet length and add a tailing 0 - pktLen := len(scrambleBuff) + 1 - data := mc.buf.takeSmallBuffer(4 + pktLen) - if data == nil { - // can not take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) - return driver.ErrBadConn - } - - // Add the scrambled password [null terminated string] - copy(data[4:], scrambleBuff) - data[4+pktLen-1] = 0x00 - - return mc.writePacket(data) -} - -// Client clear text authentication packet -// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchResponse -func (mc *mysqlConn) writeClearAuthPacket() error { - // Calculate the packet length and add a tailing 0 - pktLen := len(mc.cfg.Passwd) + 1 - data := mc.buf.takeSmallBuffer(4 + pktLen) - if data == nil { - // can not take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) - return driver.ErrBadConn - } - - // Add the clear password [null terminated string] - copy(data[4:], mc.cfg.Passwd) - data[4+pktLen-1] = 0x00 - - return mc.writePacket(data) -} - -// Native password authentication method -// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchResponse -func (mc *mysqlConn) writeNativeAuthPacket(cipher []byte) error { - scrambleBuff := scramblePassword(cipher, []byte(mc.cfg.Passwd)) - - // Calculate the packet length and add a tailing 0 - pktLen := len(scrambleBuff) - data := mc.buf.takeSmallBuffer(4 + pktLen) - if data == nil { - // can not take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) - return driver.ErrBadConn - } - - // Add the scramble - copy(data[4:], scrambleBuff) - - return mc.writePacket(data) -} - -/****************************************************************************** -* Command Packets * -******************************************************************************/ - -func (mc *mysqlConn) writeCommandPacket(command byte) error { - // Reset Packet Sequence - mc.sequence = 0 - - data := mc.buf.takeSmallBuffer(4 + 1) - if data == nil { - // can not take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) - return driver.ErrBadConn - } - - // Add command byte - data[4] = command - - // Send CMD packet - return mc.writePacket(data) -} - -func (mc *mysqlConn) writeCommandPacketStr(command byte, arg string) error { - // Reset Packet Sequence - mc.sequence = 0 - - pktLen := 1 + len(arg) - data := mc.buf.takeBuffer(pktLen + 4) - if data == nil { - // can not take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) - return driver.ErrBadConn - } - - // Add command byte - data[4] = command - - // Add arg - copy(data[5:], arg) - - // Send CMD packet - return mc.writePacket(data) -} - -func (mc *mysqlConn) writeCommandPacketUint32(command byte, arg uint32) error { - // Reset Packet Sequence - mc.sequence = 0 - - data := mc.buf.takeSmallBuffer(4 + 1 + 4) - if data == nil { - // can not take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) - return driver.ErrBadConn - } - - // Add command byte - data[4] = command - - // Add arg [32 bit] - data[5] = byte(arg) - data[6] = byte(arg >> 8) - data[7] = byte(arg >> 16) - data[8] = byte(arg >> 24) - - // Send CMD packet - return mc.writePacket(data) -} - -/****************************************************************************** -* Result Packets * -******************************************************************************/ - -// Returns error if Packet is not an 'Result OK'-Packet -func (mc *mysqlConn) readResultOK() ([]byte, error) { - data, err := mc.readPacket() - if err == nil { - // packet indicator - switch data[0] { - - case iOK: - return nil, mc.handleOkPacket(data) - - case iEOF: - if len(data) > 1 { - pluginEndIndex := bytes.IndexByte(data, 0x00) - plugin := string(data[1:pluginEndIndex]) - cipher := data[pluginEndIndex+1 : len(data)-1] - - if plugin == "mysql_old_password" { - // using old_passwords - return cipher, ErrOldPassword - } else if plugin == "mysql_clear_password" { - // using clear text password - return cipher, ErrCleartextPassword - } else if plugin == "mysql_native_password" { - // using mysql default authentication method - return cipher, ErrNativePassword - } else { - return cipher, ErrUnknownPlugin - } - } else { - // https://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::OldAuthSwitchRequest - return nil, ErrOldPassword - } - - default: // Error otherwise - return nil, mc.handleErrorPacket(data) - } - } - return nil, err -} - -// Result Set Header Packet -// http://dev.mysql.com/doc/internals/en/com-query-response.html#packet-ProtocolText::Resultset -func (mc *mysqlConn) readResultSetHeaderPacket() (int, error) { - data, err := mc.readPacket() - if err == nil { - switch data[0] { - - case iOK: - return 0, mc.handleOkPacket(data) - - case iERR: - return 0, mc.handleErrorPacket(data) - - case iLocalInFile: - return 0, mc.handleInFileRequest(string(data[1:])) - } - - // column count - num, _, n := readLengthEncodedInteger(data) - if n-len(data) == 0 { - return int(num), nil - } - - return 0, ErrMalformPkt - } - return 0, err -} - -// Error Packet -// http://dev.mysql.com/doc/internals/en/generic-response-packets.html#packet-ERR_Packet -func (mc *mysqlConn) handleErrorPacket(data []byte) error { - if data[0] != iERR { - return ErrMalformPkt - } - - // 0xff [1 byte] - - // Error Number [16 bit uint] - errno := binary.LittleEndian.Uint16(data[1:3]) - - pos := 3 - - // SQL State [optional: # + 5bytes string] - if data[3] == 0x23 { - //sqlstate := string(data[4 : 4+5]) - pos = 9 - } - - // Error Message [string] - return &MySQLError{ - Number: errno, - Message: string(data[pos:]), - } -} - -func readStatus(b []byte) statusFlag { - return statusFlag(b[0]) | statusFlag(b[1])<<8 -} - -// Ok Packet -// http://dev.mysql.com/doc/internals/en/generic-response-packets.html#packet-OK_Packet -func (mc *mysqlConn) handleOkPacket(data []byte) error { - var n, m int - - // 0x00 [1 byte] - - // Affected rows [Length Coded Binary] - mc.affectedRows, _, n = readLengthEncodedInteger(data[1:]) - - // Insert id [Length Coded Binary] - mc.insertId, _, m = readLengthEncodedInteger(data[1+n:]) - - // server_status [2 bytes] - mc.status = readStatus(data[1+n+m : 1+n+m+2]) - if err := mc.discardResults(); err != nil { - return err - } - - // warning count [2 bytes] - if !mc.strict { - return nil - } - - pos := 1 + n + m + 2 - if binary.LittleEndian.Uint16(data[pos:pos+2]) > 0 { - return mc.getWarnings() - } - return nil -} - -// Read Packets as Field Packets until EOF-Packet or an Error appears -// http://dev.mysql.com/doc/internals/en/com-query-response.html#packet-Protocol::ColumnDefinition41 -func (mc *mysqlConn) readColumns(count int) ([]mysqlField, error) { - columns := make([]mysqlField, count) - - for i := 0; ; i++ { - data, err := mc.readPacket() - if err != nil { - return nil, err - } - - // EOF Packet - if data[0] == iEOF && (len(data) == 5 || len(data) == 1) { - if i == count { - return columns, nil - } - return nil, fmt.Errorf("column count mismatch n:%d len:%d", count, len(columns)) - } - - // Catalog - pos, err := skipLengthEncodedString(data) - if err != nil { - return nil, err - } - - // Database [len coded string] - n, err := skipLengthEncodedString(data[pos:]) - if err != nil { - return nil, err - } - pos += n - - // Table [len coded string] - if mc.cfg.ColumnsWithAlias { - tableName, _, n, err := readLengthEncodedString(data[pos:]) - if err != nil { - return nil, err - } - pos += n - columns[i].tableName = string(tableName) - } else { - n, err = skipLengthEncodedString(data[pos:]) - if err != nil { - return nil, err - } - pos += n - } - - // Original table [len coded string] - n, err = skipLengthEncodedString(data[pos:]) - if err != nil { - return nil, err - } - pos += n - - // Name [len coded string] - name, _, n, err := readLengthEncodedString(data[pos:]) - if err != nil { - return nil, err - } - columns[i].name = string(name) - pos += n - - // Original name [len coded string] - n, err = skipLengthEncodedString(data[pos:]) - if err != nil { - return nil, err - } - - // Filler [uint8] - // Charset [charset, collation uint8] - // Length [uint32] - pos += n + 1 + 2 + 4 - - // Field type [uint8] - columns[i].fieldType = data[pos] - pos++ - - // Flags [uint16] - columns[i].flags = fieldFlag(binary.LittleEndian.Uint16(data[pos : pos+2])) - pos += 2 - - // Decimals [uint8] - columns[i].decimals = data[pos] - //pos++ - - // Default value [len coded binary] - //if pos < len(data) { - // defaultVal, _, err = bytesToLengthCodedBinary(data[pos:]) - //} - } -} - -// Read Packets as Field Packets until EOF-Packet or an Error appears -// http://dev.mysql.com/doc/internals/en/com-query-response.html#packet-ProtocolText::ResultsetRow -func (rows *textRows) readRow(dest []driver.Value) error { - mc := rows.mc - - data, err := mc.readPacket() - if err != nil { - return err - } - - // EOF Packet - if data[0] == iEOF && len(data) == 5 { - // server_status [2 bytes] - rows.mc.status = readStatus(data[3:]) - err = rows.mc.discardResults() - if err == nil { - err = io.EOF - } else { - // connection unusable - rows.mc.Close() - } - rows.mc = nil - return err - } - if data[0] == iERR { - rows.mc = nil - return mc.handleErrorPacket(data) - } - - // RowSet Packet - var n int - var isNull bool - pos := 0 - - for i := range dest { - // Read bytes and convert to string - dest[i], isNull, n, err = readLengthEncodedString(data[pos:]) - pos += n - if err == nil { - if !isNull { - if !mc.parseTime { - continue - } else { - switch rows.columns[i].fieldType { - case fieldTypeTimestamp, fieldTypeDateTime, - fieldTypeDate, fieldTypeNewDate: - dest[i], err = parseDateTime( - string(dest[i].([]byte)), - mc.cfg.Loc, - ) - if err == nil { - continue - } - default: - continue - } - } - - } else { - dest[i] = nil - continue - } - } - return err // err != nil - } - - return nil -} - -// Reads Packets until EOF-Packet or an Error appears. Returns count of Packets read -func (mc *mysqlConn) readUntilEOF() error { - for { - data, err := mc.readPacket() - if err != nil { - return err - } - - switch data[0] { - case iERR: - return mc.handleErrorPacket(data) - case iEOF: - if len(data) == 5 { - mc.status = readStatus(data[3:]) - } - return nil - } - } -} - -/****************************************************************************** -* Prepared Statements * -******************************************************************************/ - -// Prepare Result Packets -// http://dev.mysql.com/doc/internals/en/com-stmt-prepare-response.html -func (stmt *mysqlStmt) readPrepareResultPacket() (uint16, error) { - data, err := stmt.mc.readPacket() - if err == nil { - // packet indicator [1 byte] - if data[0] != iOK { - return 0, stmt.mc.handleErrorPacket(data) - } - - // statement id [4 bytes] - stmt.id = binary.LittleEndian.Uint32(data[1:5]) - - // Column count [16 bit uint] - columnCount := binary.LittleEndian.Uint16(data[5:7]) - - // Param count [16 bit uint] - stmt.paramCount = int(binary.LittleEndian.Uint16(data[7:9])) - - // Reserved [8 bit] - - // Warning count [16 bit uint] - if !stmt.mc.strict { - return columnCount, nil - } - - // Check for warnings count > 0, only available in MySQL > 4.1 - if len(data) >= 12 && binary.LittleEndian.Uint16(data[10:12]) > 0 { - return columnCount, stmt.mc.getWarnings() - } - return columnCount, nil - } - return 0, err -} - -// http://dev.mysql.com/doc/internals/en/com-stmt-send-long-data.html -func (stmt *mysqlStmt) writeCommandLongData(paramID int, arg []byte) error { - maxLen := stmt.mc.maxAllowedPacket - 1 - pktLen := maxLen - - // After the header (bytes 0-3) follows before the data: - // 1 byte command - // 4 bytes stmtID - // 2 bytes paramID - const dataOffset = 1 + 4 + 2 - - // Can not use the write buffer since - // a) the buffer is too small - // b) it is in use - data := make([]byte, 4+1+4+2+len(arg)) - - copy(data[4+dataOffset:], arg) - - for argLen := len(arg); argLen > 0; argLen -= pktLen - dataOffset { - if dataOffset+argLen < maxLen { - pktLen = dataOffset + argLen - } - - stmt.mc.sequence = 0 - // Add command byte [1 byte] - data[4] = comStmtSendLongData - - // Add stmtID [32 bit] - data[5] = byte(stmt.id) - data[6] = byte(stmt.id >> 8) - data[7] = byte(stmt.id >> 16) - data[8] = byte(stmt.id >> 24) - - // Add paramID [16 bit] - data[9] = byte(paramID) - data[10] = byte(paramID >> 8) - - // Send CMD packet - err := stmt.mc.writePacket(data[:4+pktLen]) - if err == nil { - data = data[pktLen-dataOffset:] - continue - } - return err - - } - - // Reset Packet Sequence - stmt.mc.sequence = 0 - return nil -} - -// Execute Prepared Statement -// http://dev.mysql.com/doc/internals/en/com-stmt-execute.html -func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error { - if len(args) != stmt.paramCount { - return fmt.Errorf( - "argument count mismatch (got: %d; has: %d)", - len(args), - stmt.paramCount, - ) - } - - const minPktLen = 4 + 1 + 4 + 1 + 4 - mc := stmt.mc - - // Reset packet-sequence - mc.sequence = 0 - - var data []byte - - if len(args) == 0 { - data = mc.buf.takeBuffer(minPktLen) - } else { - data = mc.buf.takeCompleteBuffer() - } - if data == nil { - // can not take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) - return driver.ErrBadConn - } - - // command [1 byte] - data[4] = comStmtExecute - - // statement_id [4 bytes] - data[5] = byte(stmt.id) - data[6] = byte(stmt.id >> 8) - data[7] = byte(stmt.id >> 16) - data[8] = byte(stmt.id >> 24) - - // flags (0: CURSOR_TYPE_NO_CURSOR) [1 byte] - data[9] = 0x00 - - // iteration_count (uint32(1)) [4 bytes] - data[10] = 0x01 - data[11] = 0x00 - data[12] = 0x00 - data[13] = 0x00 - - if len(args) > 0 { - pos := minPktLen - - var nullMask []byte - if maskLen, typesLen := (len(args)+7)/8, 1+2*len(args); pos+maskLen+typesLen >= len(data) { - // buffer has to be extended but we don't know by how much so - // we depend on append after all data with known sizes fit. - // We stop at that because we deal with a lot of columns here - // which makes the required allocation size hard to guess. - tmp := make([]byte, pos+maskLen+typesLen) - copy(tmp[:pos], data[:pos]) - data = tmp - nullMask = data[pos : pos+maskLen] - pos += maskLen - } else { - nullMask = data[pos : pos+maskLen] - for i := 0; i < maskLen; i++ { - nullMask[i] = 0 - } - pos += maskLen - } - - // newParameterBoundFlag 1 [1 byte] - data[pos] = 0x01 - pos++ - - // type of each parameter [len(args)*2 bytes] - paramTypes := data[pos:] - pos += len(args) * 2 - - // value of each parameter [n bytes] - paramValues := data[pos:pos] - valuesCap := cap(paramValues) - - for i, arg := range args { - // build NULL-bitmap - if arg == nil { - nullMask[i/8] |= 1 << (uint(i) & 7) - paramTypes[i+i] = fieldTypeNULL - paramTypes[i+i+1] = 0x00 - continue - } - - // cache types and values - switch v := arg.(type) { - case int64: - paramTypes[i+i] = fieldTypeLongLong - paramTypes[i+i+1] = 0x00 - - if cap(paramValues)-len(paramValues)-8 >= 0 { - paramValues = paramValues[:len(paramValues)+8] - binary.LittleEndian.PutUint64( - paramValues[len(paramValues)-8:], - uint64(v), - ) - } else { - paramValues = append(paramValues, - uint64ToBytes(uint64(v))..., - ) - } - - case float64: - paramTypes[i+i] = fieldTypeDouble - paramTypes[i+i+1] = 0x00 - - if cap(paramValues)-len(paramValues)-8 >= 0 { - paramValues = paramValues[:len(paramValues)+8] - binary.LittleEndian.PutUint64( - paramValues[len(paramValues)-8:], - math.Float64bits(v), - ) - } else { - paramValues = append(paramValues, - uint64ToBytes(math.Float64bits(v))..., - ) - } - - case bool: - paramTypes[i+i] = fieldTypeTiny - paramTypes[i+i+1] = 0x00 - - if v { - paramValues = append(paramValues, 0x01) - } else { - paramValues = append(paramValues, 0x00) - } - - case []byte: - // Common case (non-nil value) first - if v != nil { - paramTypes[i+i] = fieldTypeString - paramTypes[i+i+1] = 0x00 - - if len(v) < mc.maxAllowedPacket-pos-len(paramValues)-(len(args)-(i+1))*64 { - paramValues = appendLengthEncodedInteger(paramValues, - uint64(len(v)), - ) - paramValues = append(paramValues, v...) - } else { - if err := stmt.writeCommandLongData(i, v); err != nil { - return err - } - } - continue - } - - // Handle []byte(nil) as a NULL value - nullMask[i/8] |= 1 << (uint(i) & 7) - paramTypes[i+i] = fieldTypeNULL - paramTypes[i+i+1] = 0x00 - - case string: - paramTypes[i+i] = fieldTypeString - paramTypes[i+i+1] = 0x00 - - if len(v) < mc.maxAllowedPacket-pos-len(paramValues)-(len(args)-(i+1))*64 { - paramValues = appendLengthEncodedInteger(paramValues, - uint64(len(v)), - ) - paramValues = append(paramValues, v...) - } else { - if err := stmt.writeCommandLongData(i, []byte(v)); err != nil { - return err - } - } - - case time.Time: - paramTypes[i+i] = fieldTypeString - paramTypes[i+i+1] = 0x00 - - var val []byte - if v.IsZero() { - val = []byte("0000-00-00") - } else { - val = []byte(v.In(mc.cfg.Loc).Format(timeFormat)) - } - - paramValues = appendLengthEncodedInteger(paramValues, - uint64(len(val)), - ) - paramValues = append(paramValues, val...) - - default: - return fmt.Errorf("can not convert type: %T", arg) - } - } - - // Check if param values exceeded the available buffer - // In that case we must build the data packet with the new values buffer - if valuesCap != cap(paramValues) { - data = append(data[:pos], paramValues...) - mc.buf.buf = data - } - - pos += len(paramValues) - data = data[:pos] - } - - return mc.writePacket(data) -} - -func (mc *mysqlConn) discardResults() error { - for mc.status&statusMoreResultsExists != 0 { - resLen, err := mc.readResultSetHeaderPacket() - if err != nil { - return err - } - if resLen > 0 { - // columns - if err := mc.readUntilEOF(); err != nil { - return err - } - // rows - if err := mc.readUntilEOF(); err != nil { - return err - } - } else { - mc.status &^= statusMoreResultsExists - } - } - return nil -} - -// http://dev.mysql.com/doc/internals/en/binary-protocol-resultset-row.html -func (rows *binaryRows) readRow(dest []driver.Value) error { - data, err := rows.mc.readPacket() - if err != nil { - return err - } - - // packet indicator [1 byte] - if data[0] != iOK { - // EOF Packet - if data[0] == iEOF && len(data) == 5 { - rows.mc.status = readStatus(data[3:]) - err = rows.mc.discardResults() - if err == nil { - err = io.EOF - } else { - // connection unusable - rows.mc.Close() - } - rows.mc = nil - return err - } - rows.mc = nil - - // Error otherwise - return rows.mc.handleErrorPacket(data) - } - - // NULL-bitmap, [(column-count + 7 + 2) / 8 bytes] - pos := 1 + (len(dest)+7+2)>>3 - nullMask := data[1:pos] - - for i := range dest { - // Field is NULL - // (byte >> bit-pos) % 2 == 1 - if ((nullMask[(i+2)>>3] >> uint((i+2)&7)) & 1) == 1 { - dest[i] = nil - continue - } - - // Convert to byte-coded string - switch rows.columns[i].fieldType { - case fieldTypeNULL: - dest[i] = nil - continue - - // Numeric Types - case fieldTypeTiny: - if rows.columns[i].flags&flagUnsigned != 0 { - dest[i] = int64(data[pos]) - } else { - dest[i] = int64(int8(data[pos])) - } - pos++ - continue - - case fieldTypeShort, fieldTypeYear: - if rows.columns[i].flags&flagUnsigned != 0 { - dest[i] = int64(binary.LittleEndian.Uint16(data[pos : pos+2])) - } else { - dest[i] = int64(int16(binary.LittleEndian.Uint16(data[pos : pos+2]))) - } - pos += 2 - continue - - case fieldTypeInt24, fieldTypeLong: - if rows.columns[i].flags&flagUnsigned != 0 { - dest[i] = int64(binary.LittleEndian.Uint32(data[pos : pos+4])) - } else { - dest[i] = int64(int32(binary.LittleEndian.Uint32(data[pos : pos+4]))) - } - pos += 4 - continue - - case fieldTypeLongLong: - if rows.columns[i].flags&flagUnsigned != 0 { - val := binary.LittleEndian.Uint64(data[pos : pos+8]) - if val > math.MaxInt64 { - dest[i] = uint64ToString(val) - } else { - dest[i] = int64(val) - } - } else { - dest[i] = int64(binary.LittleEndian.Uint64(data[pos : pos+8])) - } - pos += 8 - continue - - case fieldTypeFloat: - dest[i] = float32(math.Float32frombits(binary.LittleEndian.Uint32(data[pos : pos+4]))) - pos += 4 - continue - - case fieldTypeDouble: - dest[i] = math.Float64frombits(binary.LittleEndian.Uint64(data[pos : pos+8])) - pos += 8 - continue - - // Length coded Binary Strings - case fieldTypeDecimal, fieldTypeNewDecimal, fieldTypeVarChar, - fieldTypeBit, fieldTypeEnum, fieldTypeSet, fieldTypeTinyBLOB, - fieldTypeMediumBLOB, fieldTypeLongBLOB, fieldTypeBLOB, - fieldTypeVarString, fieldTypeString, fieldTypeGeometry, fieldTypeJSON: - var isNull bool - var n int - dest[i], isNull, n, err = readLengthEncodedString(data[pos:]) - pos += n - if err == nil { - if !isNull { - continue - } else { - dest[i] = nil - continue - } - } - return err - - case - fieldTypeDate, fieldTypeNewDate, // Date YYYY-MM-DD - fieldTypeTime, // Time [-][H]HH:MM:SS[.fractal] - fieldTypeTimestamp, fieldTypeDateTime: // Timestamp YYYY-MM-DD HH:MM:SS[.fractal] - - num, isNull, n := readLengthEncodedInteger(data[pos:]) - pos += n - - switch { - case isNull: - dest[i] = nil - continue - case rows.columns[i].fieldType == fieldTypeTime: - // database/sql does not support an equivalent to TIME, return a string - var dstlen uint8 - switch decimals := rows.columns[i].decimals; decimals { - case 0x00, 0x1f: - dstlen = 8 - case 1, 2, 3, 4, 5, 6: - dstlen = 8 + 1 + decimals - default: - return fmt.Errorf( - "protocol error, illegal decimals value %d", - rows.columns[i].decimals, - ) - } - dest[i], err = formatBinaryDateTime(data[pos:pos+int(num)], dstlen, true) - case rows.mc.parseTime: - dest[i], err = parseBinaryDateTime(num, data[pos:], rows.mc.cfg.Loc) - default: - var dstlen uint8 - if rows.columns[i].fieldType == fieldTypeDate { - dstlen = 10 - } else { - switch decimals := rows.columns[i].decimals; decimals { - case 0x00, 0x1f: - dstlen = 19 - case 1, 2, 3, 4, 5, 6: - dstlen = 19 + 1 + decimals - default: - return fmt.Errorf( - "protocol error, illegal decimals value %d", - rows.columns[i].decimals, - ) - } - } - dest[i], err = formatBinaryDateTime(data[pos:pos+int(num)], dstlen, false) - } - - if err == nil { - pos += int(num) - continue - } else { - return err - } - - // Please report if this happens! - default: - return fmt.Errorf("unknown field type %d", rows.columns[i].fieldType) - } - } - - return nil -} diff --git a/vendor/github.com/go-sql-driver/mysql/result.go b/vendor/github.com/go-sql-driver/mysql/result.go deleted file mode 100644 index c6438d0..0000000 --- a/vendor/github.com/go-sql-driver/mysql/result.go +++ /dev/null @@ -1,22 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package mysql - -type mysqlResult struct { - affectedRows int64 - insertId int64 -} - -func (res *mysqlResult) LastInsertId() (int64, error) { - return res.insertId, nil -} - -func (res *mysqlResult) RowsAffected() (int64, error) { - return res.affectedRows, nil -} diff --git a/vendor/github.com/go-sql-driver/mysql/rows.go b/vendor/github.com/go-sql-driver/mysql/rows.go deleted file mode 100644 index c08255e..0000000 --- a/vendor/github.com/go-sql-driver/mysql/rows.go +++ /dev/null @@ -1,112 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package mysql - -import ( - "database/sql/driver" - "io" -) - -type mysqlField struct { - tableName string - name string - flags fieldFlag - fieldType byte - decimals byte -} - -type mysqlRows struct { - mc *mysqlConn - columns []mysqlField -} - -type binaryRows struct { - mysqlRows -} - -type textRows struct { - mysqlRows -} - -type emptyRows struct{} - -func (rows *mysqlRows) Columns() []string { - columns := make([]string, len(rows.columns)) - if rows.mc != nil && rows.mc.cfg.ColumnsWithAlias { - for i := range columns { - if tableName := rows.columns[i].tableName; len(tableName) > 0 { - columns[i] = tableName + "." + rows.columns[i].name - } else { - columns[i] = rows.columns[i].name - } - } - } else { - for i := range columns { - columns[i] = rows.columns[i].name - } - } - return columns -} - -func (rows *mysqlRows) Close() error { - mc := rows.mc - if mc == nil { - return nil - } - if mc.netConn == nil { - return ErrInvalidConn - } - - // Remove unread packets from stream - err := mc.readUntilEOF() - if err == nil { - if err = mc.discardResults(); err != nil { - return err - } - } - - rows.mc = nil - return err -} - -func (rows *binaryRows) Next(dest []driver.Value) error { - if mc := rows.mc; mc != nil { - if mc.netConn == nil { - return ErrInvalidConn - } - - // Fetch next row from stream - return rows.readRow(dest) - } - return io.EOF -} - -func (rows *textRows) Next(dest []driver.Value) error { - if mc := rows.mc; mc != nil { - if mc.netConn == nil { - return ErrInvalidConn - } - - // Fetch next row from stream - return rows.readRow(dest) - } - return io.EOF -} - -func (rows emptyRows) Columns() []string { - return nil -} - -func (rows emptyRows) Close() error { - return nil -} - -func (rows emptyRows) Next(dest []driver.Value) error { - return io.EOF -} diff --git a/vendor/github.com/go-sql-driver/mysql/statement.go b/vendor/github.com/go-sql-driver/mysql/statement.go deleted file mode 100644 index 7f9b045..0000000 --- a/vendor/github.com/go-sql-driver/mysql/statement.go +++ /dev/null @@ -1,153 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package mysql - -import ( - "database/sql/driver" - "fmt" - "reflect" - "strconv" -) - -type mysqlStmt struct { - mc *mysqlConn - id uint32 - paramCount int - columns []mysqlField // cached from the first query -} - -func (stmt *mysqlStmt) Close() error { - if stmt.mc == nil || stmt.mc.netConn == nil { - // driver.Stmt.Close can be called more than once, thus this function - // has to be idempotent. - // See also Issue #450 and golang/go#16019. - //errLog.Print(ErrInvalidConn) - return driver.ErrBadConn - } - - err := stmt.mc.writeCommandPacketUint32(comStmtClose, stmt.id) - stmt.mc = nil - return err -} - -func (stmt *mysqlStmt) NumInput() int { - return stmt.paramCount -} - -func (stmt *mysqlStmt) ColumnConverter(idx int) driver.ValueConverter { - return converter{} -} - -func (stmt *mysqlStmt) Exec(args []driver.Value) (driver.Result, error) { - if stmt.mc.netConn == nil { - errLog.Print(ErrInvalidConn) - return nil, driver.ErrBadConn - } - // Send command - err := stmt.writeExecutePacket(args) - if err != nil { - return nil, err - } - - mc := stmt.mc - - mc.affectedRows = 0 - mc.insertId = 0 - - // Read Result - resLen, err := mc.readResultSetHeaderPacket() - if err == nil { - if resLen > 0 { - // Columns - err = mc.readUntilEOF() - if err != nil { - return nil, err - } - - // Rows - err = mc.readUntilEOF() - } - if err == nil { - return &mysqlResult{ - affectedRows: int64(mc.affectedRows), - insertId: int64(mc.insertId), - }, nil - } - } - - return nil, err -} - -func (stmt *mysqlStmt) Query(args []driver.Value) (driver.Rows, error) { - if stmt.mc.netConn == nil { - errLog.Print(ErrInvalidConn) - return nil, driver.ErrBadConn - } - // Send command - err := stmt.writeExecutePacket(args) - if err != nil { - return nil, err - } - - mc := stmt.mc - - // Read Result - resLen, err := mc.readResultSetHeaderPacket() - if err != nil { - return nil, err - } - - rows := new(binaryRows) - - if resLen > 0 { - rows.mc = mc - // Columns - // If not cached, read them and cache them - if stmt.columns == nil { - rows.columns, err = mc.readColumns(resLen) - stmt.columns = rows.columns - } else { - rows.columns = stmt.columns - err = mc.readUntilEOF() - } - } - - return rows, err -} - -type converter struct{} - -func (c converter) ConvertValue(v interface{}) (driver.Value, error) { - if driver.IsValue(v) { - return v, nil - } - - rv := reflect.ValueOf(v) - switch rv.Kind() { - case reflect.Ptr: - // indirect pointers - if rv.IsNil() { - return nil, nil - } - return c.ConvertValue(rv.Elem().Interface()) - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return rv.Int(), nil - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32: - return int64(rv.Uint()), nil - case reflect.Uint64: - u64 := rv.Uint() - if u64 >= 1<<63 { - return strconv.FormatUint(u64, 10), nil - } - return int64(u64), nil - case reflect.Float32, reflect.Float64: - return rv.Float(), nil - } - return nil, fmt.Errorf("unsupported type %T, a %s", v, rv.Kind()) -} diff --git a/vendor/github.com/go-sql-driver/mysql/transaction.go b/vendor/github.com/go-sql-driver/mysql/transaction.go deleted file mode 100644 index 33c749b..0000000 --- a/vendor/github.com/go-sql-driver/mysql/transaction.go +++ /dev/null @@ -1,31 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package mysql - -type mysqlTx struct { - mc *mysqlConn -} - -func (tx *mysqlTx) Commit() (err error) { - if tx.mc == nil || tx.mc.netConn == nil { - return ErrInvalidConn - } - err = tx.mc.exec("COMMIT") - tx.mc = nil - return -} - -func (tx *mysqlTx) Rollback() (err error) { - if tx.mc == nil || tx.mc.netConn == nil { - return ErrInvalidConn - } - err = tx.mc.exec("ROLLBACK") - tx.mc = nil - return -} diff --git a/vendor/github.com/go-sql-driver/mysql/utils.go b/vendor/github.com/go-sql-driver/mysql/utils.go deleted file mode 100644 index d523b7f..0000000 --- a/vendor/github.com/go-sql-driver/mysql/utils.go +++ /dev/null @@ -1,740 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package mysql - -import ( - "crypto/sha1" - "crypto/tls" - "database/sql/driver" - "encoding/binary" - "fmt" - "io" - "strings" - "time" -) - -var ( - tlsConfigRegister map[string]*tls.Config // Register for custom tls.Configs -) - -// RegisterTLSConfig registers a custom tls.Config to be used with sql.Open. -// Use the key as a value in the DSN where tls=value. -// -// rootCertPool := x509.NewCertPool() -// pem, err := ioutil.ReadFile("/path/ca-cert.pem") -// if err != nil { -// log.Fatal(err) -// } -// if ok := rootCertPool.AppendCertsFromPEM(pem); !ok { -// log.Fatal("Failed to append PEM.") -// } -// clientCert := make([]tls.Certificate, 0, 1) -// certs, err := tls.LoadX509KeyPair("/path/client-cert.pem", "/path/client-key.pem") -// if err != nil { -// log.Fatal(err) -// } -// clientCert = append(clientCert, certs) -// mysql.RegisterTLSConfig("custom", &tls.Config{ -// RootCAs: rootCertPool, -// Certificates: clientCert, -// }) -// db, err := sql.Open("mysql", "user@tcp(localhost:3306)/test?tls=custom") -// -func RegisterTLSConfig(key string, config *tls.Config) error { - if _, isBool := readBool(key); isBool || strings.ToLower(key) == "skip-verify" { - return fmt.Errorf("key '%s' is reserved", key) - } - - if tlsConfigRegister == nil { - tlsConfigRegister = make(map[string]*tls.Config) - } - - tlsConfigRegister[key] = config - return nil -} - -// DeregisterTLSConfig removes the tls.Config associated with key. -func DeregisterTLSConfig(key string) { - if tlsConfigRegister != nil { - delete(tlsConfigRegister, key) - } -} - -// Returns the bool value of the input. -// The 2nd return value indicates if the input was a valid bool value -func readBool(input string) (value bool, valid bool) { - switch input { - case "1", "true", "TRUE", "True": - return true, true - case "0", "false", "FALSE", "False": - return false, true - } - - // Not a valid bool value - return -} - -/****************************************************************************** -* Authentication * -******************************************************************************/ - -// Encrypt password using 4.1+ method -func scramblePassword(scramble, password []byte) []byte { - if len(password) == 0 { - return nil - } - - // stage1Hash = SHA1(password) - crypt := sha1.New() - crypt.Write(password) - stage1 := crypt.Sum(nil) - - // scrambleHash = SHA1(scramble + SHA1(stage1Hash)) - // inner Hash - crypt.Reset() - crypt.Write(stage1) - hash := crypt.Sum(nil) - - // outer Hash - crypt.Reset() - crypt.Write(scramble) - crypt.Write(hash) - scramble = crypt.Sum(nil) - - // token = scrambleHash XOR stage1Hash - for i := range scramble { - scramble[i] ^= stage1[i] - } - return scramble -} - -// Encrypt password using pre 4.1 (old password) method -// https://github.com/atcurtis/mariadb/blob/master/mysys/my_rnd.c -type myRnd struct { - seed1, seed2 uint32 -} - -const myRndMaxVal = 0x3FFFFFFF - -// Pseudo random number generator -func newMyRnd(seed1, seed2 uint32) *myRnd { - return &myRnd{ - seed1: seed1 % myRndMaxVal, - seed2: seed2 % myRndMaxVal, - } -} - -// Tested to be equivalent to MariaDB's floating point variant -// http://play.golang.org/p/QHvhd4qved -// http://play.golang.org/p/RG0q4ElWDx -func (r *myRnd) NextByte() byte { - r.seed1 = (r.seed1*3 + r.seed2) % myRndMaxVal - r.seed2 = (r.seed1 + r.seed2 + 33) % myRndMaxVal - - return byte(uint64(r.seed1) * 31 / myRndMaxVal) -} - -// Generate binary hash from byte string using insecure pre 4.1 method -func pwHash(password []byte) (result [2]uint32) { - var add uint32 = 7 - var tmp uint32 - - result[0] = 1345345333 - result[1] = 0x12345671 - - for _, c := range password { - // skip spaces and tabs in password - if c == ' ' || c == '\t' { - continue - } - - tmp = uint32(c) - result[0] ^= (((result[0] & 63) + add) * tmp) + (result[0] << 8) - result[1] += (result[1] << 8) ^ result[0] - add += tmp - } - - // Remove sign bit (1<<31)-1) - result[0] &= 0x7FFFFFFF - result[1] &= 0x7FFFFFFF - - return -} - -// Encrypt password using insecure pre 4.1 method -func scrambleOldPassword(scramble, password []byte) []byte { - if len(password) == 0 { - return nil - } - - scramble = scramble[:8] - - hashPw := pwHash(password) - hashSc := pwHash(scramble) - - r := newMyRnd(hashPw[0]^hashSc[0], hashPw[1]^hashSc[1]) - - var out [8]byte - for i := range out { - out[i] = r.NextByte() + 64 - } - - mask := r.NextByte() - for i := range out { - out[i] ^= mask - } - - return out[:] -} - -/****************************************************************************** -* Time related utils * -******************************************************************************/ - -// NullTime represents a time.Time that may be NULL. -// NullTime implements the Scanner interface so -// it can be used as a scan destination: -// -// var nt NullTime -// err := db.QueryRow("SELECT time FROM foo WHERE id=?", id).Scan(&nt) -// ... -// if nt.Valid { -// // use nt.Time -// } else { -// // NULL value -// } -// -// This NullTime implementation is not driver-specific -type NullTime struct { - Time time.Time - Valid bool // Valid is true if Time is not NULL -} - -// Scan implements the Scanner interface. -// The value type must be time.Time or string / []byte (formatted time-string), -// otherwise Scan fails. -func (nt *NullTime) Scan(value interface{}) (err error) { - if value == nil { - nt.Time, nt.Valid = time.Time{}, false - return - } - - switch v := value.(type) { - case time.Time: - nt.Time, nt.Valid = v, true - return - case []byte: - nt.Time, err = parseDateTime(string(v), time.UTC) - nt.Valid = (err == nil) - return - case string: - nt.Time, err = parseDateTime(v, time.UTC) - nt.Valid = (err == nil) - return - } - - nt.Valid = false - return fmt.Errorf("Can't convert %T to time.Time", value) -} - -// Value implements the driver Valuer interface. -func (nt NullTime) Value() (driver.Value, error) { - if !nt.Valid { - return nil, nil - } - return nt.Time, nil -} - -func parseDateTime(str string, loc *time.Location) (t time.Time, err error) { - base := "0000-00-00 00:00:00.0000000" - switch len(str) { - case 10, 19, 21, 22, 23, 24, 25, 26: // up to "YYYY-MM-DD HH:MM:SS.MMMMMM" - if str == base[:len(str)] { - return - } - t, err = time.Parse(timeFormat[:len(str)], str) - default: - err = fmt.Errorf("invalid time string: %s", str) - return - } - - // Adjust location - if err == nil && loc != time.UTC { - y, mo, d := t.Date() - h, mi, s := t.Clock() - t, err = time.Date(y, mo, d, h, mi, s, t.Nanosecond(), loc), nil - } - - return -} - -func parseBinaryDateTime(num uint64, data []byte, loc *time.Location) (driver.Value, error) { - switch num { - case 0: - return time.Time{}, nil - case 4: - return time.Date( - int(binary.LittleEndian.Uint16(data[:2])), // year - time.Month(data[2]), // month - int(data[3]), // day - 0, 0, 0, 0, - loc, - ), nil - case 7: - return time.Date( - int(binary.LittleEndian.Uint16(data[:2])), // year - time.Month(data[2]), // month - int(data[3]), // day - int(data[4]), // hour - int(data[5]), // minutes - int(data[6]), // seconds - 0, - loc, - ), nil - case 11: - return time.Date( - int(binary.LittleEndian.Uint16(data[:2])), // year - time.Month(data[2]), // month - int(data[3]), // day - int(data[4]), // hour - int(data[5]), // minutes - int(data[6]), // seconds - int(binary.LittleEndian.Uint32(data[7:11]))*1000, // nanoseconds - loc, - ), nil - } - return nil, fmt.Errorf("invalid DATETIME packet length %d", num) -} - -// zeroDateTime is used in formatBinaryDateTime to avoid an allocation -// if the DATE or DATETIME has the zero value. -// It must never be changed. -// The current behavior depends on database/sql copying the result. -var zeroDateTime = []byte("0000-00-00 00:00:00.000000") - -const digits01 = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" -const digits10 = "0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999" - -func formatBinaryDateTime(src []byte, length uint8, justTime bool) (driver.Value, error) { - // length expects the deterministic length of the zero value, - // negative time and 100+ hours are automatically added if needed - if len(src) == 0 { - if justTime { - return zeroDateTime[11 : 11+length], nil - } - return zeroDateTime[:length], nil - } - var dst []byte // return value - var pt, p1, p2, p3 byte // current digit pair - var zOffs byte // offset of value in zeroDateTime - if justTime { - switch length { - case - 8, // time (can be up to 10 when negative and 100+ hours) - 10, 11, 12, 13, 14, 15: // time with fractional seconds - default: - return nil, fmt.Errorf("illegal TIME length %d", length) - } - switch len(src) { - case 8, 12: - default: - return nil, fmt.Errorf("invalid TIME packet length %d", len(src)) - } - // +2 to enable negative time and 100+ hours - dst = make([]byte, 0, length+2) - if src[0] == 1 { - dst = append(dst, '-') - } - if src[1] != 0 { - hour := uint16(src[1])*24 + uint16(src[5]) - pt = byte(hour / 100) - p1 = byte(hour - 100*uint16(pt)) - dst = append(dst, digits01[pt]) - } else { - p1 = src[5] - } - zOffs = 11 - src = src[6:] - } else { - switch length { - case 10, 19, 21, 22, 23, 24, 25, 26: - default: - t := "DATE" - if length > 10 { - t += "TIME" - } - return nil, fmt.Errorf("illegal %s length %d", t, length) - } - switch len(src) { - case 4, 7, 11: - default: - t := "DATE" - if length > 10 { - t += "TIME" - } - return nil, fmt.Errorf("illegal %s packet length %d", t, len(src)) - } - dst = make([]byte, 0, length) - // start with the date - year := binary.LittleEndian.Uint16(src[:2]) - pt = byte(year / 100) - p1 = byte(year - 100*uint16(pt)) - p2, p3 = src[2], src[3] - dst = append(dst, - digits10[pt], digits01[pt], - digits10[p1], digits01[p1], '-', - digits10[p2], digits01[p2], '-', - digits10[p3], digits01[p3], - ) - if length == 10 { - return dst, nil - } - if len(src) == 4 { - return append(dst, zeroDateTime[10:length]...), nil - } - dst = append(dst, ' ') - p1 = src[4] // hour - src = src[5:] - } - // p1 is 2-digit hour, src is after hour - p2, p3 = src[0], src[1] - dst = append(dst, - digits10[p1], digits01[p1], ':', - digits10[p2], digits01[p2], ':', - digits10[p3], digits01[p3], - ) - if length <= byte(len(dst)) { - return dst, nil - } - src = src[2:] - if len(src) == 0 { - return append(dst, zeroDateTime[19:zOffs+length]...), nil - } - microsecs := binary.LittleEndian.Uint32(src[:4]) - p1 = byte(microsecs / 10000) - microsecs -= 10000 * uint32(p1) - p2 = byte(microsecs / 100) - microsecs -= 100 * uint32(p2) - p3 = byte(microsecs) - switch decimals := zOffs + length - 20; decimals { - default: - return append(dst, '.', - digits10[p1], digits01[p1], - digits10[p2], digits01[p2], - digits10[p3], digits01[p3], - ), nil - case 1: - return append(dst, '.', - digits10[p1], - ), nil - case 2: - return append(dst, '.', - digits10[p1], digits01[p1], - ), nil - case 3: - return append(dst, '.', - digits10[p1], digits01[p1], - digits10[p2], - ), nil - case 4: - return append(dst, '.', - digits10[p1], digits01[p1], - digits10[p2], digits01[p2], - ), nil - case 5: - return append(dst, '.', - digits10[p1], digits01[p1], - digits10[p2], digits01[p2], - digits10[p3], - ), nil - } -} - -/****************************************************************************** -* Convert from and to bytes * -******************************************************************************/ - -func uint64ToBytes(n uint64) []byte { - return []byte{ - byte(n), - byte(n >> 8), - byte(n >> 16), - byte(n >> 24), - byte(n >> 32), - byte(n >> 40), - byte(n >> 48), - byte(n >> 56), - } -} - -func uint64ToString(n uint64) []byte { - var a [20]byte - i := 20 - - // U+0030 = 0 - // ... - // U+0039 = 9 - - var q uint64 - for n >= 10 { - i-- - q = n / 10 - a[i] = uint8(n-q*10) + 0x30 - n = q - } - - i-- - a[i] = uint8(n) + 0x30 - - return a[i:] -} - -// treats string value as unsigned integer representation -func stringToInt(b []byte) int { - val := 0 - for i := range b { - val *= 10 - val += int(b[i] - 0x30) - } - return val -} - -// returns the string read as a bytes slice, wheter the value is NULL, -// the number of bytes read and an error, in case the string is longer than -// the input slice -func readLengthEncodedString(b []byte) ([]byte, bool, int, error) { - // Get length - num, isNull, n := readLengthEncodedInteger(b) - if num < 1 { - return b[n:n], isNull, n, nil - } - - n += int(num) - - // Check data length - if len(b) >= n { - return b[n-int(num) : n], false, n, nil - } - return nil, false, n, io.EOF -} - -// returns the number of bytes skipped and an error, in case the string is -// longer than the input slice -func skipLengthEncodedString(b []byte) (int, error) { - // Get length - num, _, n := readLengthEncodedInteger(b) - if num < 1 { - return n, nil - } - - n += int(num) - - // Check data length - if len(b) >= n { - return n, nil - } - return n, io.EOF -} - -// returns the number read, whether the value is NULL and the number of bytes read -func readLengthEncodedInteger(b []byte) (uint64, bool, int) { - // See issue #349 - if len(b) == 0 { - return 0, true, 1 - } - switch b[0] { - - // 251: NULL - case 0xfb: - return 0, true, 1 - - // 252: value of following 2 - case 0xfc: - return uint64(b[1]) | uint64(b[2])<<8, false, 3 - - // 253: value of following 3 - case 0xfd: - return uint64(b[1]) | uint64(b[2])<<8 | uint64(b[3])<<16, false, 4 - - // 254: value of following 8 - case 0xfe: - return uint64(b[1]) | uint64(b[2])<<8 | uint64(b[3])<<16 | - uint64(b[4])<<24 | uint64(b[5])<<32 | uint64(b[6])<<40 | - uint64(b[7])<<48 | uint64(b[8])<<56, - false, 9 - } - - // 0-250: value of first byte - return uint64(b[0]), false, 1 -} - -// encodes a uint64 value and appends it to the given bytes slice -func appendLengthEncodedInteger(b []byte, n uint64) []byte { - switch { - case n <= 250: - return append(b, byte(n)) - - case n <= 0xffff: - return append(b, 0xfc, byte(n), byte(n>>8)) - - case n <= 0xffffff: - return append(b, 0xfd, byte(n), byte(n>>8), byte(n>>16)) - } - return append(b, 0xfe, byte(n), byte(n>>8), byte(n>>16), byte(n>>24), - byte(n>>32), byte(n>>40), byte(n>>48), byte(n>>56)) -} - -// reserveBuffer checks cap(buf) and expand buffer to len(buf) + appendSize. -// If cap(buf) is not enough, reallocate new buffer. -func reserveBuffer(buf []byte, appendSize int) []byte { - newSize := len(buf) + appendSize - if cap(buf) < newSize { - // Grow buffer exponentially - newBuf := make([]byte, len(buf)*2+appendSize) - copy(newBuf, buf) - buf = newBuf - } - return buf[:newSize] -} - -// escapeBytesBackslash escapes []byte with backslashes (\) -// This escapes the contents of a string (provided as []byte) by adding backslashes before special -// characters, and turning others into specific escape sequences, such as -// turning newlines into \n and null bytes into \0. -// https://github.com/mysql/mysql-server/blob/mysql-5.7.5/mysys/charset.c#L823-L932 -func escapeBytesBackslash(buf, v []byte) []byte { - pos := len(buf) - buf = reserveBuffer(buf, len(v)*2) - - for _, c := range v { - switch c { - case '\x00': - buf[pos] = '\\' - buf[pos+1] = '0' - pos += 2 - case '\n': - buf[pos] = '\\' - buf[pos+1] = 'n' - pos += 2 - case '\r': - buf[pos] = '\\' - buf[pos+1] = 'r' - pos += 2 - case '\x1a': - buf[pos] = '\\' - buf[pos+1] = 'Z' - pos += 2 - case '\'': - buf[pos] = '\\' - buf[pos+1] = '\'' - pos += 2 - case '"': - buf[pos] = '\\' - buf[pos+1] = '"' - pos += 2 - case '\\': - buf[pos] = '\\' - buf[pos+1] = '\\' - pos += 2 - default: - buf[pos] = c - pos++ - } - } - - return buf[:pos] -} - -// escapeStringBackslash is similar to escapeBytesBackslash but for string. -func escapeStringBackslash(buf []byte, v string) []byte { - pos := len(buf) - buf = reserveBuffer(buf, len(v)*2) - - for i := 0; i < len(v); i++ { - c := v[i] - switch c { - case '\x00': - buf[pos] = '\\' - buf[pos+1] = '0' - pos += 2 - case '\n': - buf[pos] = '\\' - buf[pos+1] = 'n' - pos += 2 - case '\r': - buf[pos] = '\\' - buf[pos+1] = 'r' - pos += 2 - case '\x1a': - buf[pos] = '\\' - buf[pos+1] = 'Z' - pos += 2 - case '\'': - buf[pos] = '\\' - buf[pos+1] = '\'' - pos += 2 - case '"': - buf[pos] = '\\' - buf[pos+1] = '"' - pos += 2 - case '\\': - buf[pos] = '\\' - buf[pos+1] = '\\' - pos += 2 - default: - buf[pos] = c - pos++ - } - } - - return buf[:pos] -} - -// escapeBytesQuotes escapes apostrophes in []byte by doubling them up. -// This escapes the contents of a string by doubling up any apostrophes that -// it contains. This is used when the NO_BACKSLASH_ESCAPES SQL_MODE is in -// effect on the server. -// https://github.com/mysql/mysql-server/blob/mysql-5.7.5/mysys/charset.c#L963-L1038 -func escapeBytesQuotes(buf, v []byte) []byte { - pos := len(buf) - buf = reserveBuffer(buf, len(v)*2) - - for _, c := range v { - if c == '\'' { - buf[pos] = '\'' - buf[pos+1] = '\'' - pos += 2 - } else { - buf[pos] = c - pos++ - } - } - - return buf[:pos] -} - -// escapeStringQuotes is similar to escapeBytesQuotes but for string. -func escapeStringQuotes(buf []byte, v string) []byte { - pos := len(buf) - buf = reserveBuffer(buf, len(v)*2) - - for i := 0; i < len(v); i++ { - c := v[i] - if c == '\'' { - buf[pos] = '\'' - buf[pos+1] = '\'' - pos += 2 - } else { - buf[pos] = c - pos++ - } - } - - return buf[:pos] -} diff --git a/vendor/github.com/golang/protobuf/AUTHORS b/vendor/github.com/golang/protobuf/AUTHORS deleted file mode 100644 index 15167cd..0000000 --- a/vendor/github.com/golang/protobuf/AUTHORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code refers to The Go Authors for copyright purposes. -# The master list of authors is in the main Go distribution, -# visible at http://tip.golang.org/AUTHORS. diff --git a/vendor/github.com/golang/protobuf/CONTRIBUTORS b/vendor/github.com/golang/protobuf/CONTRIBUTORS deleted file mode 100644 index 1c4577e..0000000 --- a/vendor/github.com/golang/protobuf/CONTRIBUTORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code was written by the Go contributors. -# The master list of contributors is in the main Go distribution, -# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/github.com/golang/protobuf/LICENSE b/vendor/github.com/golang/protobuf/LICENSE deleted file mode 100644 index 1b1b192..0000000 --- a/vendor/github.com/golang/protobuf/LICENSE +++ /dev/null @@ -1,31 +0,0 @@ -Go support for Protocol Buffers - Google's data interchange format - -Copyright 2010 The Go Authors. All rights reserved. -https://github.com/golang/protobuf - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - diff --git a/vendor/github.com/golang/protobuf/proto/clone.go b/vendor/github.com/golang/protobuf/proto/clone.go deleted file mode 100644 index 3cd3249..0000000 --- a/vendor/github.com/golang/protobuf/proto/clone.go +++ /dev/null @@ -1,253 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2011 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Protocol buffer deep copy and merge. -// TODO: RawMessage. - -package proto - -import ( - "fmt" - "log" - "reflect" - "strings" -) - -// Clone returns a deep copy of a protocol buffer. -func Clone(src Message) Message { - in := reflect.ValueOf(src) - if in.IsNil() { - return src - } - out := reflect.New(in.Type().Elem()) - dst := out.Interface().(Message) - Merge(dst, src) - return dst -} - -// Merger is the interface representing objects that can merge messages of the same type. -type Merger interface { - // Merge merges src into this message. - // Required and optional fields that are set in src will be set to that value in dst. - // Elements of repeated fields will be appended. - // - // Merge may panic if called with a different argument type than the receiver. - Merge(src Message) -} - -// generatedMerger is the custom merge method that generated protos will have. -// We must add this method since a generate Merge method will conflict with -// many existing protos that have a Merge data field already defined. -type generatedMerger interface { - XXX_Merge(src Message) -} - -// Merge merges src into dst. -// Required and optional fields that are set in src will be set to that value in dst. -// Elements of repeated fields will be appended. -// Merge panics if src and dst are not the same type, or if dst is nil. -func Merge(dst, src Message) { - if m, ok := dst.(Merger); ok { - m.Merge(src) - return - } - - in := reflect.ValueOf(src) - out := reflect.ValueOf(dst) - if out.IsNil() { - panic("proto: nil destination") - } - if in.Type() != out.Type() { - panic(fmt.Sprintf("proto.Merge(%T, %T) type mismatch", dst, src)) - } - if in.IsNil() { - return // Merge from nil src is a noop - } - if m, ok := dst.(generatedMerger); ok { - m.XXX_Merge(src) - return - } - mergeStruct(out.Elem(), in.Elem()) -} - -func mergeStruct(out, in reflect.Value) { - sprop := GetProperties(in.Type()) - for i := 0; i < in.NumField(); i++ { - f := in.Type().Field(i) - if strings.HasPrefix(f.Name, "XXX_") { - continue - } - mergeAny(out.Field(i), in.Field(i), false, sprop.Prop[i]) - } - - if emIn, err := extendable(in.Addr().Interface()); err == nil { - emOut, _ := extendable(out.Addr().Interface()) - mIn, muIn := emIn.extensionsRead() - if mIn != nil { - mOut := emOut.extensionsWrite() - muIn.Lock() - mergeExtension(mOut, mIn) - muIn.Unlock() - } - } - - uf := in.FieldByName("XXX_unrecognized") - if !uf.IsValid() { - return - } - uin := uf.Bytes() - if len(uin) > 0 { - out.FieldByName("XXX_unrecognized").SetBytes(append([]byte(nil), uin...)) - } -} - -// mergeAny performs a merge between two values of the same type. -// viaPtr indicates whether the values were indirected through a pointer (implying proto2). -// prop is set if this is a struct field (it may be nil). -func mergeAny(out, in reflect.Value, viaPtr bool, prop *Properties) { - if in.Type() == protoMessageType { - if !in.IsNil() { - if out.IsNil() { - out.Set(reflect.ValueOf(Clone(in.Interface().(Message)))) - } else { - Merge(out.Interface().(Message), in.Interface().(Message)) - } - } - return - } - switch in.Kind() { - case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64, - reflect.String, reflect.Uint32, reflect.Uint64: - if !viaPtr && isProto3Zero(in) { - return - } - out.Set(in) - case reflect.Interface: - // Probably a oneof field; copy non-nil values. - if in.IsNil() { - return - } - // Allocate destination if it is not set, or set to a different type. - // Otherwise we will merge as normal. - if out.IsNil() || out.Elem().Type() != in.Elem().Type() { - out.Set(reflect.New(in.Elem().Elem().Type())) // interface -> *T -> T -> new(T) - } - mergeAny(out.Elem(), in.Elem(), false, nil) - case reflect.Map: - if in.Len() == 0 { - return - } - if out.IsNil() { - out.Set(reflect.MakeMap(in.Type())) - } - // For maps with value types of *T or []byte we need to deep copy each value. - elemKind := in.Type().Elem().Kind() - for _, key := range in.MapKeys() { - var val reflect.Value - switch elemKind { - case reflect.Ptr: - val = reflect.New(in.Type().Elem().Elem()) - mergeAny(val, in.MapIndex(key), false, nil) - case reflect.Slice: - val = in.MapIndex(key) - val = reflect.ValueOf(append([]byte{}, val.Bytes()...)) - default: - val = in.MapIndex(key) - } - out.SetMapIndex(key, val) - } - case reflect.Ptr: - if in.IsNil() { - return - } - if out.IsNil() { - out.Set(reflect.New(in.Elem().Type())) - } - mergeAny(out.Elem(), in.Elem(), true, nil) - case reflect.Slice: - if in.IsNil() { - return - } - if in.Type().Elem().Kind() == reflect.Uint8 { - // []byte is a scalar bytes field, not a repeated field. - - // Edge case: if this is in a proto3 message, a zero length - // bytes field is considered the zero value, and should not - // be merged. - if prop != nil && prop.proto3 && in.Len() == 0 { - return - } - - // Make a deep copy. - // Append to []byte{} instead of []byte(nil) so that we never end up - // with a nil result. - out.SetBytes(append([]byte{}, in.Bytes()...)) - return - } - n := in.Len() - if out.IsNil() { - out.Set(reflect.MakeSlice(in.Type(), 0, n)) - } - switch in.Type().Elem().Kind() { - case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64, - reflect.String, reflect.Uint32, reflect.Uint64: - out.Set(reflect.AppendSlice(out, in)) - default: - for i := 0; i < n; i++ { - x := reflect.Indirect(reflect.New(in.Type().Elem())) - mergeAny(x, in.Index(i), false, nil) - out.Set(reflect.Append(out, x)) - } - } - case reflect.Struct: - mergeStruct(out, in) - default: - // unknown type, so not a protocol buffer - log.Printf("proto: don't know how to copy %v", in) - } -} - -func mergeExtension(out, in map[int32]Extension) { - for extNum, eIn := range in { - eOut := Extension{desc: eIn.desc} - if eIn.value != nil { - v := reflect.New(reflect.TypeOf(eIn.value)).Elem() - mergeAny(v, reflect.ValueOf(eIn.value), false, nil) - eOut.value = v.Interface() - } - if eIn.enc != nil { - eOut.enc = make([]byte, len(eIn.enc)) - copy(eOut.enc, eIn.enc) - } - - out[extNum] = eOut - } -} diff --git a/vendor/github.com/golang/protobuf/proto/decode.go b/vendor/github.com/golang/protobuf/proto/decode.go deleted file mode 100644 index d9aa3c4..0000000 --- a/vendor/github.com/golang/protobuf/proto/decode.go +++ /dev/null @@ -1,428 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -/* - * Routines for decoding protocol buffer data to construct in-memory representations. - */ - -import ( - "errors" - "fmt" - "io" -) - -// errOverflow is returned when an integer is too large to be represented. -var errOverflow = errors.New("proto: integer overflow") - -// ErrInternalBadWireType is returned by generated code when an incorrect -// wire type is encountered. It does not get returned to user code. -var ErrInternalBadWireType = errors.New("proto: internal error: bad wiretype for oneof") - -// DecodeVarint reads a varint-encoded integer from the slice. -// It returns the integer and the number of bytes consumed, or -// zero if there is not enough. -// This is the format for the -// int32, int64, uint32, uint64, bool, and enum -// protocol buffer types. -func DecodeVarint(buf []byte) (x uint64, n int) { - for shift := uint(0); shift < 64; shift += 7 { - if n >= len(buf) { - return 0, 0 - } - b := uint64(buf[n]) - n++ - x |= (b & 0x7F) << shift - if (b & 0x80) == 0 { - return x, n - } - } - - // The number is too large to represent in a 64-bit value. - return 0, 0 -} - -func (p *Buffer) decodeVarintSlow() (x uint64, err error) { - i := p.index - l := len(p.buf) - - for shift := uint(0); shift < 64; shift += 7 { - if i >= l { - err = io.ErrUnexpectedEOF - return - } - b := p.buf[i] - i++ - x |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - p.index = i - return - } - } - - // The number is too large to represent in a 64-bit value. - err = errOverflow - return -} - -// DecodeVarint reads a varint-encoded integer from the Buffer. -// This is the format for the -// int32, int64, uint32, uint64, bool, and enum -// protocol buffer types. -func (p *Buffer) DecodeVarint() (x uint64, err error) { - i := p.index - buf := p.buf - - if i >= len(buf) { - return 0, io.ErrUnexpectedEOF - } else if buf[i] < 0x80 { - p.index++ - return uint64(buf[i]), nil - } else if len(buf)-i < 10 { - return p.decodeVarintSlow() - } - - var b uint64 - // we already checked the first byte - x = uint64(buf[i]) - 0x80 - i++ - - b = uint64(buf[i]) - i++ - x += b << 7 - if b&0x80 == 0 { - goto done - } - x -= 0x80 << 7 - - b = uint64(buf[i]) - i++ - x += b << 14 - if b&0x80 == 0 { - goto done - } - x -= 0x80 << 14 - - b = uint64(buf[i]) - i++ - x += b << 21 - if b&0x80 == 0 { - goto done - } - x -= 0x80 << 21 - - b = uint64(buf[i]) - i++ - x += b << 28 - if b&0x80 == 0 { - goto done - } - x -= 0x80 << 28 - - b = uint64(buf[i]) - i++ - x += b << 35 - if b&0x80 == 0 { - goto done - } - x -= 0x80 << 35 - - b = uint64(buf[i]) - i++ - x += b << 42 - if b&0x80 == 0 { - goto done - } - x -= 0x80 << 42 - - b = uint64(buf[i]) - i++ - x += b << 49 - if b&0x80 == 0 { - goto done - } - x -= 0x80 << 49 - - b = uint64(buf[i]) - i++ - x += b << 56 - if b&0x80 == 0 { - goto done - } - x -= 0x80 << 56 - - b = uint64(buf[i]) - i++ - x += b << 63 - if b&0x80 == 0 { - goto done - } - // x -= 0x80 << 63 // Always zero. - - return 0, errOverflow - -done: - p.index = i - return x, nil -} - -// DecodeFixed64 reads a 64-bit integer from the Buffer. -// This is the format for the -// fixed64, sfixed64, and double protocol buffer types. -func (p *Buffer) DecodeFixed64() (x uint64, err error) { - // x, err already 0 - i := p.index + 8 - if i < 0 || i > len(p.buf) { - err = io.ErrUnexpectedEOF - return - } - p.index = i - - x = uint64(p.buf[i-8]) - x |= uint64(p.buf[i-7]) << 8 - x |= uint64(p.buf[i-6]) << 16 - x |= uint64(p.buf[i-5]) << 24 - x |= uint64(p.buf[i-4]) << 32 - x |= uint64(p.buf[i-3]) << 40 - x |= uint64(p.buf[i-2]) << 48 - x |= uint64(p.buf[i-1]) << 56 - return -} - -// DecodeFixed32 reads a 32-bit integer from the Buffer. -// This is the format for the -// fixed32, sfixed32, and float protocol buffer types. -func (p *Buffer) DecodeFixed32() (x uint64, err error) { - // x, err already 0 - i := p.index + 4 - if i < 0 || i > len(p.buf) { - err = io.ErrUnexpectedEOF - return - } - p.index = i - - x = uint64(p.buf[i-4]) - x |= uint64(p.buf[i-3]) << 8 - x |= uint64(p.buf[i-2]) << 16 - x |= uint64(p.buf[i-1]) << 24 - return -} - -// DecodeZigzag64 reads a zigzag-encoded 64-bit integer -// from the Buffer. -// This is the format used for the sint64 protocol buffer type. -func (p *Buffer) DecodeZigzag64() (x uint64, err error) { - x, err = p.DecodeVarint() - if err != nil { - return - } - x = (x >> 1) ^ uint64((int64(x&1)<<63)>>63) - return -} - -// DecodeZigzag32 reads a zigzag-encoded 32-bit integer -// from the Buffer. -// This is the format used for the sint32 protocol buffer type. -func (p *Buffer) DecodeZigzag32() (x uint64, err error) { - x, err = p.DecodeVarint() - if err != nil { - return - } - x = uint64((uint32(x) >> 1) ^ uint32((int32(x&1)<<31)>>31)) - return -} - -// DecodeRawBytes reads a count-delimited byte buffer from the Buffer. -// This is the format used for the bytes protocol buffer -// type and for embedded messages. -func (p *Buffer) DecodeRawBytes(alloc bool) (buf []byte, err error) { - n, err := p.DecodeVarint() - if err != nil { - return nil, err - } - - nb := int(n) - if nb < 0 { - return nil, fmt.Errorf("proto: bad byte length %d", nb) - } - end := p.index + nb - if end < p.index || end > len(p.buf) { - return nil, io.ErrUnexpectedEOF - } - - if !alloc { - // todo: check if can get more uses of alloc=false - buf = p.buf[p.index:end] - p.index += nb - return - } - - buf = make([]byte, nb) - copy(buf, p.buf[p.index:]) - p.index += nb - return -} - -// DecodeStringBytes reads an encoded string from the Buffer. -// This is the format used for the proto2 string type. -func (p *Buffer) DecodeStringBytes() (s string, err error) { - buf, err := p.DecodeRawBytes(false) - if err != nil { - return - } - return string(buf), nil -} - -// Unmarshaler is the interface representing objects that can -// unmarshal themselves. The argument points to data that may be -// overwritten, so implementations should not keep references to the -// buffer. -// Unmarshal implementations should not clear the receiver. -// Any unmarshaled data should be merged into the receiver. -// Callers of Unmarshal that do not want to retain existing data -// should Reset the receiver before calling Unmarshal. -type Unmarshaler interface { - Unmarshal([]byte) error -} - -// newUnmarshaler is the interface representing objects that can -// unmarshal themselves. The semantics are identical to Unmarshaler. -// -// This exists to support protoc-gen-go generated messages. -// The proto package will stop type-asserting to this interface in the future. -// -// DO NOT DEPEND ON THIS. -type newUnmarshaler interface { - XXX_Unmarshal([]byte) error -} - -// Unmarshal parses the protocol buffer representation in buf and places the -// decoded result in pb. If the struct underlying pb does not match -// the data in buf, the results can be unpredictable. -// -// Unmarshal resets pb before starting to unmarshal, so any -// existing data in pb is always removed. Use UnmarshalMerge -// to preserve and append to existing data. -func Unmarshal(buf []byte, pb Message) error { - pb.Reset() - if u, ok := pb.(newUnmarshaler); ok { - return u.XXX_Unmarshal(buf) - } - if u, ok := pb.(Unmarshaler); ok { - return u.Unmarshal(buf) - } - return NewBuffer(buf).Unmarshal(pb) -} - -// UnmarshalMerge parses the protocol buffer representation in buf and -// writes the decoded result to pb. If the struct underlying pb does not match -// the data in buf, the results can be unpredictable. -// -// UnmarshalMerge merges into existing data in pb. -// Most code should use Unmarshal instead. -func UnmarshalMerge(buf []byte, pb Message) error { - if u, ok := pb.(newUnmarshaler); ok { - return u.XXX_Unmarshal(buf) - } - if u, ok := pb.(Unmarshaler); ok { - // NOTE: The history of proto have unfortunately been inconsistent - // whether Unmarshaler should or should not implicitly clear itself. - // Some implementations do, most do not. - // Thus, calling this here may or may not do what people want. - // - // See https://github.com/golang/protobuf/issues/424 - return u.Unmarshal(buf) - } - return NewBuffer(buf).Unmarshal(pb) -} - -// DecodeMessage reads a count-delimited message from the Buffer. -func (p *Buffer) DecodeMessage(pb Message) error { - enc, err := p.DecodeRawBytes(false) - if err != nil { - return err - } - return NewBuffer(enc).Unmarshal(pb) -} - -// DecodeGroup reads a tag-delimited group from the Buffer. -// StartGroup tag is already consumed. This function consumes -// EndGroup tag. -func (p *Buffer) DecodeGroup(pb Message) error { - b := p.buf[p.index:] - x, y := findEndGroup(b) - if x < 0 { - return io.ErrUnexpectedEOF - } - err := Unmarshal(b[:x], pb) - p.index += y - return err -} - -// Unmarshal parses the protocol buffer representation in the -// Buffer and places the decoded result in pb. If the struct -// underlying pb does not match the data in the buffer, the results can be -// unpredictable. -// -// Unlike proto.Unmarshal, this does not reset pb before starting to unmarshal. -func (p *Buffer) Unmarshal(pb Message) error { - // If the object can unmarshal itself, let it. - if u, ok := pb.(newUnmarshaler); ok { - err := u.XXX_Unmarshal(p.buf[p.index:]) - p.index = len(p.buf) - return err - } - if u, ok := pb.(Unmarshaler); ok { - // NOTE: The history of proto have unfortunately been inconsistent - // whether Unmarshaler should or should not implicitly clear itself. - // Some implementations do, most do not. - // Thus, calling this here may or may not do what people want. - // - // See https://github.com/golang/protobuf/issues/424 - err := u.Unmarshal(p.buf[p.index:]) - p.index = len(p.buf) - return err - } - - // Slow workaround for messages that aren't Unmarshalers. - // This includes some hand-coded .pb.go files and - // bootstrap protos. - // TODO: fix all of those and then add Unmarshal to - // the Message interface. Then: - // The cast above and code below can be deleted. - // The old unmarshaler can be deleted. - // Clients can call Unmarshal directly (can already do that, actually). - var info InternalMessageInfo - err := info.Unmarshal(pb, p.buf[p.index:]) - p.index = len(p.buf) - return err -} diff --git a/vendor/github.com/golang/protobuf/proto/discard.go b/vendor/github.com/golang/protobuf/proto/discard.go deleted file mode 100644 index dea2617..0000000 --- a/vendor/github.com/golang/protobuf/proto/discard.go +++ /dev/null @@ -1,350 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2017 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -import ( - "fmt" - "reflect" - "strings" - "sync" - "sync/atomic" -) - -type generatedDiscarder interface { - XXX_DiscardUnknown() -} - -// DiscardUnknown recursively discards all unknown fields from this message -// and all embedded messages. -// -// When unmarshaling a message with unrecognized fields, the tags and values -// of such fields are preserved in the Message. This allows a later call to -// marshal to be able to produce a message that continues to have those -// unrecognized fields. To avoid this, DiscardUnknown is used to -// explicitly clear the unknown fields after unmarshaling. -// -// For proto2 messages, the unknown fields of message extensions are only -// discarded from messages that have been accessed via GetExtension. -func DiscardUnknown(m Message) { - if m, ok := m.(generatedDiscarder); ok { - m.XXX_DiscardUnknown() - return - } - // TODO: Dynamically populate a InternalMessageInfo for legacy messages, - // but the master branch has no implementation for InternalMessageInfo, - // so it would be more work to replicate that approach. - discardLegacy(m) -} - -// DiscardUnknown recursively discards all unknown fields. -func (a *InternalMessageInfo) DiscardUnknown(m Message) { - di := atomicLoadDiscardInfo(&a.discard) - if di == nil { - di = getDiscardInfo(reflect.TypeOf(m).Elem()) - atomicStoreDiscardInfo(&a.discard, di) - } - di.discard(toPointer(&m)) -} - -type discardInfo struct { - typ reflect.Type - - initialized int32 // 0: only typ is valid, 1: everything is valid - lock sync.Mutex - - fields []discardFieldInfo - unrecognized field -} - -type discardFieldInfo struct { - field field // Offset of field, guaranteed to be valid - discard func(src pointer) -} - -var ( - discardInfoMap = map[reflect.Type]*discardInfo{} - discardInfoLock sync.Mutex -) - -func getDiscardInfo(t reflect.Type) *discardInfo { - discardInfoLock.Lock() - defer discardInfoLock.Unlock() - di := discardInfoMap[t] - if di == nil { - di = &discardInfo{typ: t} - discardInfoMap[t] = di - } - return di -} - -func (di *discardInfo) discard(src pointer) { - if src.isNil() { - return // Nothing to do. - } - - if atomic.LoadInt32(&di.initialized) == 0 { - di.computeDiscardInfo() - } - - for _, fi := range di.fields { - sfp := src.offset(fi.field) - fi.discard(sfp) - } - - // For proto2 messages, only discard unknown fields in message extensions - // that have been accessed via GetExtension. - if em, err := extendable(src.asPointerTo(di.typ).Interface()); err == nil { - // Ignore lock since DiscardUnknown is not concurrency safe. - emm, _ := em.extensionsRead() - for _, mx := range emm { - if m, ok := mx.value.(Message); ok { - DiscardUnknown(m) - } - } - } - - if di.unrecognized.IsValid() { - *src.offset(di.unrecognized).toBytes() = nil - } -} - -func (di *discardInfo) computeDiscardInfo() { - di.lock.Lock() - defer di.lock.Unlock() - if di.initialized != 0 { - return - } - t := di.typ - n := t.NumField() - - for i := 0; i < n; i++ { - f := t.Field(i) - if strings.HasPrefix(f.Name, "XXX_") { - continue - } - - dfi := discardFieldInfo{field: toField(&f)} - tf := f.Type - - // Unwrap tf to get its most basic type. - var isPointer, isSlice bool - if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { - isSlice = true - tf = tf.Elem() - } - if tf.Kind() == reflect.Ptr { - isPointer = true - tf = tf.Elem() - } - if isPointer && isSlice && tf.Kind() != reflect.Struct { - panic(fmt.Sprintf("%v.%s cannot be a slice of pointers to primitive types", t, f.Name)) - } - - switch tf.Kind() { - case reflect.Struct: - switch { - case !isPointer: - panic(fmt.Sprintf("%v.%s cannot be a direct struct value", t, f.Name)) - case isSlice: // E.g., []*pb.T - di := getDiscardInfo(tf) - dfi.discard = func(src pointer) { - sps := src.getPointerSlice() - for _, sp := range sps { - if !sp.isNil() { - di.discard(sp) - } - } - } - default: // E.g., *pb.T - di := getDiscardInfo(tf) - dfi.discard = func(src pointer) { - sp := src.getPointer() - if !sp.isNil() { - di.discard(sp) - } - } - } - case reflect.Map: - switch { - case isPointer || isSlice: - panic(fmt.Sprintf("%v.%s cannot be a pointer to a map or a slice of map values", t, f.Name)) - default: // E.g., map[K]V - if tf.Elem().Kind() == reflect.Ptr { // Proto struct (e.g., *T) - dfi.discard = func(src pointer) { - sm := src.asPointerTo(tf).Elem() - if sm.Len() == 0 { - return - } - for _, key := range sm.MapKeys() { - val := sm.MapIndex(key) - DiscardUnknown(val.Interface().(Message)) - } - } - } else { - dfi.discard = func(pointer) {} // Noop - } - } - case reflect.Interface: - // Must be oneof field. - switch { - case isPointer || isSlice: - panic(fmt.Sprintf("%v.%s cannot be a pointer to a interface or a slice of interface values", t, f.Name)) - default: // E.g., interface{} - // TODO: Make this faster? - dfi.discard = func(src pointer) { - su := src.asPointerTo(tf).Elem() - if !su.IsNil() { - sv := su.Elem().Elem().Field(0) - if sv.Kind() == reflect.Ptr && sv.IsNil() { - return - } - switch sv.Type().Kind() { - case reflect.Ptr: // Proto struct (e.g., *T) - DiscardUnknown(sv.Interface().(Message)) - } - } - } - } - default: - continue - } - di.fields = append(di.fields, dfi) - } - - di.unrecognized = invalidField - if f, ok := t.FieldByName("XXX_unrecognized"); ok { - if f.Type != reflect.TypeOf([]byte{}) { - panic("expected XXX_unrecognized to be of type []byte") - } - di.unrecognized = toField(&f) - } - - atomic.StoreInt32(&di.initialized, 1) -} - -func discardLegacy(m Message) { - v := reflect.ValueOf(m) - if v.Kind() != reflect.Ptr || v.IsNil() { - return - } - v = v.Elem() - if v.Kind() != reflect.Struct { - return - } - t := v.Type() - - for i := 0; i < v.NumField(); i++ { - f := t.Field(i) - if strings.HasPrefix(f.Name, "XXX_") { - continue - } - vf := v.Field(i) - tf := f.Type - - // Unwrap tf to get its most basic type. - var isPointer, isSlice bool - if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { - isSlice = true - tf = tf.Elem() - } - if tf.Kind() == reflect.Ptr { - isPointer = true - tf = tf.Elem() - } - if isPointer && isSlice && tf.Kind() != reflect.Struct { - panic(fmt.Sprintf("%T.%s cannot be a slice of pointers to primitive types", m, f.Name)) - } - - switch tf.Kind() { - case reflect.Struct: - switch { - case !isPointer: - panic(fmt.Sprintf("%T.%s cannot be a direct struct value", m, f.Name)) - case isSlice: // E.g., []*pb.T - for j := 0; j < vf.Len(); j++ { - discardLegacy(vf.Index(j).Interface().(Message)) - } - default: // E.g., *pb.T - discardLegacy(vf.Interface().(Message)) - } - case reflect.Map: - switch { - case isPointer || isSlice: - panic(fmt.Sprintf("%T.%s cannot be a pointer to a map or a slice of map values", m, f.Name)) - default: // E.g., map[K]V - tv := vf.Type().Elem() - if tv.Kind() == reflect.Ptr && tv.Implements(protoMessageType) { // Proto struct (e.g., *T) - for _, key := range vf.MapKeys() { - val := vf.MapIndex(key) - discardLegacy(val.Interface().(Message)) - } - } - } - case reflect.Interface: - // Must be oneof field. - switch { - case isPointer || isSlice: - panic(fmt.Sprintf("%T.%s cannot be a pointer to a interface or a slice of interface values", m, f.Name)) - default: // E.g., test_proto.isCommunique_Union interface - if !vf.IsNil() && f.Tag.Get("protobuf_oneof") != "" { - vf = vf.Elem() // E.g., *test_proto.Communique_Msg - if !vf.IsNil() { - vf = vf.Elem() // E.g., test_proto.Communique_Msg - vf = vf.Field(0) // E.g., Proto struct (e.g., *T) or primitive value - if vf.Kind() == reflect.Ptr { - discardLegacy(vf.Interface().(Message)) - } - } - } - } - } - } - - if vf := v.FieldByName("XXX_unrecognized"); vf.IsValid() { - if vf.Type() != reflect.TypeOf([]byte{}) { - panic("expected XXX_unrecognized to be of type []byte") - } - vf.Set(reflect.ValueOf([]byte(nil))) - } - - // For proto2 messages, only discard unknown fields in message extensions - // that have been accessed via GetExtension. - if em, err := extendable(m); err == nil { - // Ignore lock since discardLegacy is not concurrency safe. - emm, _ := em.extensionsRead() - for _, mx := range emm { - if m, ok := mx.value.(Message); ok { - discardLegacy(m) - } - } - } -} diff --git a/vendor/github.com/golang/protobuf/proto/encode.go b/vendor/github.com/golang/protobuf/proto/encode.go deleted file mode 100644 index c27d35f..0000000 --- a/vendor/github.com/golang/protobuf/proto/encode.go +++ /dev/null @@ -1,221 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -/* - * Routines for encoding data into the wire format for protocol buffers. - */ - -import ( - "errors" - "fmt" - "reflect" -) - -// RequiredNotSetError is the error returned if Marshal is called with -// a protocol buffer struct whose required fields have not -// all been initialized. It is also the error returned if Unmarshal is -// called with an encoded protocol buffer that does not include all the -// required fields. -// -// When printed, RequiredNotSetError reports the first unset required field in a -// message. If the field cannot be precisely determined, it is reported as -// "{Unknown}". -type RequiredNotSetError struct { - field string -} - -func (e *RequiredNotSetError) Error() string { - return fmt.Sprintf("proto: required field %q not set", e.field) -} - -var ( - // errRepeatedHasNil is the error returned if Marshal is called with - // a struct with a repeated field containing a nil element. - errRepeatedHasNil = errors.New("proto: repeated field has nil element") - - // errOneofHasNil is the error returned if Marshal is called with - // a struct with a oneof field containing a nil element. - errOneofHasNil = errors.New("proto: oneof field has nil value") - - // ErrNil is the error returned if Marshal is called with nil. - ErrNil = errors.New("proto: Marshal called with nil") - - // ErrTooLarge is the error returned if Marshal is called with a - // message that encodes to >2GB. - ErrTooLarge = errors.New("proto: message encodes to over 2 GB") -) - -// The fundamental encoders that put bytes on the wire. -// Those that take integer types all accept uint64 and are -// therefore of type valueEncoder. - -const maxVarintBytes = 10 // maximum length of a varint - -// EncodeVarint returns the varint encoding of x. -// This is the format for the -// int32, int64, uint32, uint64, bool, and enum -// protocol buffer types. -// Not used by the package itself, but helpful to clients -// wishing to use the same encoding. -func EncodeVarint(x uint64) []byte { - var buf [maxVarintBytes]byte - var n int - for n = 0; x > 127; n++ { - buf[n] = 0x80 | uint8(x&0x7F) - x >>= 7 - } - buf[n] = uint8(x) - n++ - return buf[0:n] -} - -// EncodeVarint writes a varint-encoded integer to the Buffer. -// This is the format for the -// int32, int64, uint32, uint64, bool, and enum -// protocol buffer types. -func (p *Buffer) EncodeVarint(x uint64) error { - for x >= 1<<7 { - p.buf = append(p.buf, uint8(x&0x7f|0x80)) - x >>= 7 - } - p.buf = append(p.buf, uint8(x)) - return nil -} - -// SizeVarint returns the varint encoding size of an integer. -func SizeVarint(x uint64) int { - switch { - case x < 1<<7: - return 1 - case x < 1<<14: - return 2 - case x < 1<<21: - return 3 - case x < 1<<28: - return 4 - case x < 1<<35: - return 5 - case x < 1<<42: - return 6 - case x < 1<<49: - return 7 - case x < 1<<56: - return 8 - case x < 1<<63: - return 9 - } - return 10 -} - -// EncodeFixed64 writes a 64-bit integer to the Buffer. -// This is the format for the -// fixed64, sfixed64, and double protocol buffer types. -func (p *Buffer) EncodeFixed64(x uint64) error { - p.buf = append(p.buf, - uint8(x), - uint8(x>>8), - uint8(x>>16), - uint8(x>>24), - uint8(x>>32), - uint8(x>>40), - uint8(x>>48), - uint8(x>>56)) - return nil -} - -// EncodeFixed32 writes a 32-bit integer to the Buffer. -// This is the format for the -// fixed32, sfixed32, and float protocol buffer types. -func (p *Buffer) EncodeFixed32(x uint64) error { - p.buf = append(p.buf, - uint8(x), - uint8(x>>8), - uint8(x>>16), - uint8(x>>24)) - return nil -} - -// EncodeZigzag64 writes a zigzag-encoded 64-bit integer -// to the Buffer. -// This is the format used for the sint64 protocol buffer type. -func (p *Buffer) EncodeZigzag64(x uint64) error { - // use signed number to get arithmetic right shift. - return p.EncodeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} - -// EncodeZigzag32 writes a zigzag-encoded 32-bit integer -// to the Buffer. -// This is the format used for the sint32 protocol buffer type. -func (p *Buffer) EncodeZigzag32(x uint64) error { - // use signed number to get arithmetic right shift. - return p.EncodeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31)))) -} - -// EncodeRawBytes writes a count-delimited byte buffer to the Buffer. -// This is the format used for the bytes protocol buffer -// type and for embedded messages. -func (p *Buffer) EncodeRawBytes(b []byte) error { - p.EncodeVarint(uint64(len(b))) - p.buf = append(p.buf, b...) - return nil -} - -// EncodeStringBytes writes an encoded string to the Buffer. -// This is the format used for the proto2 string type. -func (p *Buffer) EncodeStringBytes(s string) error { - p.EncodeVarint(uint64(len(s))) - p.buf = append(p.buf, s...) - return nil -} - -// Marshaler is the interface representing objects that can marshal themselves. -type Marshaler interface { - Marshal() ([]byte, error) -} - -// EncodeMessage writes the protocol buffer to the Buffer, -// prefixed by a varint-encoded length. -func (p *Buffer) EncodeMessage(pb Message) error { - siz := Size(pb) - p.EncodeVarint(uint64(siz)) - return p.Marshal(pb) -} - -// All protocol buffer fields are nillable, but be careful. -func isNil(v reflect.Value) bool { - switch v.Kind() { - case reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice: - return v.IsNil() - } - return false -} diff --git a/vendor/github.com/golang/protobuf/proto/equal.go b/vendor/github.com/golang/protobuf/proto/equal.go deleted file mode 100644 index d4db5a1..0000000 --- a/vendor/github.com/golang/protobuf/proto/equal.go +++ /dev/null @@ -1,300 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2011 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Protocol buffer comparison. - -package proto - -import ( - "bytes" - "log" - "reflect" - "strings" -) - -/* -Equal returns true iff protocol buffers a and b are equal. -The arguments must both be pointers to protocol buffer structs. - -Equality is defined in this way: - - Two messages are equal iff they are the same type, - corresponding fields are equal, unknown field sets - are equal, and extensions sets are equal. - - Two set scalar fields are equal iff their values are equal. - If the fields are of a floating-point type, remember that - NaN != x for all x, including NaN. If the message is defined - in a proto3 .proto file, fields are not "set"; specifically, - zero length proto3 "bytes" fields are equal (nil == {}). - - Two repeated fields are equal iff their lengths are the same, - and their corresponding elements are equal. Note a "bytes" field, - although represented by []byte, is not a repeated field and the - rule for the scalar fields described above applies. - - Two unset fields are equal. - - Two unknown field sets are equal if their current - encoded state is equal. - - Two extension sets are equal iff they have corresponding - elements that are pairwise equal. - - Two map fields are equal iff their lengths are the same, - and they contain the same set of elements. Zero-length map - fields are equal. - - Every other combination of things are not equal. - -The return value is undefined if a and b are not protocol buffers. -*/ -func Equal(a, b Message) bool { - if a == nil || b == nil { - return a == b - } - v1, v2 := reflect.ValueOf(a), reflect.ValueOf(b) - if v1.Type() != v2.Type() { - return false - } - if v1.Kind() == reflect.Ptr { - if v1.IsNil() { - return v2.IsNil() - } - if v2.IsNil() { - return false - } - v1, v2 = v1.Elem(), v2.Elem() - } - if v1.Kind() != reflect.Struct { - return false - } - return equalStruct(v1, v2) -} - -// v1 and v2 are known to have the same type. -func equalStruct(v1, v2 reflect.Value) bool { - sprop := GetProperties(v1.Type()) - for i := 0; i < v1.NumField(); i++ { - f := v1.Type().Field(i) - if strings.HasPrefix(f.Name, "XXX_") { - continue - } - f1, f2 := v1.Field(i), v2.Field(i) - if f.Type.Kind() == reflect.Ptr { - if n1, n2 := f1.IsNil(), f2.IsNil(); n1 && n2 { - // both unset - continue - } else if n1 != n2 { - // set/unset mismatch - return false - } - f1, f2 = f1.Elem(), f2.Elem() - } - if !equalAny(f1, f2, sprop.Prop[i]) { - return false - } - } - - if em1 := v1.FieldByName("XXX_InternalExtensions"); em1.IsValid() { - em2 := v2.FieldByName("XXX_InternalExtensions") - if !equalExtensions(v1.Type(), em1.Interface().(XXX_InternalExtensions), em2.Interface().(XXX_InternalExtensions)) { - return false - } - } - - if em1 := v1.FieldByName("XXX_extensions"); em1.IsValid() { - em2 := v2.FieldByName("XXX_extensions") - if !equalExtMap(v1.Type(), em1.Interface().(map[int32]Extension), em2.Interface().(map[int32]Extension)) { - return false - } - } - - uf := v1.FieldByName("XXX_unrecognized") - if !uf.IsValid() { - return true - } - - u1 := uf.Bytes() - u2 := v2.FieldByName("XXX_unrecognized").Bytes() - return bytes.Equal(u1, u2) -} - -// v1 and v2 are known to have the same type. -// prop may be nil. -func equalAny(v1, v2 reflect.Value, prop *Properties) bool { - if v1.Type() == protoMessageType { - m1, _ := v1.Interface().(Message) - m2, _ := v2.Interface().(Message) - return Equal(m1, m2) - } - switch v1.Kind() { - case reflect.Bool: - return v1.Bool() == v2.Bool() - case reflect.Float32, reflect.Float64: - return v1.Float() == v2.Float() - case reflect.Int32, reflect.Int64: - return v1.Int() == v2.Int() - case reflect.Interface: - // Probably a oneof field; compare the inner values. - n1, n2 := v1.IsNil(), v2.IsNil() - if n1 || n2 { - return n1 == n2 - } - e1, e2 := v1.Elem(), v2.Elem() - if e1.Type() != e2.Type() { - return false - } - return equalAny(e1, e2, nil) - case reflect.Map: - if v1.Len() != v2.Len() { - return false - } - for _, key := range v1.MapKeys() { - val2 := v2.MapIndex(key) - if !val2.IsValid() { - // This key was not found in the second map. - return false - } - if !equalAny(v1.MapIndex(key), val2, nil) { - return false - } - } - return true - case reflect.Ptr: - // Maps may have nil values in them, so check for nil. - if v1.IsNil() && v2.IsNil() { - return true - } - if v1.IsNil() != v2.IsNil() { - return false - } - return equalAny(v1.Elem(), v2.Elem(), prop) - case reflect.Slice: - if v1.Type().Elem().Kind() == reflect.Uint8 { - // short circuit: []byte - - // Edge case: if this is in a proto3 message, a zero length - // bytes field is considered the zero value. - if prop != nil && prop.proto3 && v1.Len() == 0 && v2.Len() == 0 { - return true - } - if v1.IsNil() != v2.IsNil() { - return false - } - return bytes.Equal(v1.Interface().([]byte), v2.Interface().([]byte)) - } - - if v1.Len() != v2.Len() { - return false - } - for i := 0; i < v1.Len(); i++ { - if !equalAny(v1.Index(i), v2.Index(i), prop) { - return false - } - } - return true - case reflect.String: - return v1.Interface().(string) == v2.Interface().(string) - case reflect.Struct: - return equalStruct(v1, v2) - case reflect.Uint32, reflect.Uint64: - return v1.Uint() == v2.Uint() - } - - // unknown type, so not a protocol buffer - log.Printf("proto: don't know how to compare %v", v1) - return false -} - -// base is the struct type that the extensions are based on. -// x1 and x2 are InternalExtensions. -func equalExtensions(base reflect.Type, x1, x2 XXX_InternalExtensions) bool { - em1, _ := x1.extensionsRead() - em2, _ := x2.extensionsRead() - return equalExtMap(base, em1, em2) -} - -func equalExtMap(base reflect.Type, em1, em2 map[int32]Extension) bool { - if len(em1) != len(em2) { - return false - } - - for extNum, e1 := range em1 { - e2, ok := em2[extNum] - if !ok { - return false - } - - m1, m2 := e1.value, e2.value - - if m1 == nil && m2 == nil { - // Both have only encoded form. - if bytes.Equal(e1.enc, e2.enc) { - continue - } - // The bytes are different, but the extensions might still be - // equal. We need to decode them to compare. - } - - if m1 != nil && m2 != nil { - // Both are unencoded. - if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) { - return false - } - continue - } - - // At least one is encoded. To do a semantically correct comparison - // we need to unmarshal them first. - var desc *ExtensionDesc - if m := extensionMaps[base]; m != nil { - desc = m[extNum] - } - if desc == nil { - // If both have only encoded form and the bytes are the same, - // it is handled above. We get here when the bytes are different. - // We don't know how to decode it, so just compare them as byte - // slices. - log.Printf("proto: don't know how to compare extension %d of %v", extNum, base) - return false - } - var err error - if m1 == nil { - m1, err = decodeExtension(e1.enc, desc) - } - if m2 == nil && err == nil { - m2, err = decodeExtension(e2.enc, desc) - } - if err != nil { - // The encoded form is invalid. - log.Printf("proto: badly encoded extension %d of %v: %v", extNum, base, err) - return false - } - if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) { - return false - } - } - - return true -} diff --git a/vendor/github.com/golang/protobuf/proto/extensions.go b/vendor/github.com/golang/protobuf/proto/extensions.go deleted file mode 100644 index 816a3b9..0000000 --- a/vendor/github.com/golang/protobuf/proto/extensions.go +++ /dev/null @@ -1,543 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -/* - * Types and routines for supporting protocol buffer extensions. - */ - -import ( - "errors" - "fmt" - "io" - "reflect" - "strconv" - "sync" -) - -// ErrMissingExtension is the error returned by GetExtension if the named extension is not in the message. -var ErrMissingExtension = errors.New("proto: missing extension") - -// ExtensionRange represents a range of message extensions for a protocol buffer. -// Used in code generated by the protocol compiler. -type ExtensionRange struct { - Start, End int32 // both inclusive -} - -// extendableProto is an interface implemented by any protocol buffer generated by the current -// proto compiler that may be extended. -type extendableProto interface { - Message - ExtensionRangeArray() []ExtensionRange - extensionsWrite() map[int32]Extension - extensionsRead() (map[int32]Extension, sync.Locker) -} - -// extendableProtoV1 is an interface implemented by a protocol buffer generated by the previous -// version of the proto compiler that may be extended. -type extendableProtoV1 interface { - Message - ExtensionRangeArray() []ExtensionRange - ExtensionMap() map[int32]Extension -} - -// extensionAdapter is a wrapper around extendableProtoV1 that implements extendableProto. -type extensionAdapter struct { - extendableProtoV1 -} - -func (e extensionAdapter) extensionsWrite() map[int32]Extension { - return e.ExtensionMap() -} - -func (e extensionAdapter) extensionsRead() (map[int32]Extension, sync.Locker) { - return e.ExtensionMap(), notLocker{} -} - -// notLocker is a sync.Locker whose Lock and Unlock methods are nops. -type notLocker struct{} - -func (n notLocker) Lock() {} -func (n notLocker) Unlock() {} - -// extendable returns the extendableProto interface for the given generated proto message. -// If the proto message has the old extension format, it returns a wrapper that implements -// the extendableProto interface. -func extendable(p interface{}) (extendableProto, error) { - switch p := p.(type) { - case extendableProto: - if isNilPtr(p) { - return nil, fmt.Errorf("proto: nil %T is not extendable", p) - } - return p, nil - case extendableProtoV1: - if isNilPtr(p) { - return nil, fmt.Errorf("proto: nil %T is not extendable", p) - } - return extensionAdapter{p}, nil - } - // Don't allocate a specific error containing %T: - // this is the hot path for Clone and MarshalText. - return nil, errNotExtendable -} - -var errNotExtendable = errors.New("proto: not an extendable proto.Message") - -func isNilPtr(x interface{}) bool { - v := reflect.ValueOf(x) - return v.Kind() == reflect.Ptr && v.IsNil() -} - -// XXX_InternalExtensions is an internal representation of proto extensions. -// -// Each generated message struct type embeds an anonymous XXX_InternalExtensions field, -// thus gaining the unexported 'extensions' method, which can be called only from the proto package. -// -// The methods of XXX_InternalExtensions are not concurrency safe in general, -// but calls to logically read-only methods such as has and get may be executed concurrently. -type XXX_InternalExtensions struct { - // The struct must be indirect so that if a user inadvertently copies a - // generated message and its embedded XXX_InternalExtensions, they - // avoid the mayhem of a copied mutex. - // - // The mutex serializes all logically read-only operations to p.extensionMap. - // It is up to the client to ensure that write operations to p.extensionMap are - // mutually exclusive with other accesses. - p *struct { - mu sync.Mutex - extensionMap map[int32]Extension - } -} - -// extensionsWrite returns the extension map, creating it on first use. -func (e *XXX_InternalExtensions) extensionsWrite() map[int32]Extension { - if e.p == nil { - e.p = new(struct { - mu sync.Mutex - extensionMap map[int32]Extension - }) - e.p.extensionMap = make(map[int32]Extension) - } - return e.p.extensionMap -} - -// extensionsRead returns the extensions map for read-only use. It may be nil. -// The caller must hold the returned mutex's lock when accessing Elements within the map. -func (e *XXX_InternalExtensions) extensionsRead() (map[int32]Extension, sync.Locker) { - if e.p == nil { - return nil, nil - } - return e.p.extensionMap, &e.p.mu -} - -// ExtensionDesc represents an extension specification. -// Used in generated code from the protocol compiler. -type ExtensionDesc struct { - ExtendedType Message // nil pointer to the type that is being extended - ExtensionType interface{} // nil pointer to the extension type - Field int32 // field number - Name string // fully-qualified name of extension, for text formatting - Tag string // protobuf tag style - Filename string // name of the file in which the extension is defined -} - -func (ed *ExtensionDesc) repeated() bool { - t := reflect.TypeOf(ed.ExtensionType) - return t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 -} - -// Extension represents an extension in a message. -type Extension struct { - // When an extension is stored in a message using SetExtension - // only desc and value are set. When the message is marshaled - // enc will be set to the encoded form of the message. - // - // When a message is unmarshaled and contains extensions, each - // extension will have only enc set. When such an extension is - // accessed using GetExtension (or GetExtensions) desc and value - // will be set. - desc *ExtensionDesc - value interface{} - enc []byte -} - -// SetRawExtension is for testing only. -func SetRawExtension(base Message, id int32, b []byte) { - epb, err := extendable(base) - if err != nil { - return - } - extmap := epb.extensionsWrite() - extmap[id] = Extension{enc: b} -} - -// isExtensionField returns true iff the given field number is in an extension range. -func isExtensionField(pb extendableProto, field int32) bool { - for _, er := range pb.ExtensionRangeArray() { - if er.Start <= field && field <= er.End { - return true - } - } - return false -} - -// checkExtensionTypes checks that the given extension is valid for pb. -func checkExtensionTypes(pb extendableProto, extension *ExtensionDesc) error { - var pbi interface{} = pb - // Check the extended type. - if ea, ok := pbi.(extensionAdapter); ok { - pbi = ea.extendableProtoV1 - } - if a, b := reflect.TypeOf(pbi), reflect.TypeOf(extension.ExtendedType); a != b { - return fmt.Errorf("proto: bad extended type; %v does not extend %v", b, a) - } - // Check the range. - if !isExtensionField(pb, extension.Field) { - return errors.New("proto: bad extension number; not in declared ranges") - } - return nil -} - -// extPropKey is sufficient to uniquely identify an extension. -type extPropKey struct { - base reflect.Type - field int32 -} - -var extProp = struct { - sync.RWMutex - m map[extPropKey]*Properties -}{ - m: make(map[extPropKey]*Properties), -} - -func extensionProperties(ed *ExtensionDesc) *Properties { - key := extPropKey{base: reflect.TypeOf(ed.ExtendedType), field: ed.Field} - - extProp.RLock() - if prop, ok := extProp.m[key]; ok { - extProp.RUnlock() - return prop - } - extProp.RUnlock() - - extProp.Lock() - defer extProp.Unlock() - // Check again. - if prop, ok := extProp.m[key]; ok { - return prop - } - - prop := new(Properties) - prop.Init(reflect.TypeOf(ed.ExtensionType), "unknown_name", ed.Tag, nil) - extProp.m[key] = prop - return prop -} - -// HasExtension returns whether the given extension is present in pb. -func HasExtension(pb Message, extension *ExtensionDesc) bool { - // TODO: Check types, field numbers, etc.? - epb, err := extendable(pb) - if err != nil { - return false - } - extmap, mu := epb.extensionsRead() - if extmap == nil { - return false - } - mu.Lock() - _, ok := extmap[extension.Field] - mu.Unlock() - return ok -} - -// ClearExtension removes the given extension from pb. -func ClearExtension(pb Message, extension *ExtensionDesc) { - epb, err := extendable(pb) - if err != nil { - return - } - // TODO: Check types, field numbers, etc.? - extmap := epb.extensionsWrite() - delete(extmap, extension.Field) -} - -// GetExtension retrieves a proto2 extended field from pb. -// -// If the descriptor is type complete (i.e., ExtensionDesc.ExtensionType is non-nil), -// then GetExtension parses the encoded field and returns a Go value of the specified type. -// If the field is not present, then the default value is returned (if one is specified), -// otherwise ErrMissingExtension is reported. -// -// If the descriptor is not type complete (i.e., ExtensionDesc.ExtensionType is nil), -// then GetExtension returns the raw encoded bytes of the field extension. -func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) { - epb, err := extendable(pb) - if err != nil { - return nil, err - } - - if extension.ExtendedType != nil { - // can only check type if this is a complete descriptor - if err := checkExtensionTypes(epb, extension); err != nil { - return nil, err - } - } - - emap, mu := epb.extensionsRead() - if emap == nil { - return defaultExtensionValue(extension) - } - mu.Lock() - defer mu.Unlock() - e, ok := emap[extension.Field] - if !ok { - // defaultExtensionValue returns the default value or - // ErrMissingExtension if there is no default. - return defaultExtensionValue(extension) - } - - if e.value != nil { - // Already decoded. Check the descriptor, though. - if e.desc != extension { - // This shouldn't happen. If it does, it means that - // GetExtension was called twice with two different - // descriptors with the same field number. - return nil, errors.New("proto: descriptor conflict") - } - return e.value, nil - } - - if extension.ExtensionType == nil { - // incomplete descriptor - return e.enc, nil - } - - v, err := decodeExtension(e.enc, extension) - if err != nil { - return nil, err - } - - // Remember the decoded version and drop the encoded version. - // That way it is safe to mutate what we return. - e.value = v - e.desc = extension - e.enc = nil - emap[extension.Field] = e - return e.value, nil -} - -// defaultExtensionValue returns the default value for extension. -// If no default for an extension is defined ErrMissingExtension is returned. -func defaultExtensionValue(extension *ExtensionDesc) (interface{}, error) { - if extension.ExtensionType == nil { - // incomplete descriptor, so no default - return nil, ErrMissingExtension - } - - t := reflect.TypeOf(extension.ExtensionType) - props := extensionProperties(extension) - - sf, _, err := fieldDefault(t, props) - if err != nil { - return nil, err - } - - if sf == nil || sf.value == nil { - // There is no default value. - return nil, ErrMissingExtension - } - - if t.Kind() != reflect.Ptr { - // We do not need to return a Ptr, we can directly return sf.value. - return sf.value, nil - } - - // We need to return an interface{} that is a pointer to sf.value. - value := reflect.New(t).Elem() - value.Set(reflect.New(value.Type().Elem())) - if sf.kind == reflect.Int32 { - // We may have an int32 or an enum, but the underlying data is int32. - // Since we can't set an int32 into a non int32 reflect.value directly - // set it as a int32. - value.Elem().SetInt(int64(sf.value.(int32))) - } else { - value.Elem().Set(reflect.ValueOf(sf.value)) - } - return value.Interface(), nil -} - -// decodeExtension decodes an extension encoded in b. -func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) { - t := reflect.TypeOf(extension.ExtensionType) - unmarshal := typeUnmarshaler(t, extension.Tag) - - // t is a pointer to a struct, pointer to basic type or a slice. - // Allocate space to store the pointer/slice. - value := reflect.New(t).Elem() - - var err error - for { - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - wire := int(x) & 7 - - b, err = unmarshal(b, valToPointer(value.Addr()), wire) - if err != nil { - return nil, err - } - - if len(b) == 0 { - break - } - } - return value.Interface(), nil -} - -// GetExtensions returns a slice of the extensions present in pb that are also listed in es. -// The returned slice has the same length as es; missing extensions will appear as nil elements. -func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, err error) { - epb, err := extendable(pb) - if err != nil { - return nil, err - } - extensions = make([]interface{}, len(es)) - for i, e := range es { - extensions[i], err = GetExtension(epb, e) - if err == ErrMissingExtension { - err = nil - } - if err != nil { - return - } - } - return -} - -// ExtensionDescs returns a new slice containing pb's extension descriptors, in undefined order. -// For non-registered extensions, ExtensionDescs returns an incomplete descriptor containing -// just the Field field, which defines the extension's field number. -func ExtensionDescs(pb Message) ([]*ExtensionDesc, error) { - epb, err := extendable(pb) - if err != nil { - return nil, err - } - registeredExtensions := RegisteredExtensions(pb) - - emap, mu := epb.extensionsRead() - if emap == nil { - return nil, nil - } - mu.Lock() - defer mu.Unlock() - extensions := make([]*ExtensionDesc, 0, len(emap)) - for extid, e := range emap { - desc := e.desc - if desc == nil { - desc = registeredExtensions[extid] - if desc == nil { - desc = &ExtensionDesc{Field: extid} - } - } - - extensions = append(extensions, desc) - } - return extensions, nil -} - -// SetExtension sets the specified extension of pb to the specified value. -func SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error { - epb, err := extendable(pb) - if err != nil { - return err - } - if err := checkExtensionTypes(epb, extension); err != nil { - return err - } - typ := reflect.TypeOf(extension.ExtensionType) - if typ != reflect.TypeOf(value) { - return errors.New("proto: bad extension value type") - } - // nil extension values need to be caught early, because the - // encoder can't distinguish an ErrNil due to a nil extension - // from an ErrNil due to a missing field. Extensions are - // always optional, so the encoder would just swallow the error - // and drop all the extensions from the encoded message. - if reflect.ValueOf(value).IsNil() { - return fmt.Errorf("proto: SetExtension called with nil value of type %T", value) - } - - extmap := epb.extensionsWrite() - extmap[extension.Field] = Extension{desc: extension, value: value} - return nil -} - -// ClearAllExtensions clears all extensions from pb. -func ClearAllExtensions(pb Message) { - epb, err := extendable(pb) - if err != nil { - return - } - m := epb.extensionsWrite() - for k := range m { - delete(m, k) - } -} - -// A global registry of extensions. -// The generated code will register the generated descriptors by calling RegisterExtension. - -var extensionMaps = make(map[reflect.Type]map[int32]*ExtensionDesc) - -// RegisterExtension is called from the generated code. -func RegisterExtension(desc *ExtensionDesc) { - st := reflect.TypeOf(desc.ExtendedType).Elem() - m := extensionMaps[st] - if m == nil { - m = make(map[int32]*ExtensionDesc) - extensionMaps[st] = m - } - if _, ok := m[desc.Field]; ok { - panic("proto: duplicate extension registered: " + st.String() + " " + strconv.Itoa(int(desc.Field))) - } - m[desc.Field] = desc -} - -// RegisteredExtensions returns a map of the registered extensions of a -// protocol buffer struct, indexed by the extension number. -// The argument pb should be a nil pointer to the struct type. -func RegisteredExtensions(pb Message) map[int32]*ExtensionDesc { - return extensionMaps[reflect.TypeOf(pb).Elem()] -} diff --git a/vendor/github.com/golang/protobuf/proto/lib.go b/vendor/github.com/golang/protobuf/proto/lib.go deleted file mode 100644 index 0e2191b..0000000 --- a/vendor/github.com/golang/protobuf/proto/lib.go +++ /dev/null @@ -1,921 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -/* -Package proto converts data structures to and from the wire format of -protocol buffers. It works in concert with the Go source code generated -for .proto files by the protocol compiler. - -A summary of the properties of the protocol buffer interface -for a protocol buffer variable v: - - - Names are turned from camel_case to CamelCase for export. - - There are no methods on v to set fields; just treat - them as structure fields. - - There are getters that return a field's value if set, - and return the field's default value if unset. - The getters work even if the receiver is a nil message. - - The zero value for a struct is its correct initialization state. - All desired fields must be set before marshaling. - - A Reset() method will restore a protobuf struct to its zero state. - - Non-repeated fields are pointers to the values; nil means unset. - That is, optional or required field int32 f becomes F *int32. - - Repeated fields are slices. - - Helper functions are available to aid the setting of fields. - msg.Foo = proto.String("hello") // set field - - Constants are defined to hold the default values of all fields that - have them. They have the form Default_StructName_FieldName. - Because the getter methods handle defaulted values, - direct use of these constants should be rare. - - Enums are given type names and maps from names to values. - Enum values are prefixed by the enclosing message's name, or by the - enum's type name if it is a top-level enum. Enum types have a String - method, and a Enum method to assist in message construction. - - Nested messages, groups and enums have type names prefixed with the name of - the surrounding message type. - - Extensions are given descriptor names that start with E_, - followed by an underscore-delimited list of the nested messages - that contain it (if any) followed by the CamelCased name of the - extension field itself. HasExtension, ClearExtension, GetExtension - and SetExtension are functions for manipulating extensions. - - Oneof field sets are given a single field in their message, - with distinguished wrapper types for each possible field value. - - Marshal and Unmarshal are functions to encode and decode the wire format. - -When the .proto file specifies `syntax="proto3"`, there are some differences: - - - Non-repeated fields of non-message type are values instead of pointers. - - Enum types do not get an Enum method. - -The simplest way to describe this is to see an example. -Given file test.proto, containing - - package example; - - enum FOO { X = 17; } - - message Test { - required string label = 1; - optional int32 type = 2 [default=77]; - repeated int64 reps = 3; - optional group OptionalGroup = 4 { - required string RequiredField = 5; - } - oneof union { - int32 number = 6; - string name = 7; - } - } - -The resulting file, test.pb.go, is: - - package example - - import proto "github.com/golang/protobuf/proto" - import math "math" - - type FOO int32 - const ( - FOO_X FOO = 17 - ) - var FOO_name = map[int32]string{ - 17: "X", - } - var FOO_value = map[string]int32{ - "X": 17, - } - - func (x FOO) Enum() *FOO { - p := new(FOO) - *p = x - return p - } - func (x FOO) String() string { - return proto.EnumName(FOO_name, int32(x)) - } - func (x *FOO) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(FOO_value, data) - if err != nil { - return err - } - *x = FOO(value) - return nil - } - - type Test struct { - Label *string `protobuf:"bytes,1,req,name=label" json:"label,omitempty"` - Type *int32 `protobuf:"varint,2,opt,name=type,def=77" json:"type,omitempty"` - Reps []int64 `protobuf:"varint,3,rep,name=reps" json:"reps,omitempty"` - Optionalgroup *Test_OptionalGroup `protobuf:"group,4,opt,name=OptionalGroup" json:"optionalgroup,omitempty"` - // Types that are valid to be assigned to Union: - // *Test_Number - // *Test_Name - Union isTest_Union `protobuf_oneof:"union"` - XXX_unrecognized []byte `json:"-"` - } - func (m *Test) Reset() { *m = Test{} } - func (m *Test) String() string { return proto.CompactTextString(m) } - func (*Test) ProtoMessage() {} - - type isTest_Union interface { - isTest_Union() - } - - type Test_Number struct { - Number int32 `protobuf:"varint,6,opt,name=number"` - } - type Test_Name struct { - Name string `protobuf:"bytes,7,opt,name=name"` - } - - func (*Test_Number) isTest_Union() {} - func (*Test_Name) isTest_Union() {} - - func (m *Test) GetUnion() isTest_Union { - if m != nil { - return m.Union - } - return nil - } - const Default_Test_Type int32 = 77 - - func (m *Test) GetLabel() string { - if m != nil && m.Label != nil { - return *m.Label - } - return "" - } - - func (m *Test) GetType() int32 { - if m != nil && m.Type != nil { - return *m.Type - } - return Default_Test_Type - } - - func (m *Test) GetOptionalgroup() *Test_OptionalGroup { - if m != nil { - return m.Optionalgroup - } - return nil - } - - type Test_OptionalGroup struct { - RequiredField *string `protobuf:"bytes,5,req" json:"RequiredField,omitempty"` - } - func (m *Test_OptionalGroup) Reset() { *m = Test_OptionalGroup{} } - func (m *Test_OptionalGroup) String() string { return proto.CompactTextString(m) } - - func (m *Test_OptionalGroup) GetRequiredField() string { - if m != nil && m.RequiredField != nil { - return *m.RequiredField - } - return "" - } - - func (m *Test) GetNumber() int32 { - if x, ok := m.GetUnion().(*Test_Number); ok { - return x.Number - } - return 0 - } - - func (m *Test) GetName() string { - if x, ok := m.GetUnion().(*Test_Name); ok { - return x.Name - } - return "" - } - - func init() { - proto.RegisterEnum("example.FOO", FOO_name, FOO_value) - } - -To create and play with a Test object: - - package main - - import ( - "log" - - "github.com/golang/protobuf/proto" - pb "./example.pb" - ) - - func main() { - test := &pb.Test{ - Label: proto.String("hello"), - Type: proto.Int32(17), - Reps: []int64{1, 2, 3}, - Optionalgroup: &pb.Test_OptionalGroup{ - RequiredField: proto.String("good bye"), - }, - Union: &pb.Test_Name{"fred"}, - } - data, err := proto.Marshal(test) - if err != nil { - log.Fatal("marshaling error: ", err) - } - newTest := &pb.Test{} - err = proto.Unmarshal(data, newTest) - if err != nil { - log.Fatal("unmarshaling error: ", err) - } - // Now test and newTest contain the same data. - if test.GetLabel() != newTest.GetLabel() { - log.Fatalf("data mismatch %q != %q", test.GetLabel(), newTest.GetLabel()) - } - // Use a type switch to determine which oneof was set. - switch u := test.Union.(type) { - case *pb.Test_Number: // u.Number contains the number. - case *pb.Test_Name: // u.Name contains the string. - } - // etc. - } -*/ -package proto - -import ( - "encoding/json" - "errors" - "fmt" - "log" - "reflect" - "sort" - "strconv" - "sync" -) - -var errInvalidUTF8 = errors.New("proto: invalid UTF-8 string") - -// Message is implemented by generated protocol buffer messages. -type Message interface { - Reset() - String() string - ProtoMessage() -} - -// Stats records allocation details about the protocol buffer encoders -// and decoders. Useful for tuning the library itself. -type Stats struct { - Emalloc uint64 // mallocs in encode - Dmalloc uint64 // mallocs in decode - Encode uint64 // number of encodes - Decode uint64 // number of decodes - Chit uint64 // number of cache hits - Cmiss uint64 // number of cache misses - Size uint64 // number of sizes -} - -// Set to true to enable stats collection. -const collectStats = false - -var stats Stats - -// GetStats returns a copy of the global Stats structure. -func GetStats() Stats { return stats } - -// A Buffer is a buffer manager for marshaling and unmarshaling -// protocol buffers. It may be reused between invocations to -// reduce memory usage. It is not necessary to use a Buffer; -// the global functions Marshal and Unmarshal create a -// temporary Buffer and are fine for most applications. -type Buffer struct { - buf []byte // encode/decode byte stream - index int // read point - - deterministic bool -} - -// NewBuffer allocates a new Buffer and initializes its internal data to -// the contents of the argument slice. -func NewBuffer(e []byte) *Buffer { - return &Buffer{buf: e} -} - -// Reset resets the Buffer, ready for marshaling a new protocol buffer. -func (p *Buffer) Reset() { - p.buf = p.buf[0:0] // for reading/writing - p.index = 0 // for reading -} - -// SetBuf replaces the internal buffer with the slice, -// ready for unmarshaling the contents of the slice. -func (p *Buffer) SetBuf(s []byte) { - p.buf = s - p.index = 0 -} - -// Bytes returns the contents of the Buffer. -func (p *Buffer) Bytes() []byte { return p.buf } - -// SetDeterministic sets whether to use deterministic serialization. -// -// Deterministic serialization guarantees that for a given binary, equal -// messages will always be serialized to the same bytes. This implies: -// -// - Repeated serialization of a message will return the same bytes. -// - Different processes of the same binary (which may be executing on -// different machines) will serialize equal messages to the same bytes. -// -// Note that the deterministic serialization is NOT canonical across -// languages. It is not guaranteed to remain stable over time. It is unstable -// across different builds with schema changes due to unknown fields. -// Users who need canonical serialization (e.g., persistent storage in a -// canonical form, fingerprinting, etc.) should define their own -// canonicalization specification and implement their own serializer rather -// than relying on this API. -// -// If deterministic serialization is requested, map entries will be sorted -// by keys in lexographical order. This is an implementation detail and -// subject to change. -func (p *Buffer) SetDeterministic(deterministic bool) { - p.deterministic = deterministic -} - -/* - * Helper routines for simplifying the creation of optional fields of basic type. - */ - -// Bool is a helper routine that allocates a new bool value -// to store v and returns a pointer to it. -func Bool(v bool) *bool { - return &v -} - -// Int32 is a helper routine that allocates a new int32 value -// to store v and returns a pointer to it. -func Int32(v int32) *int32 { - return &v -} - -// Int is a helper routine that allocates a new int32 value -// to store v and returns a pointer to it, but unlike Int32 -// its argument value is an int. -func Int(v int) *int32 { - p := new(int32) - *p = int32(v) - return p -} - -// Int64 is a helper routine that allocates a new int64 value -// to store v and returns a pointer to it. -func Int64(v int64) *int64 { - return &v -} - -// Float32 is a helper routine that allocates a new float32 value -// to store v and returns a pointer to it. -func Float32(v float32) *float32 { - return &v -} - -// Float64 is a helper routine that allocates a new float64 value -// to store v and returns a pointer to it. -func Float64(v float64) *float64 { - return &v -} - -// Uint32 is a helper routine that allocates a new uint32 value -// to store v and returns a pointer to it. -func Uint32(v uint32) *uint32 { - return &v -} - -// Uint64 is a helper routine that allocates a new uint64 value -// to store v and returns a pointer to it. -func Uint64(v uint64) *uint64 { - return &v -} - -// String is a helper routine that allocates a new string value -// to store v and returns a pointer to it. -func String(v string) *string { - return &v -} - -// EnumName is a helper function to simplify printing protocol buffer enums -// by name. Given an enum map and a value, it returns a useful string. -func EnumName(m map[int32]string, v int32) string { - s, ok := m[v] - if ok { - return s - } - return strconv.Itoa(int(v)) -} - -// UnmarshalJSONEnum is a helper function to simplify recovering enum int values -// from their JSON-encoded representation. Given a map from the enum's symbolic -// names to its int values, and a byte buffer containing the JSON-encoded -// value, it returns an int32 that can be cast to the enum type by the caller. -// -// The function can deal with both JSON representations, numeric and symbolic. -func UnmarshalJSONEnum(m map[string]int32, data []byte, enumName string) (int32, error) { - if data[0] == '"' { - // New style: enums are strings. - var repr string - if err := json.Unmarshal(data, &repr); err != nil { - return -1, err - } - val, ok := m[repr] - if !ok { - return 0, fmt.Errorf("unrecognized enum %s value %q", enumName, repr) - } - return val, nil - } - // Old style: enums are ints. - var val int32 - if err := json.Unmarshal(data, &val); err != nil { - return 0, fmt.Errorf("cannot unmarshal %#q into enum %s", data, enumName) - } - return val, nil -} - -// DebugPrint dumps the encoded data in b in a debugging format with a header -// including the string s. Used in testing but made available for general debugging. -func (p *Buffer) DebugPrint(s string, b []byte) { - var u uint64 - - obuf := p.buf - index := p.index - p.buf = b - p.index = 0 - depth := 0 - - fmt.Printf("\n--- %s ---\n", s) - -out: - for { - for i := 0; i < depth; i++ { - fmt.Print(" ") - } - - index := p.index - if index == len(p.buf) { - break - } - - op, err := p.DecodeVarint() - if err != nil { - fmt.Printf("%3d: fetching op err %v\n", index, err) - break out - } - tag := op >> 3 - wire := op & 7 - - switch wire { - default: - fmt.Printf("%3d: t=%3d unknown wire=%d\n", - index, tag, wire) - break out - - case WireBytes: - var r []byte - - r, err = p.DecodeRawBytes(false) - if err != nil { - break out - } - fmt.Printf("%3d: t=%3d bytes [%d]", index, tag, len(r)) - if len(r) <= 6 { - for i := 0; i < len(r); i++ { - fmt.Printf(" %.2x", r[i]) - } - } else { - for i := 0; i < 3; i++ { - fmt.Printf(" %.2x", r[i]) - } - fmt.Printf(" ..") - for i := len(r) - 3; i < len(r); i++ { - fmt.Printf(" %.2x", r[i]) - } - } - fmt.Printf("\n") - - case WireFixed32: - u, err = p.DecodeFixed32() - if err != nil { - fmt.Printf("%3d: t=%3d fix32 err %v\n", index, tag, err) - break out - } - fmt.Printf("%3d: t=%3d fix32 %d\n", index, tag, u) - - case WireFixed64: - u, err = p.DecodeFixed64() - if err != nil { - fmt.Printf("%3d: t=%3d fix64 err %v\n", index, tag, err) - break out - } - fmt.Printf("%3d: t=%3d fix64 %d\n", index, tag, u) - - case WireVarint: - u, err = p.DecodeVarint() - if err != nil { - fmt.Printf("%3d: t=%3d varint err %v\n", index, tag, err) - break out - } - fmt.Printf("%3d: t=%3d varint %d\n", index, tag, u) - - case WireStartGroup: - fmt.Printf("%3d: t=%3d start\n", index, tag) - depth++ - - case WireEndGroup: - depth-- - fmt.Printf("%3d: t=%3d end\n", index, tag) - } - } - - if depth != 0 { - fmt.Printf("%3d: start-end not balanced %d\n", p.index, depth) - } - fmt.Printf("\n") - - p.buf = obuf - p.index = index -} - -// SetDefaults sets unset protocol buffer fields to their default values. -// It only modifies fields that are both unset and have defined defaults. -// It recursively sets default values in any non-nil sub-messages. -func SetDefaults(pb Message) { - setDefaults(reflect.ValueOf(pb), true, false) -} - -// v is a pointer to a struct. -func setDefaults(v reflect.Value, recur, zeros bool) { - v = v.Elem() - - defaultMu.RLock() - dm, ok := defaults[v.Type()] - defaultMu.RUnlock() - if !ok { - dm = buildDefaultMessage(v.Type()) - defaultMu.Lock() - defaults[v.Type()] = dm - defaultMu.Unlock() - } - - for _, sf := range dm.scalars { - f := v.Field(sf.index) - if !f.IsNil() { - // field already set - continue - } - dv := sf.value - if dv == nil && !zeros { - // no explicit default, and don't want to set zeros - continue - } - fptr := f.Addr().Interface() // **T - // TODO: Consider batching the allocations we do here. - switch sf.kind { - case reflect.Bool: - b := new(bool) - if dv != nil { - *b = dv.(bool) - } - *(fptr.(**bool)) = b - case reflect.Float32: - f := new(float32) - if dv != nil { - *f = dv.(float32) - } - *(fptr.(**float32)) = f - case reflect.Float64: - f := new(float64) - if dv != nil { - *f = dv.(float64) - } - *(fptr.(**float64)) = f - case reflect.Int32: - // might be an enum - if ft := f.Type(); ft != int32PtrType { - // enum - f.Set(reflect.New(ft.Elem())) - if dv != nil { - f.Elem().SetInt(int64(dv.(int32))) - } - } else { - // int32 field - i := new(int32) - if dv != nil { - *i = dv.(int32) - } - *(fptr.(**int32)) = i - } - case reflect.Int64: - i := new(int64) - if dv != nil { - *i = dv.(int64) - } - *(fptr.(**int64)) = i - case reflect.String: - s := new(string) - if dv != nil { - *s = dv.(string) - } - *(fptr.(**string)) = s - case reflect.Uint8: - // exceptional case: []byte - var b []byte - if dv != nil { - db := dv.([]byte) - b = make([]byte, len(db)) - copy(b, db) - } else { - b = []byte{} - } - *(fptr.(*[]byte)) = b - case reflect.Uint32: - u := new(uint32) - if dv != nil { - *u = dv.(uint32) - } - *(fptr.(**uint32)) = u - case reflect.Uint64: - u := new(uint64) - if dv != nil { - *u = dv.(uint64) - } - *(fptr.(**uint64)) = u - default: - log.Printf("proto: can't set default for field %v (sf.kind=%v)", f, sf.kind) - } - } - - for _, ni := range dm.nested { - f := v.Field(ni) - // f is *T or []*T or map[T]*T - switch f.Kind() { - case reflect.Ptr: - if f.IsNil() { - continue - } - setDefaults(f, recur, zeros) - - case reflect.Slice: - for i := 0; i < f.Len(); i++ { - e := f.Index(i) - if e.IsNil() { - continue - } - setDefaults(e, recur, zeros) - } - - case reflect.Map: - for _, k := range f.MapKeys() { - e := f.MapIndex(k) - if e.IsNil() { - continue - } - setDefaults(e, recur, zeros) - } - } - } -} - -var ( - // defaults maps a protocol buffer struct type to a slice of the fields, - // with its scalar fields set to their proto-declared non-zero default values. - defaultMu sync.RWMutex - defaults = make(map[reflect.Type]defaultMessage) - - int32PtrType = reflect.TypeOf((*int32)(nil)) -) - -// defaultMessage represents information about the default values of a message. -type defaultMessage struct { - scalars []scalarField - nested []int // struct field index of nested messages -} - -type scalarField struct { - index int // struct field index - kind reflect.Kind // element type (the T in *T or []T) - value interface{} // the proto-declared default value, or nil -} - -// t is a struct type. -func buildDefaultMessage(t reflect.Type) (dm defaultMessage) { - sprop := GetProperties(t) - for _, prop := range sprop.Prop { - fi, ok := sprop.decoderTags.get(prop.Tag) - if !ok { - // XXX_unrecognized - continue - } - ft := t.Field(fi).Type - - sf, nested, err := fieldDefault(ft, prop) - switch { - case err != nil: - log.Print(err) - case nested: - dm.nested = append(dm.nested, fi) - case sf != nil: - sf.index = fi - dm.scalars = append(dm.scalars, *sf) - } - } - - return dm -} - -// fieldDefault returns the scalarField for field type ft. -// sf will be nil if the field can not have a default. -// nestedMessage will be true if this is a nested message. -// Note that sf.index is not set on return. -func fieldDefault(ft reflect.Type, prop *Properties) (sf *scalarField, nestedMessage bool, err error) { - var canHaveDefault bool - switch ft.Kind() { - case reflect.Ptr: - if ft.Elem().Kind() == reflect.Struct { - nestedMessage = true - } else { - canHaveDefault = true // proto2 scalar field - } - - case reflect.Slice: - switch ft.Elem().Kind() { - case reflect.Ptr: - nestedMessage = true // repeated message - case reflect.Uint8: - canHaveDefault = true // bytes field - } - - case reflect.Map: - if ft.Elem().Kind() == reflect.Ptr { - nestedMessage = true // map with message values - } - } - - if !canHaveDefault { - if nestedMessage { - return nil, true, nil - } - return nil, false, nil - } - - // We now know that ft is a pointer or slice. - sf = &scalarField{kind: ft.Elem().Kind()} - - // scalar fields without defaults - if !prop.HasDefault { - return sf, false, nil - } - - // a scalar field: either *T or []byte - switch ft.Elem().Kind() { - case reflect.Bool: - x, err := strconv.ParseBool(prop.Default) - if err != nil { - return nil, false, fmt.Errorf("proto: bad default bool %q: %v", prop.Default, err) - } - sf.value = x - case reflect.Float32: - x, err := strconv.ParseFloat(prop.Default, 32) - if err != nil { - return nil, false, fmt.Errorf("proto: bad default float32 %q: %v", prop.Default, err) - } - sf.value = float32(x) - case reflect.Float64: - x, err := strconv.ParseFloat(prop.Default, 64) - if err != nil { - return nil, false, fmt.Errorf("proto: bad default float64 %q: %v", prop.Default, err) - } - sf.value = x - case reflect.Int32: - x, err := strconv.ParseInt(prop.Default, 10, 32) - if err != nil { - return nil, false, fmt.Errorf("proto: bad default int32 %q: %v", prop.Default, err) - } - sf.value = int32(x) - case reflect.Int64: - x, err := strconv.ParseInt(prop.Default, 10, 64) - if err != nil { - return nil, false, fmt.Errorf("proto: bad default int64 %q: %v", prop.Default, err) - } - sf.value = x - case reflect.String: - sf.value = prop.Default - case reflect.Uint8: - // []byte (not *uint8) - sf.value = []byte(prop.Default) - case reflect.Uint32: - x, err := strconv.ParseUint(prop.Default, 10, 32) - if err != nil { - return nil, false, fmt.Errorf("proto: bad default uint32 %q: %v", prop.Default, err) - } - sf.value = uint32(x) - case reflect.Uint64: - x, err := strconv.ParseUint(prop.Default, 10, 64) - if err != nil { - return nil, false, fmt.Errorf("proto: bad default uint64 %q: %v", prop.Default, err) - } - sf.value = x - default: - return nil, false, fmt.Errorf("proto: unhandled def kind %v", ft.Elem().Kind()) - } - - return sf, false, nil -} - -// mapKeys returns a sort.Interface to be used for sorting the map keys. -// Map fields may have key types of non-float scalars, strings and enums. -func mapKeys(vs []reflect.Value) sort.Interface { - s := mapKeySorter{vs: vs} - - // Type specialization per https://developers.google.com/protocol-buffers/docs/proto#maps. - if len(vs) == 0 { - return s - } - switch vs[0].Kind() { - case reflect.Int32, reflect.Int64: - s.less = func(a, b reflect.Value) bool { return a.Int() < b.Int() } - case reflect.Uint32, reflect.Uint64: - s.less = func(a, b reflect.Value) bool { return a.Uint() < b.Uint() } - case reflect.Bool: - s.less = func(a, b reflect.Value) bool { return !a.Bool() && b.Bool() } // false < true - case reflect.String: - s.less = func(a, b reflect.Value) bool { return a.String() < b.String() } - default: - panic(fmt.Sprintf("unsupported map key type: %v", vs[0].Kind())) - } - - return s -} - -type mapKeySorter struct { - vs []reflect.Value - less func(a, b reflect.Value) bool -} - -func (s mapKeySorter) Len() int { return len(s.vs) } -func (s mapKeySorter) Swap(i, j int) { s.vs[i], s.vs[j] = s.vs[j], s.vs[i] } -func (s mapKeySorter) Less(i, j int) bool { - return s.less(s.vs[i], s.vs[j]) -} - -// isProto3Zero reports whether v is a zero proto3 value. -func isProto3Zero(v reflect.Value) bool { - switch v.Kind() { - case reflect.Bool: - return !v.Bool() - case reflect.Int32, reflect.Int64: - return v.Int() == 0 - case reflect.Uint32, reflect.Uint64: - return v.Uint() == 0 - case reflect.Float32, reflect.Float64: - return v.Float() == 0 - case reflect.String: - return v.String() == "" - } - return false -} - -// ProtoPackageIsVersion2 is referenced from generated protocol buffer files -// to assert that that code is compatible with this version of the proto package. -const ProtoPackageIsVersion2 = true - -// ProtoPackageIsVersion1 is referenced from generated protocol buffer files -// to assert that that code is compatible with this version of the proto package. -const ProtoPackageIsVersion1 = true - -// InternalMessageInfo is a type used internally by generated .pb.go files. -// This type is not intended to be used by non-generated code. -// This type is not subject to any compatibility guarantee. -type InternalMessageInfo struct { - marshal *marshalInfo - unmarshal *unmarshalInfo - merge *mergeInfo - discard *discardInfo -} diff --git a/vendor/github.com/golang/protobuf/proto/message_set.go b/vendor/github.com/golang/protobuf/proto/message_set.go deleted file mode 100644 index 3b6ca41..0000000 --- a/vendor/github.com/golang/protobuf/proto/message_set.go +++ /dev/null @@ -1,314 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -/* - * Support for message sets. - */ - -import ( - "bytes" - "encoding/json" - "errors" - "fmt" - "reflect" - "sort" - "sync" -) - -// errNoMessageTypeID occurs when a protocol buffer does not have a message type ID. -// A message type ID is required for storing a protocol buffer in a message set. -var errNoMessageTypeID = errors.New("proto does not have a message type ID") - -// The first two types (_MessageSet_Item and messageSet) -// model what the protocol compiler produces for the following protocol message: -// message MessageSet { -// repeated group Item = 1 { -// required int32 type_id = 2; -// required string message = 3; -// }; -// } -// That is the MessageSet wire format. We can't use a proto to generate these -// because that would introduce a circular dependency between it and this package. - -type _MessageSet_Item struct { - TypeId *int32 `protobuf:"varint,2,req,name=type_id"` - Message []byte `protobuf:"bytes,3,req,name=message"` -} - -type messageSet struct { - Item []*_MessageSet_Item `protobuf:"group,1,rep"` - XXX_unrecognized []byte - // TODO: caching? -} - -// Make sure messageSet is a Message. -var _ Message = (*messageSet)(nil) - -// messageTypeIder is an interface satisfied by a protocol buffer type -// that may be stored in a MessageSet. -type messageTypeIder interface { - MessageTypeId() int32 -} - -func (ms *messageSet) find(pb Message) *_MessageSet_Item { - mti, ok := pb.(messageTypeIder) - if !ok { - return nil - } - id := mti.MessageTypeId() - for _, item := range ms.Item { - if *item.TypeId == id { - return item - } - } - return nil -} - -func (ms *messageSet) Has(pb Message) bool { - return ms.find(pb) != nil -} - -func (ms *messageSet) Unmarshal(pb Message) error { - if item := ms.find(pb); item != nil { - return Unmarshal(item.Message, pb) - } - if _, ok := pb.(messageTypeIder); !ok { - return errNoMessageTypeID - } - return nil // TODO: return error instead? -} - -func (ms *messageSet) Marshal(pb Message) error { - msg, err := Marshal(pb) - if err != nil { - return err - } - if item := ms.find(pb); item != nil { - // reuse existing item - item.Message = msg - return nil - } - - mti, ok := pb.(messageTypeIder) - if !ok { - return errNoMessageTypeID - } - - mtid := mti.MessageTypeId() - ms.Item = append(ms.Item, &_MessageSet_Item{ - TypeId: &mtid, - Message: msg, - }) - return nil -} - -func (ms *messageSet) Reset() { *ms = messageSet{} } -func (ms *messageSet) String() string { return CompactTextString(ms) } -func (*messageSet) ProtoMessage() {} - -// Support for the message_set_wire_format message option. - -func skipVarint(buf []byte) []byte { - i := 0 - for ; buf[i]&0x80 != 0; i++ { - } - return buf[i+1:] -} - -// MarshalMessageSet encodes the extension map represented by m in the message set wire format. -// It is called by generated Marshal methods on protocol buffer messages with the message_set_wire_format option. -func MarshalMessageSet(exts interface{}) ([]byte, error) { - return marshalMessageSet(exts, false) -} - -// marshaMessageSet implements above function, with the opt to turn on / off deterministic during Marshal. -func marshalMessageSet(exts interface{}, deterministic bool) ([]byte, error) { - switch exts := exts.(type) { - case *XXX_InternalExtensions: - var u marshalInfo - siz := u.sizeMessageSet(exts) - b := make([]byte, 0, siz) - return u.appendMessageSet(b, exts, deterministic) - - case map[int32]Extension: - // This is an old-style extension map. - // Wrap it in a new-style XXX_InternalExtensions. - ie := XXX_InternalExtensions{ - p: &struct { - mu sync.Mutex - extensionMap map[int32]Extension - }{ - extensionMap: exts, - }, - } - - var u marshalInfo - siz := u.sizeMessageSet(&ie) - b := make([]byte, 0, siz) - return u.appendMessageSet(b, &ie, deterministic) - - default: - return nil, errors.New("proto: not an extension map") - } -} - -// UnmarshalMessageSet decodes the extension map encoded in buf in the message set wire format. -// It is called by Unmarshal methods on protocol buffer messages with the message_set_wire_format option. -func UnmarshalMessageSet(buf []byte, exts interface{}) error { - var m map[int32]Extension - switch exts := exts.(type) { - case *XXX_InternalExtensions: - m = exts.extensionsWrite() - case map[int32]Extension: - m = exts - default: - return errors.New("proto: not an extension map") - } - - ms := new(messageSet) - if err := Unmarshal(buf, ms); err != nil { - return err - } - for _, item := range ms.Item { - id := *item.TypeId - msg := item.Message - - // Restore wire type and field number varint, plus length varint. - // Be careful to preserve duplicate items. - b := EncodeVarint(uint64(id)<<3 | WireBytes) - if ext, ok := m[id]; ok { - // Existing data; rip off the tag and length varint - // so we join the new data correctly. - // We can assume that ext.enc is set because we are unmarshaling. - o := ext.enc[len(b):] // skip wire type and field number - _, n := DecodeVarint(o) // calculate length of length varint - o = o[n:] // skip length varint - msg = append(o, msg...) // join old data and new data - } - b = append(b, EncodeVarint(uint64(len(msg)))...) - b = append(b, msg...) - - m[id] = Extension{enc: b} - } - return nil -} - -// MarshalMessageSetJSON encodes the extension map represented by m in JSON format. -// It is called by generated MarshalJSON methods on protocol buffer messages with the message_set_wire_format option. -func MarshalMessageSetJSON(exts interface{}) ([]byte, error) { - var m map[int32]Extension - switch exts := exts.(type) { - case *XXX_InternalExtensions: - var mu sync.Locker - m, mu = exts.extensionsRead() - if m != nil { - // Keep the extensions map locked until we're done marshaling to prevent - // races between marshaling and unmarshaling the lazily-{en,de}coded - // values. - mu.Lock() - defer mu.Unlock() - } - case map[int32]Extension: - m = exts - default: - return nil, errors.New("proto: not an extension map") - } - var b bytes.Buffer - b.WriteByte('{') - - // Process the map in key order for deterministic output. - ids := make([]int32, 0, len(m)) - for id := range m { - ids = append(ids, id) - } - sort.Sort(int32Slice(ids)) // int32Slice defined in text.go - - for i, id := range ids { - ext := m[id] - msd, ok := messageSetMap[id] - if !ok { - // Unknown type; we can't render it, so skip it. - continue - } - - if i > 0 && b.Len() > 1 { - b.WriteByte(',') - } - - fmt.Fprintf(&b, `"[%s]":`, msd.name) - - x := ext.value - if x == nil { - x = reflect.New(msd.t.Elem()).Interface() - if err := Unmarshal(ext.enc, x.(Message)); err != nil { - return nil, err - } - } - d, err := json.Marshal(x) - if err != nil { - return nil, err - } - b.Write(d) - } - b.WriteByte('}') - return b.Bytes(), nil -} - -// UnmarshalMessageSetJSON decodes the extension map encoded in buf in JSON format. -// It is called by generated UnmarshalJSON methods on protocol buffer messages with the message_set_wire_format option. -func UnmarshalMessageSetJSON(buf []byte, exts interface{}) error { - // Common-case fast path. - if len(buf) == 0 || bytes.Equal(buf, []byte("{}")) { - return nil - } - - // This is fairly tricky, and it's not clear that it is needed. - return errors.New("TODO: UnmarshalMessageSetJSON not yet implemented") -} - -// A global registry of types that can be used in a MessageSet. - -var messageSetMap = make(map[int32]messageSetDesc) - -type messageSetDesc struct { - t reflect.Type // pointer to struct - name string -} - -// RegisterMessageSetType is called from the generated code. -func RegisterMessageSetType(m Message, fieldNum int32, name string) { - messageSetMap[fieldNum] = messageSetDesc{ - t: reflect.TypeOf(m), - name: name, - } -} diff --git a/vendor/github.com/golang/protobuf/proto/pointer_reflect.go b/vendor/github.com/golang/protobuf/proto/pointer_reflect.go deleted file mode 100644 index b6cad90..0000000 --- a/vendor/github.com/golang/protobuf/proto/pointer_reflect.go +++ /dev/null @@ -1,357 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2012 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// +build purego appengine js - -// This file contains an implementation of proto field accesses using package reflect. -// It is slower than the code in pointer_unsafe.go but it avoids package unsafe and can -// be used on App Engine. - -package proto - -import ( - "reflect" - "sync" -) - -const unsafeAllowed = false - -// A field identifies a field in a struct, accessible from a pointer. -// In this implementation, a field is identified by the sequence of field indices -// passed to reflect's FieldByIndex. -type field []int - -// toField returns a field equivalent to the given reflect field. -func toField(f *reflect.StructField) field { - return f.Index -} - -// invalidField is an invalid field identifier. -var invalidField = field(nil) - -// zeroField is a noop when calling pointer.offset. -var zeroField = field([]int{}) - -// IsValid reports whether the field identifier is valid. -func (f field) IsValid() bool { return f != nil } - -// The pointer type is for the table-driven decoder. -// The implementation here uses a reflect.Value of pointer type to -// create a generic pointer. In pointer_unsafe.go we use unsafe -// instead of reflect to implement the same (but faster) interface. -type pointer struct { - v reflect.Value -} - -// toPointer converts an interface of pointer type to a pointer -// that points to the same target. -func toPointer(i *Message) pointer { - return pointer{v: reflect.ValueOf(*i)} -} - -// toAddrPointer converts an interface to a pointer that points to -// the interface data. -func toAddrPointer(i *interface{}, isptr bool) pointer { - v := reflect.ValueOf(*i) - u := reflect.New(v.Type()) - u.Elem().Set(v) - return pointer{v: u} -} - -// valToPointer converts v to a pointer. v must be of pointer type. -func valToPointer(v reflect.Value) pointer { - return pointer{v: v} -} - -// offset converts from a pointer to a structure to a pointer to -// one of its fields. -func (p pointer) offset(f field) pointer { - return pointer{v: p.v.Elem().FieldByIndex(f).Addr()} -} - -func (p pointer) isNil() bool { - return p.v.IsNil() -} - -// grow updates the slice s in place to make it one element longer. -// s must be addressable. -// Returns the (addressable) new element. -func grow(s reflect.Value) reflect.Value { - n, m := s.Len(), s.Cap() - if n < m { - s.SetLen(n + 1) - } else { - s.Set(reflect.Append(s, reflect.Zero(s.Type().Elem()))) - } - return s.Index(n) -} - -func (p pointer) toInt64() *int64 { - return p.v.Interface().(*int64) -} -func (p pointer) toInt64Ptr() **int64 { - return p.v.Interface().(**int64) -} -func (p pointer) toInt64Slice() *[]int64 { - return p.v.Interface().(*[]int64) -} - -var int32ptr = reflect.TypeOf((*int32)(nil)) - -func (p pointer) toInt32() *int32 { - return p.v.Convert(int32ptr).Interface().(*int32) -} - -// The toInt32Ptr/Slice methods don't work because of enums. -// Instead, we must use set/get methods for the int32ptr/slice case. -/* - func (p pointer) toInt32Ptr() **int32 { - return p.v.Interface().(**int32) -} - func (p pointer) toInt32Slice() *[]int32 { - return p.v.Interface().(*[]int32) -} -*/ -func (p pointer) getInt32Ptr() *int32 { - if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) { - // raw int32 type - return p.v.Elem().Interface().(*int32) - } - // an enum - return p.v.Elem().Convert(int32PtrType).Interface().(*int32) -} -func (p pointer) setInt32Ptr(v int32) { - // Allocate value in a *int32. Possibly convert that to a *enum. - // Then assign it to a **int32 or **enum. - // Note: we can convert *int32 to *enum, but we can't convert - // **int32 to **enum! - p.v.Elem().Set(reflect.ValueOf(&v).Convert(p.v.Type().Elem())) -} - -// getInt32Slice copies []int32 from p as a new slice. -// This behavior differs from the implementation in pointer_unsafe.go. -func (p pointer) getInt32Slice() []int32 { - if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) { - // raw int32 type - return p.v.Elem().Interface().([]int32) - } - // an enum - // Allocate a []int32, then assign []enum's values into it. - // Note: we can't convert []enum to []int32. - slice := p.v.Elem() - s := make([]int32, slice.Len()) - for i := 0; i < slice.Len(); i++ { - s[i] = int32(slice.Index(i).Int()) - } - return s -} - -// setInt32Slice copies []int32 into p as a new slice. -// This behavior differs from the implementation in pointer_unsafe.go. -func (p pointer) setInt32Slice(v []int32) { - if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) { - // raw int32 type - p.v.Elem().Set(reflect.ValueOf(v)) - return - } - // an enum - // Allocate a []enum, then assign []int32's values into it. - // Note: we can't convert []enum to []int32. - slice := reflect.MakeSlice(p.v.Type().Elem(), len(v), cap(v)) - for i, x := range v { - slice.Index(i).SetInt(int64(x)) - } - p.v.Elem().Set(slice) -} -func (p pointer) appendInt32Slice(v int32) { - grow(p.v.Elem()).SetInt(int64(v)) -} - -func (p pointer) toUint64() *uint64 { - return p.v.Interface().(*uint64) -} -func (p pointer) toUint64Ptr() **uint64 { - return p.v.Interface().(**uint64) -} -func (p pointer) toUint64Slice() *[]uint64 { - return p.v.Interface().(*[]uint64) -} -func (p pointer) toUint32() *uint32 { - return p.v.Interface().(*uint32) -} -func (p pointer) toUint32Ptr() **uint32 { - return p.v.Interface().(**uint32) -} -func (p pointer) toUint32Slice() *[]uint32 { - return p.v.Interface().(*[]uint32) -} -func (p pointer) toBool() *bool { - return p.v.Interface().(*bool) -} -func (p pointer) toBoolPtr() **bool { - return p.v.Interface().(**bool) -} -func (p pointer) toBoolSlice() *[]bool { - return p.v.Interface().(*[]bool) -} -func (p pointer) toFloat64() *float64 { - return p.v.Interface().(*float64) -} -func (p pointer) toFloat64Ptr() **float64 { - return p.v.Interface().(**float64) -} -func (p pointer) toFloat64Slice() *[]float64 { - return p.v.Interface().(*[]float64) -} -func (p pointer) toFloat32() *float32 { - return p.v.Interface().(*float32) -} -func (p pointer) toFloat32Ptr() **float32 { - return p.v.Interface().(**float32) -} -func (p pointer) toFloat32Slice() *[]float32 { - return p.v.Interface().(*[]float32) -} -func (p pointer) toString() *string { - return p.v.Interface().(*string) -} -func (p pointer) toStringPtr() **string { - return p.v.Interface().(**string) -} -func (p pointer) toStringSlice() *[]string { - return p.v.Interface().(*[]string) -} -func (p pointer) toBytes() *[]byte { - return p.v.Interface().(*[]byte) -} -func (p pointer) toBytesSlice() *[][]byte { - return p.v.Interface().(*[][]byte) -} -func (p pointer) toExtensions() *XXX_InternalExtensions { - return p.v.Interface().(*XXX_InternalExtensions) -} -func (p pointer) toOldExtensions() *map[int32]Extension { - return p.v.Interface().(*map[int32]Extension) -} -func (p pointer) getPointer() pointer { - return pointer{v: p.v.Elem()} -} -func (p pointer) setPointer(q pointer) { - p.v.Elem().Set(q.v) -} -func (p pointer) appendPointer(q pointer) { - grow(p.v.Elem()).Set(q.v) -} - -// getPointerSlice copies []*T from p as a new []pointer. -// This behavior differs from the implementation in pointer_unsafe.go. -func (p pointer) getPointerSlice() []pointer { - if p.v.IsNil() { - return nil - } - n := p.v.Elem().Len() - s := make([]pointer, n) - for i := 0; i < n; i++ { - s[i] = pointer{v: p.v.Elem().Index(i)} - } - return s -} - -// setPointerSlice copies []pointer into p as a new []*T. -// This behavior differs from the implementation in pointer_unsafe.go. -func (p pointer) setPointerSlice(v []pointer) { - if v == nil { - p.v.Elem().Set(reflect.New(p.v.Elem().Type()).Elem()) - return - } - s := reflect.MakeSlice(p.v.Elem().Type(), 0, len(v)) - for _, p := range v { - s = reflect.Append(s, p.v) - } - p.v.Elem().Set(s) -} - -// getInterfacePointer returns a pointer that points to the -// interface data of the interface pointed by p. -func (p pointer) getInterfacePointer() pointer { - if p.v.Elem().IsNil() { - return pointer{v: p.v.Elem()} - } - return pointer{v: p.v.Elem().Elem().Elem().Field(0).Addr()} // *interface -> interface -> *struct -> struct -} - -func (p pointer) asPointerTo(t reflect.Type) reflect.Value { - // TODO: check that p.v.Type().Elem() == t? - return p.v -} - -func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo { - atomicLock.Lock() - defer atomicLock.Unlock() - return *p -} -func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) { - atomicLock.Lock() - defer atomicLock.Unlock() - *p = v -} -func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo { - atomicLock.Lock() - defer atomicLock.Unlock() - return *p -} -func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) { - atomicLock.Lock() - defer atomicLock.Unlock() - *p = v -} -func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo { - atomicLock.Lock() - defer atomicLock.Unlock() - return *p -} -func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) { - atomicLock.Lock() - defer atomicLock.Unlock() - *p = v -} -func atomicLoadDiscardInfo(p **discardInfo) *discardInfo { - atomicLock.Lock() - defer atomicLock.Unlock() - return *p -} -func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) { - atomicLock.Lock() - defer atomicLock.Unlock() - *p = v -} - -var atomicLock sync.Mutex diff --git a/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go b/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go deleted file mode 100644 index d55a335..0000000 --- a/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go +++ /dev/null @@ -1,308 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2012 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// +build !purego,!appengine,!js - -// This file contains the implementation of the proto field accesses using package unsafe. - -package proto - -import ( - "reflect" - "sync/atomic" - "unsafe" -) - -const unsafeAllowed = true - -// A field identifies a field in a struct, accessible from a pointer. -// In this implementation, a field is identified by its byte offset from the start of the struct. -type field uintptr - -// toField returns a field equivalent to the given reflect field. -func toField(f *reflect.StructField) field { - return field(f.Offset) -} - -// invalidField is an invalid field identifier. -const invalidField = ^field(0) - -// zeroField is a noop when calling pointer.offset. -const zeroField = field(0) - -// IsValid reports whether the field identifier is valid. -func (f field) IsValid() bool { - return f != invalidField -} - -// The pointer type below is for the new table-driven encoder/decoder. -// The implementation here uses unsafe.Pointer to create a generic pointer. -// In pointer_reflect.go we use reflect instead of unsafe to implement -// the same (but slower) interface. -type pointer struct { - p unsafe.Pointer -} - -// size of pointer -var ptrSize = unsafe.Sizeof(uintptr(0)) - -// toPointer converts an interface of pointer type to a pointer -// that points to the same target. -func toPointer(i *Message) pointer { - // Super-tricky - read pointer out of data word of interface value. - // Saves ~25ns over the equivalent: - // return valToPointer(reflect.ValueOf(*i)) - return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]} -} - -// toAddrPointer converts an interface to a pointer that points to -// the interface data. -func toAddrPointer(i *interface{}, isptr bool) pointer { - // Super-tricky - read or get the address of data word of interface value. - if isptr { - // The interface is of pointer type, thus it is a direct interface. - // The data word is the pointer data itself. We take its address. - return pointer{p: unsafe.Pointer(uintptr(unsafe.Pointer(i)) + ptrSize)} - } - // The interface is not of pointer type. The data word is the pointer - // to the data. - return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]} -} - -// valToPointer converts v to a pointer. v must be of pointer type. -func valToPointer(v reflect.Value) pointer { - return pointer{p: unsafe.Pointer(v.Pointer())} -} - -// offset converts from a pointer to a structure to a pointer to -// one of its fields. -func (p pointer) offset(f field) pointer { - // For safety, we should panic if !f.IsValid, however calling panic causes - // this to no longer be inlineable, which is a serious performance cost. - /* - if !f.IsValid() { - panic("invalid field") - } - */ - return pointer{p: unsafe.Pointer(uintptr(p.p) + uintptr(f))} -} - -func (p pointer) isNil() bool { - return p.p == nil -} - -func (p pointer) toInt64() *int64 { - return (*int64)(p.p) -} -func (p pointer) toInt64Ptr() **int64 { - return (**int64)(p.p) -} -func (p pointer) toInt64Slice() *[]int64 { - return (*[]int64)(p.p) -} -func (p pointer) toInt32() *int32 { - return (*int32)(p.p) -} - -// See pointer_reflect.go for why toInt32Ptr/Slice doesn't exist. -/* - func (p pointer) toInt32Ptr() **int32 { - return (**int32)(p.p) - } - func (p pointer) toInt32Slice() *[]int32 { - return (*[]int32)(p.p) - } -*/ -func (p pointer) getInt32Ptr() *int32 { - return *(**int32)(p.p) -} -func (p pointer) setInt32Ptr(v int32) { - *(**int32)(p.p) = &v -} - -// getInt32Slice loads a []int32 from p. -// The value returned is aliased with the original slice. -// This behavior differs from the implementation in pointer_reflect.go. -func (p pointer) getInt32Slice() []int32 { - return *(*[]int32)(p.p) -} - -// setInt32Slice stores a []int32 to p. -// The value set is aliased with the input slice. -// This behavior differs from the implementation in pointer_reflect.go. -func (p pointer) setInt32Slice(v []int32) { - *(*[]int32)(p.p) = v -} - -// TODO: Can we get rid of appendInt32Slice and use setInt32Slice instead? -func (p pointer) appendInt32Slice(v int32) { - s := (*[]int32)(p.p) - *s = append(*s, v) -} - -func (p pointer) toUint64() *uint64 { - return (*uint64)(p.p) -} -func (p pointer) toUint64Ptr() **uint64 { - return (**uint64)(p.p) -} -func (p pointer) toUint64Slice() *[]uint64 { - return (*[]uint64)(p.p) -} -func (p pointer) toUint32() *uint32 { - return (*uint32)(p.p) -} -func (p pointer) toUint32Ptr() **uint32 { - return (**uint32)(p.p) -} -func (p pointer) toUint32Slice() *[]uint32 { - return (*[]uint32)(p.p) -} -func (p pointer) toBool() *bool { - return (*bool)(p.p) -} -func (p pointer) toBoolPtr() **bool { - return (**bool)(p.p) -} -func (p pointer) toBoolSlice() *[]bool { - return (*[]bool)(p.p) -} -func (p pointer) toFloat64() *float64 { - return (*float64)(p.p) -} -func (p pointer) toFloat64Ptr() **float64 { - return (**float64)(p.p) -} -func (p pointer) toFloat64Slice() *[]float64 { - return (*[]float64)(p.p) -} -func (p pointer) toFloat32() *float32 { - return (*float32)(p.p) -} -func (p pointer) toFloat32Ptr() **float32 { - return (**float32)(p.p) -} -func (p pointer) toFloat32Slice() *[]float32 { - return (*[]float32)(p.p) -} -func (p pointer) toString() *string { - return (*string)(p.p) -} -func (p pointer) toStringPtr() **string { - return (**string)(p.p) -} -func (p pointer) toStringSlice() *[]string { - return (*[]string)(p.p) -} -func (p pointer) toBytes() *[]byte { - return (*[]byte)(p.p) -} -func (p pointer) toBytesSlice() *[][]byte { - return (*[][]byte)(p.p) -} -func (p pointer) toExtensions() *XXX_InternalExtensions { - return (*XXX_InternalExtensions)(p.p) -} -func (p pointer) toOldExtensions() *map[int32]Extension { - return (*map[int32]Extension)(p.p) -} - -// getPointerSlice loads []*T from p as a []pointer. -// The value returned is aliased with the original slice. -// This behavior differs from the implementation in pointer_reflect.go. -func (p pointer) getPointerSlice() []pointer { - // Super-tricky - p should point to a []*T where T is a - // message type. We load it as []pointer. - return *(*[]pointer)(p.p) -} - -// setPointerSlice stores []pointer into p as a []*T. -// The value set is aliased with the input slice. -// This behavior differs from the implementation in pointer_reflect.go. -func (p pointer) setPointerSlice(v []pointer) { - // Super-tricky - p should point to a []*T where T is a - // message type. We store it as []pointer. - *(*[]pointer)(p.p) = v -} - -// getPointer loads the pointer at p and returns it. -func (p pointer) getPointer() pointer { - return pointer{p: *(*unsafe.Pointer)(p.p)} -} - -// setPointer stores the pointer q at p. -func (p pointer) setPointer(q pointer) { - *(*unsafe.Pointer)(p.p) = q.p -} - -// append q to the slice pointed to by p. -func (p pointer) appendPointer(q pointer) { - s := (*[]unsafe.Pointer)(p.p) - *s = append(*s, q.p) -} - -// getInterfacePointer returns a pointer that points to the -// interface data of the interface pointed by p. -func (p pointer) getInterfacePointer() pointer { - // Super-tricky - read pointer out of data word of interface value. - return pointer{p: (*(*[2]unsafe.Pointer)(p.p))[1]} -} - -// asPointerTo returns a reflect.Value that is a pointer to an -// object of type t stored at p. -func (p pointer) asPointerTo(t reflect.Type) reflect.Value { - return reflect.NewAt(t, p.p) -} - -func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo { - return (*unmarshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) -} -func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) { - atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) -} -func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo { - return (*marshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) -} -func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) { - atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) -} -func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo { - return (*mergeInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) -} -func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) { - atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) -} -func atomicLoadDiscardInfo(p **discardInfo) *discardInfo { - return (*discardInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) -} -func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) { - atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) -} diff --git a/vendor/github.com/golang/protobuf/proto/properties.go b/vendor/github.com/golang/protobuf/proto/properties.go deleted file mode 100644 index f710ada..0000000 --- a/vendor/github.com/golang/protobuf/proto/properties.go +++ /dev/null @@ -1,544 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -/* - * Routines for encoding data into the wire format for protocol buffers. - */ - -import ( - "fmt" - "log" - "os" - "reflect" - "sort" - "strconv" - "strings" - "sync" -) - -const debug bool = false - -// Constants that identify the encoding of a value on the wire. -const ( - WireVarint = 0 - WireFixed64 = 1 - WireBytes = 2 - WireStartGroup = 3 - WireEndGroup = 4 - WireFixed32 = 5 -) - -// tagMap is an optimization over map[int]int for typical protocol buffer -// use-cases. Encoded protocol buffers are often in tag order with small tag -// numbers. -type tagMap struct { - fastTags []int - slowTags map[int]int -} - -// tagMapFastLimit is the upper bound on the tag number that will be stored in -// the tagMap slice rather than its map. -const tagMapFastLimit = 1024 - -func (p *tagMap) get(t int) (int, bool) { - if t > 0 && t < tagMapFastLimit { - if t >= len(p.fastTags) { - return 0, false - } - fi := p.fastTags[t] - return fi, fi >= 0 - } - fi, ok := p.slowTags[t] - return fi, ok -} - -func (p *tagMap) put(t int, fi int) { - if t > 0 && t < tagMapFastLimit { - for len(p.fastTags) < t+1 { - p.fastTags = append(p.fastTags, -1) - } - p.fastTags[t] = fi - return - } - if p.slowTags == nil { - p.slowTags = make(map[int]int) - } - p.slowTags[t] = fi -} - -// StructProperties represents properties for all the fields of a struct. -// decoderTags and decoderOrigNames should only be used by the decoder. -type StructProperties struct { - Prop []*Properties // properties for each field - reqCount int // required count - decoderTags tagMap // map from proto tag to struct field number - decoderOrigNames map[string]int // map from original name to struct field number - order []int // list of struct field numbers in tag order - - // OneofTypes contains information about the oneof fields in this message. - // It is keyed by the original name of a field. - OneofTypes map[string]*OneofProperties -} - -// OneofProperties represents information about a specific field in a oneof. -type OneofProperties struct { - Type reflect.Type // pointer to generated struct type for this oneof field - Field int // struct field number of the containing oneof in the message - Prop *Properties -} - -// Implement the sorting interface so we can sort the fields in tag order, as recommended by the spec. -// See encode.go, (*Buffer).enc_struct. - -func (sp *StructProperties) Len() int { return len(sp.order) } -func (sp *StructProperties) Less(i, j int) bool { - return sp.Prop[sp.order[i]].Tag < sp.Prop[sp.order[j]].Tag -} -func (sp *StructProperties) Swap(i, j int) { sp.order[i], sp.order[j] = sp.order[j], sp.order[i] } - -// Properties represents the protocol-specific behavior of a single struct field. -type Properties struct { - Name string // name of the field, for error messages - OrigName string // original name before protocol compiler (always set) - JSONName string // name to use for JSON; determined by protoc - Wire string - WireType int - Tag int - Required bool - Optional bool - Repeated bool - Packed bool // relevant for repeated primitives only - Enum string // set for enum types only - proto3 bool // whether this is known to be a proto3 field; set for []byte only - oneof bool // whether this is a oneof field - - Default string // default value - HasDefault bool // whether an explicit default was provided - - stype reflect.Type // set for struct types only - sprop *StructProperties // set for struct types only - - mtype reflect.Type // set for map types only - mkeyprop *Properties // set for map types only - mvalprop *Properties // set for map types only -} - -// String formats the properties in the protobuf struct field tag style. -func (p *Properties) String() string { - s := p.Wire - s += "," - s += strconv.Itoa(p.Tag) - if p.Required { - s += ",req" - } - if p.Optional { - s += ",opt" - } - if p.Repeated { - s += ",rep" - } - if p.Packed { - s += ",packed" - } - s += ",name=" + p.OrigName - if p.JSONName != p.OrigName { - s += ",json=" + p.JSONName - } - if p.proto3 { - s += ",proto3" - } - if p.oneof { - s += ",oneof" - } - if len(p.Enum) > 0 { - s += ",enum=" + p.Enum - } - if p.HasDefault { - s += ",def=" + p.Default - } - return s -} - -// Parse populates p by parsing a string in the protobuf struct field tag style. -func (p *Properties) Parse(s string) { - // "bytes,49,opt,name=foo,def=hello!" - fields := strings.Split(s, ",") // breaks def=, but handled below. - if len(fields) < 2 { - fmt.Fprintf(os.Stderr, "proto: tag has too few fields: %q\n", s) - return - } - - p.Wire = fields[0] - switch p.Wire { - case "varint": - p.WireType = WireVarint - case "fixed32": - p.WireType = WireFixed32 - case "fixed64": - p.WireType = WireFixed64 - case "zigzag32": - p.WireType = WireVarint - case "zigzag64": - p.WireType = WireVarint - case "bytes", "group": - p.WireType = WireBytes - // no numeric converter for non-numeric types - default: - fmt.Fprintf(os.Stderr, "proto: tag has unknown wire type: %q\n", s) - return - } - - var err error - p.Tag, err = strconv.Atoi(fields[1]) - if err != nil { - return - } - -outer: - for i := 2; i < len(fields); i++ { - f := fields[i] - switch { - case f == "req": - p.Required = true - case f == "opt": - p.Optional = true - case f == "rep": - p.Repeated = true - case f == "packed": - p.Packed = true - case strings.HasPrefix(f, "name="): - p.OrigName = f[5:] - case strings.HasPrefix(f, "json="): - p.JSONName = f[5:] - case strings.HasPrefix(f, "enum="): - p.Enum = f[5:] - case f == "proto3": - p.proto3 = true - case f == "oneof": - p.oneof = true - case strings.HasPrefix(f, "def="): - p.HasDefault = true - p.Default = f[4:] // rest of string - if i+1 < len(fields) { - // Commas aren't escaped, and def is always last. - p.Default += "," + strings.Join(fields[i+1:], ",") - break outer - } - } - } -} - -var protoMessageType = reflect.TypeOf((*Message)(nil)).Elem() - -// setFieldProps initializes the field properties for submessages and maps. -func (p *Properties) setFieldProps(typ reflect.Type, f *reflect.StructField, lockGetProp bool) { - switch t1 := typ; t1.Kind() { - case reflect.Ptr: - if t1.Elem().Kind() == reflect.Struct { - p.stype = t1.Elem() - } - - case reflect.Slice: - if t2 := t1.Elem(); t2.Kind() == reflect.Ptr && t2.Elem().Kind() == reflect.Struct { - p.stype = t2.Elem() - } - - case reflect.Map: - p.mtype = t1 - p.mkeyprop = &Properties{} - p.mkeyprop.init(reflect.PtrTo(p.mtype.Key()), "Key", f.Tag.Get("protobuf_key"), nil, lockGetProp) - p.mvalprop = &Properties{} - vtype := p.mtype.Elem() - if vtype.Kind() != reflect.Ptr && vtype.Kind() != reflect.Slice { - // The value type is not a message (*T) or bytes ([]byte), - // so we need encoders for the pointer to this type. - vtype = reflect.PtrTo(vtype) - } - p.mvalprop.init(vtype, "Value", f.Tag.Get("protobuf_val"), nil, lockGetProp) - } - - if p.stype != nil { - if lockGetProp { - p.sprop = GetProperties(p.stype) - } else { - p.sprop = getPropertiesLocked(p.stype) - } - } -} - -var ( - marshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem() -) - -// Init populates the properties from a protocol buffer struct tag. -func (p *Properties) Init(typ reflect.Type, name, tag string, f *reflect.StructField) { - p.init(typ, name, tag, f, true) -} - -func (p *Properties) init(typ reflect.Type, name, tag string, f *reflect.StructField, lockGetProp bool) { - // "bytes,49,opt,def=hello!" - p.Name = name - p.OrigName = name - if tag == "" { - return - } - p.Parse(tag) - p.setFieldProps(typ, f, lockGetProp) -} - -var ( - propertiesMu sync.RWMutex - propertiesMap = make(map[reflect.Type]*StructProperties) -) - -// GetProperties returns the list of properties for the type represented by t. -// t must represent a generated struct type of a protocol message. -func GetProperties(t reflect.Type) *StructProperties { - if t.Kind() != reflect.Struct { - panic("proto: type must have kind struct") - } - - // Most calls to GetProperties in a long-running program will be - // retrieving details for types we have seen before. - propertiesMu.RLock() - sprop, ok := propertiesMap[t] - propertiesMu.RUnlock() - if ok { - if collectStats { - stats.Chit++ - } - return sprop - } - - propertiesMu.Lock() - sprop = getPropertiesLocked(t) - propertiesMu.Unlock() - return sprop -} - -// getPropertiesLocked requires that propertiesMu is held. -func getPropertiesLocked(t reflect.Type) *StructProperties { - if prop, ok := propertiesMap[t]; ok { - if collectStats { - stats.Chit++ - } - return prop - } - if collectStats { - stats.Cmiss++ - } - - prop := new(StructProperties) - // in case of recursive protos, fill this in now. - propertiesMap[t] = prop - - // build properties - prop.Prop = make([]*Properties, t.NumField()) - prop.order = make([]int, t.NumField()) - - for i := 0; i < t.NumField(); i++ { - f := t.Field(i) - p := new(Properties) - name := f.Name - p.init(f.Type, name, f.Tag.Get("protobuf"), &f, false) - - oneof := f.Tag.Get("protobuf_oneof") // special case - if oneof != "" { - // Oneof fields don't use the traditional protobuf tag. - p.OrigName = oneof - } - prop.Prop[i] = p - prop.order[i] = i - if debug { - print(i, " ", f.Name, " ", t.String(), " ") - if p.Tag > 0 { - print(p.String()) - } - print("\n") - } - } - - // Re-order prop.order. - sort.Sort(prop) - - type oneofMessage interface { - XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{}) - } - if om, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); ok { - var oots []interface{} - _, _, _, oots = om.XXX_OneofFuncs() - - // Interpret oneof metadata. - prop.OneofTypes = make(map[string]*OneofProperties) - for _, oot := range oots { - oop := &OneofProperties{ - Type: reflect.ValueOf(oot).Type(), // *T - Prop: new(Properties), - } - sft := oop.Type.Elem().Field(0) - oop.Prop.Name = sft.Name - oop.Prop.Parse(sft.Tag.Get("protobuf")) - // There will be exactly one interface field that - // this new value is assignable to. - for i := 0; i < t.NumField(); i++ { - f := t.Field(i) - if f.Type.Kind() != reflect.Interface { - continue - } - if !oop.Type.AssignableTo(f.Type) { - continue - } - oop.Field = i - break - } - prop.OneofTypes[oop.Prop.OrigName] = oop - } - } - - // build required counts - // build tags - reqCount := 0 - prop.decoderOrigNames = make(map[string]int) - for i, p := range prop.Prop { - if strings.HasPrefix(p.Name, "XXX_") { - // Internal fields should not appear in tags/origNames maps. - // They are handled specially when encoding and decoding. - continue - } - if p.Required { - reqCount++ - } - prop.decoderTags.put(p.Tag, i) - prop.decoderOrigNames[p.OrigName] = i - } - prop.reqCount = reqCount - - return prop -} - -// A global registry of enum types. -// The generated code will register the generated maps by calling RegisterEnum. - -var enumValueMaps = make(map[string]map[string]int32) - -// RegisterEnum is called from the generated code to install the enum descriptor -// maps into the global table to aid parsing text format protocol buffers. -func RegisterEnum(typeName string, unusedNameMap map[int32]string, valueMap map[string]int32) { - if _, ok := enumValueMaps[typeName]; ok { - panic("proto: duplicate enum registered: " + typeName) - } - enumValueMaps[typeName] = valueMap -} - -// EnumValueMap returns the mapping from names to integers of the -// enum type enumType, or a nil if not found. -func EnumValueMap(enumType string) map[string]int32 { - return enumValueMaps[enumType] -} - -// A registry of all linked message types. -// The string is a fully-qualified proto name ("pkg.Message"). -var ( - protoTypedNils = make(map[string]Message) // a map from proto names to typed nil pointers - protoMapTypes = make(map[string]reflect.Type) // a map from proto names to map types - revProtoTypes = make(map[reflect.Type]string) -) - -// RegisterType is called from generated code and maps from the fully qualified -// proto name to the type (pointer to struct) of the protocol buffer. -func RegisterType(x Message, name string) { - if _, ok := protoTypedNils[name]; ok { - // TODO: Some day, make this a panic. - log.Printf("proto: duplicate proto type registered: %s", name) - return - } - t := reflect.TypeOf(x) - if v := reflect.ValueOf(x); v.Kind() == reflect.Ptr && v.Pointer() == 0 { - // Generated code always calls RegisterType with nil x. - // This check is just for extra safety. - protoTypedNils[name] = x - } else { - protoTypedNils[name] = reflect.Zero(t).Interface().(Message) - } - revProtoTypes[t] = name -} - -// RegisterMapType is called from generated code and maps from the fully qualified -// proto name to the native map type of the proto map definition. -func RegisterMapType(x interface{}, name string) { - if reflect.TypeOf(x).Kind() != reflect.Map { - panic(fmt.Sprintf("RegisterMapType(%T, %q); want map", x, name)) - } - if _, ok := protoMapTypes[name]; ok { - log.Printf("proto: duplicate proto type registered: %s", name) - return - } - t := reflect.TypeOf(x) - protoMapTypes[name] = t - revProtoTypes[t] = name -} - -// MessageName returns the fully-qualified proto name for the given message type. -func MessageName(x Message) string { - type xname interface { - XXX_MessageName() string - } - if m, ok := x.(xname); ok { - return m.XXX_MessageName() - } - return revProtoTypes[reflect.TypeOf(x)] -} - -// MessageType returns the message type (pointer to struct) for a named message. -// The type is not guaranteed to implement proto.Message if the name refers to a -// map entry. -func MessageType(name string) reflect.Type { - if t, ok := protoTypedNils[name]; ok { - return reflect.TypeOf(t) - } - return protoMapTypes[name] -} - -// A registry of all linked proto files. -var ( - protoFiles = make(map[string][]byte) // file name => fileDescriptor -) - -// RegisterFile is called from generated code and maps from the -// full file name of a .proto file to its compressed FileDescriptorProto. -func RegisterFile(filename string, fileDescriptor []byte) { - protoFiles[filename] = fileDescriptor -} - -// FileDescriptor returns the compressed FileDescriptorProto for a .proto file. -func FileDescriptor(filename string) []byte { return protoFiles[filename] } diff --git a/vendor/github.com/golang/protobuf/proto/table_marshal.go b/vendor/github.com/golang/protobuf/proto/table_marshal.go deleted file mode 100644 index 0f212b3..0000000 --- a/vendor/github.com/golang/protobuf/proto/table_marshal.go +++ /dev/null @@ -1,2681 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2016 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -import ( - "errors" - "fmt" - "math" - "reflect" - "sort" - "strconv" - "strings" - "sync" - "sync/atomic" - "unicode/utf8" -) - -// a sizer takes a pointer to a field and the size of its tag, computes the size of -// the encoded data. -type sizer func(pointer, int) int - -// a marshaler takes a byte slice, a pointer to a field, and its tag (in wire format), -// marshals the field to the end of the slice, returns the slice and error (if any). -type marshaler func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) - -// marshalInfo is the information used for marshaling a message. -type marshalInfo struct { - typ reflect.Type - fields []*marshalFieldInfo - unrecognized field // offset of XXX_unrecognized - extensions field // offset of XXX_InternalExtensions - v1extensions field // offset of XXX_extensions - sizecache field // offset of XXX_sizecache - initialized int32 // 0 -- only typ is set, 1 -- fully initialized - messageset bool // uses message set wire format - hasmarshaler bool // has custom marshaler - sync.RWMutex // protect extElems map, also for initialization - extElems map[int32]*marshalElemInfo // info of extension elements -} - -// marshalFieldInfo is the information used for marshaling a field of a message. -type marshalFieldInfo struct { - field field - wiretag uint64 // tag in wire format - tagsize int // size of tag in wire format - sizer sizer - marshaler marshaler - isPointer bool - required bool // field is required - name string // name of the field, for error reporting - oneofElems map[reflect.Type]*marshalElemInfo // info of oneof elements -} - -// marshalElemInfo is the information used for marshaling an extension or oneof element. -type marshalElemInfo struct { - wiretag uint64 // tag in wire format - tagsize int // size of tag in wire format - sizer sizer - marshaler marshaler - isptr bool // elem is pointer typed, thus interface of this type is a direct interface (extension only) -} - -var ( - marshalInfoMap = map[reflect.Type]*marshalInfo{} - marshalInfoLock sync.Mutex -) - -// getMarshalInfo returns the information to marshal a given type of message. -// The info it returns may not necessarily initialized. -// t is the type of the message (NOT the pointer to it). -func getMarshalInfo(t reflect.Type) *marshalInfo { - marshalInfoLock.Lock() - u, ok := marshalInfoMap[t] - if !ok { - u = &marshalInfo{typ: t} - marshalInfoMap[t] = u - } - marshalInfoLock.Unlock() - return u -} - -// Size is the entry point from generated code, -// and should be ONLY called by generated code. -// It computes the size of encoded data of msg. -// a is a pointer to a place to store cached marshal info. -func (a *InternalMessageInfo) Size(msg Message) int { - u := getMessageMarshalInfo(msg, a) - ptr := toPointer(&msg) - if ptr.isNil() { - // We get here if msg is a typed nil ((*SomeMessage)(nil)), - // so it satisfies the interface, and msg == nil wouldn't - // catch it. We don't want crash in this case. - return 0 - } - return u.size(ptr) -} - -// Marshal is the entry point from generated code, -// and should be ONLY called by generated code. -// It marshals msg to the end of b. -// a is a pointer to a place to store cached marshal info. -func (a *InternalMessageInfo) Marshal(b []byte, msg Message, deterministic bool) ([]byte, error) { - u := getMessageMarshalInfo(msg, a) - ptr := toPointer(&msg) - if ptr.isNil() { - // We get here if msg is a typed nil ((*SomeMessage)(nil)), - // so it satisfies the interface, and msg == nil wouldn't - // catch it. We don't want crash in this case. - return b, ErrNil - } - return u.marshal(b, ptr, deterministic) -} - -func getMessageMarshalInfo(msg interface{}, a *InternalMessageInfo) *marshalInfo { - // u := a.marshal, but atomically. - // We use an atomic here to ensure memory consistency. - u := atomicLoadMarshalInfo(&a.marshal) - if u == nil { - // Get marshal information from type of message. - t := reflect.ValueOf(msg).Type() - if t.Kind() != reflect.Ptr { - panic(fmt.Sprintf("cannot handle non-pointer message type %v", t)) - } - u = getMarshalInfo(t.Elem()) - // Store it in the cache for later users. - // a.marshal = u, but atomically. - atomicStoreMarshalInfo(&a.marshal, u) - } - return u -} - -// size is the main function to compute the size of the encoded data of a message. -// ptr is the pointer to the message. -func (u *marshalInfo) size(ptr pointer) int { - if atomic.LoadInt32(&u.initialized) == 0 { - u.computeMarshalInfo() - } - - // If the message can marshal itself, let it do it, for compatibility. - // NOTE: This is not efficient. - if u.hasmarshaler { - m := ptr.asPointerTo(u.typ).Interface().(Marshaler) - b, _ := m.Marshal() - return len(b) - } - - n := 0 - for _, f := range u.fields { - if f.isPointer && ptr.offset(f.field).getPointer().isNil() { - // nil pointer always marshals to nothing - continue - } - n += f.sizer(ptr.offset(f.field), f.tagsize) - } - if u.extensions.IsValid() { - e := ptr.offset(u.extensions).toExtensions() - if u.messageset { - n += u.sizeMessageSet(e) - } else { - n += u.sizeExtensions(e) - } - } - if u.v1extensions.IsValid() { - m := *ptr.offset(u.v1extensions).toOldExtensions() - n += u.sizeV1Extensions(m) - } - if u.unrecognized.IsValid() { - s := *ptr.offset(u.unrecognized).toBytes() - n += len(s) - } - // cache the result for use in marshal - if u.sizecache.IsValid() { - atomic.StoreInt32(ptr.offset(u.sizecache).toInt32(), int32(n)) - } - return n -} - -// cachedsize gets the size from cache. If there is no cache (i.e. message is not generated), -// fall back to compute the size. -func (u *marshalInfo) cachedsize(ptr pointer) int { - if u.sizecache.IsValid() { - return int(atomic.LoadInt32(ptr.offset(u.sizecache).toInt32())) - } - return u.size(ptr) -} - -// marshal is the main function to marshal a message. It takes a byte slice and appends -// the encoded data to the end of the slice, returns the slice and error (if any). -// ptr is the pointer to the message. -// If deterministic is true, map is marshaled in deterministic order. -func (u *marshalInfo) marshal(b []byte, ptr pointer, deterministic bool) ([]byte, error) { - if atomic.LoadInt32(&u.initialized) == 0 { - u.computeMarshalInfo() - } - - // If the message can marshal itself, let it do it, for compatibility. - // NOTE: This is not efficient. - if u.hasmarshaler { - m := ptr.asPointerTo(u.typ).Interface().(Marshaler) - b1, err := m.Marshal() - b = append(b, b1...) - return b, err - } - - var err, errreq error - // The old marshaler encodes extensions at beginning. - if u.extensions.IsValid() { - e := ptr.offset(u.extensions).toExtensions() - if u.messageset { - b, err = u.appendMessageSet(b, e, deterministic) - } else { - b, err = u.appendExtensions(b, e, deterministic) - } - if err != nil { - return b, err - } - } - if u.v1extensions.IsValid() { - m := *ptr.offset(u.v1extensions).toOldExtensions() - b, err = u.appendV1Extensions(b, m, deterministic) - if err != nil { - return b, err - } - } - for _, f := range u.fields { - if f.required && errreq == nil { - if ptr.offset(f.field).getPointer().isNil() { - // Required field is not set. - // We record the error but keep going, to give a complete marshaling. - errreq = &RequiredNotSetError{f.name} - continue - } - } - if f.isPointer && ptr.offset(f.field).getPointer().isNil() { - // nil pointer always marshals to nothing - continue - } - b, err = f.marshaler(b, ptr.offset(f.field), f.wiretag, deterministic) - if err != nil { - if err1, ok := err.(*RequiredNotSetError); ok { - // Required field in submessage is not set. - // We record the error but keep going, to give a complete marshaling. - if errreq == nil { - errreq = &RequiredNotSetError{f.name + "." + err1.field} - } - continue - } - if err == errRepeatedHasNil { - err = errors.New("proto: repeated field " + f.name + " has nil element") - } - return b, err - } - } - if u.unrecognized.IsValid() { - s := *ptr.offset(u.unrecognized).toBytes() - b = append(b, s...) - } - return b, errreq -} - -// computeMarshalInfo initializes the marshal info. -func (u *marshalInfo) computeMarshalInfo() { - u.Lock() - defer u.Unlock() - if u.initialized != 0 { // non-atomic read is ok as it is protected by the lock - return - } - - t := u.typ - u.unrecognized = invalidField - u.extensions = invalidField - u.v1extensions = invalidField - u.sizecache = invalidField - - // If the message can marshal itself, let it do it, for compatibility. - // NOTE: This is not efficient. - if reflect.PtrTo(t).Implements(marshalerType) { - u.hasmarshaler = true - atomic.StoreInt32(&u.initialized, 1) - return - } - - // get oneof implementers - var oneofImplementers []interface{} - if m, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); ok { - _, _, _, oneofImplementers = m.XXX_OneofFuncs() - } - - n := t.NumField() - - // deal with XXX fields first - for i := 0; i < t.NumField(); i++ { - f := t.Field(i) - if !strings.HasPrefix(f.Name, "XXX_") { - continue - } - switch f.Name { - case "XXX_sizecache": - u.sizecache = toField(&f) - case "XXX_unrecognized": - u.unrecognized = toField(&f) - case "XXX_InternalExtensions": - u.extensions = toField(&f) - u.messageset = f.Tag.Get("protobuf_messageset") == "1" - case "XXX_extensions": - u.v1extensions = toField(&f) - case "XXX_NoUnkeyedLiteral": - // nothing to do - default: - panic("unknown XXX field: " + f.Name) - } - n-- - } - - // normal fields - fields := make([]marshalFieldInfo, n) // batch allocation - u.fields = make([]*marshalFieldInfo, 0, n) - for i, j := 0, 0; i < t.NumField(); i++ { - f := t.Field(i) - - if strings.HasPrefix(f.Name, "XXX_") { - continue - } - field := &fields[j] - j++ - field.name = f.Name - u.fields = append(u.fields, field) - if f.Tag.Get("protobuf_oneof") != "" { - field.computeOneofFieldInfo(&f, oneofImplementers) - continue - } - if f.Tag.Get("protobuf") == "" { - // field has no tag (not in generated message), ignore it - u.fields = u.fields[:len(u.fields)-1] - j-- - continue - } - field.computeMarshalFieldInfo(&f) - } - - // fields are marshaled in tag order on the wire. - sort.Sort(byTag(u.fields)) - - atomic.StoreInt32(&u.initialized, 1) -} - -// helper for sorting fields by tag -type byTag []*marshalFieldInfo - -func (a byTag) Len() int { return len(a) } -func (a byTag) Swap(i, j int) { a[i], a[j] = a[j], a[i] } -func (a byTag) Less(i, j int) bool { return a[i].wiretag < a[j].wiretag } - -// getExtElemInfo returns the information to marshal an extension element. -// The info it returns is initialized. -func (u *marshalInfo) getExtElemInfo(desc *ExtensionDesc) *marshalElemInfo { - // get from cache first - u.RLock() - e, ok := u.extElems[desc.Field] - u.RUnlock() - if ok { - return e - } - - t := reflect.TypeOf(desc.ExtensionType) // pointer or slice to basic type or struct - tags := strings.Split(desc.Tag, ",") - tag, err := strconv.Atoi(tags[1]) - if err != nil { - panic("tag is not an integer") - } - wt := wiretype(tags[0]) - sizer, marshaler := typeMarshaler(t, tags, false, false) - e = &marshalElemInfo{ - wiretag: uint64(tag)<<3 | wt, - tagsize: SizeVarint(uint64(tag) << 3), - sizer: sizer, - marshaler: marshaler, - isptr: t.Kind() == reflect.Ptr, - } - - // update cache - u.Lock() - if u.extElems == nil { - u.extElems = make(map[int32]*marshalElemInfo) - } - u.extElems[desc.Field] = e - u.Unlock() - return e -} - -// computeMarshalFieldInfo fills up the information to marshal a field. -func (fi *marshalFieldInfo) computeMarshalFieldInfo(f *reflect.StructField) { - // parse protobuf tag of the field. - // tag has format of "bytes,49,opt,name=foo,def=hello!" - tags := strings.Split(f.Tag.Get("protobuf"), ",") - if tags[0] == "" { - return - } - tag, err := strconv.Atoi(tags[1]) - if err != nil { - panic("tag is not an integer") - } - wt := wiretype(tags[0]) - if tags[2] == "req" { - fi.required = true - } - fi.setTag(f, tag, wt) - fi.setMarshaler(f, tags) -} - -func (fi *marshalFieldInfo) computeOneofFieldInfo(f *reflect.StructField, oneofImplementers []interface{}) { - fi.field = toField(f) - fi.wiretag = 1<<31 - 1 // Use a large tag number, make oneofs sorted at the end. This tag will not appear on the wire. - fi.isPointer = true - fi.sizer, fi.marshaler = makeOneOfMarshaler(fi, f) - fi.oneofElems = make(map[reflect.Type]*marshalElemInfo) - - ityp := f.Type // interface type - for _, o := range oneofImplementers { - t := reflect.TypeOf(o) - if !t.Implements(ityp) { - continue - } - sf := t.Elem().Field(0) // oneof implementer is a struct with a single field - tags := strings.Split(sf.Tag.Get("protobuf"), ",") - tag, err := strconv.Atoi(tags[1]) - if err != nil { - panic("tag is not an integer") - } - wt := wiretype(tags[0]) - sizer, marshaler := typeMarshaler(sf.Type, tags, false, true) // oneof should not omit any zero value - fi.oneofElems[t.Elem()] = &marshalElemInfo{ - wiretag: uint64(tag)<<3 | wt, - tagsize: SizeVarint(uint64(tag) << 3), - sizer: sizer, - marshaler: marshaler, - } - } -} - -type oneofMessage interface { - XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{}) -} - -// wiretype returns the wire encoding of the type. -func wiretype(encoding string) uint64 { - switch encoding { - case "fixed32": - return WireFixed32 - case "fixed64": - return WireFixed64 - case "varint", "zigzag32", "zigzag64": - return WireVarint - case "bytes": - return WireBytes - case "group": - return WireStartGroup - } - panic("unknown wire type " + encoding) -} - -// setTag fills up the tag (in wire format) and its size in the info of a field. -func (fi *marshalFieldInfo) setTag(f *reflect.StructField, tag int, wt uint64) { - fi.field = toField(f) - fi.wiretag = uint64(tag)<<3 | wt - fi.tagsize = SizeVarint(uint64(tag) << 3) -} - -// setMarshaler fills up the sizer and marshaler in the info of a field. -func (fi *marshalFieldInfo) setMarshaler(f *reflect.StructField, tags []string) { - switch f.Type.Kind() { - case reflect.Map: - // map field - fi.isPointer = true - fi.sizer, fi.marshaler = makeMapMarshaler(f) - return - case reflect.Ptr, reflect.Slice: - fi.isPointer = true - } - fi.sizer, fi.marshaler = typeMarshaler(f.Type, tags, true, false) -} - -// typeMarshaler returns the sizer and marshaler of a given field. -// t is the type of the field. -// tags is the generated "protobuf" tag of the field. -// If nozero is true, zero value is not marshaled to the wire. -// If oneof is true, it is a oneof field. -func typeMarshaler(t reflect.Type, tags []string, nozero, oneof bool) (sizer, marshaler) { - encoding := tags[0] - - pointer := false - slice := false - if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 { - slice = true - t = t.Elem() - } - if t.Kind() == reflect.Ptr { - pointer = true - t = t.Elem() - } - - packed := false - proto3 := false - for i := 2; i < len(tags); i++ { - if tags[i] == "packed" { - packed = true - } - if tags[i] == "proto3" { - proto3 = true - } - } - - switch t.Kind() { - case reflect.Bool: - if pointer { - return sizeBoolPtr, appendBoolPtr - } - if slice { - if packed { - return sizeBoolPackedSlice, appendBoolPackedSlice - } - return sizeBoolSlice, appendBoolSlice - } - if nozero { - return sizeBoolValueNoZero, appendBoolValueNoZero - } - return sizeBoolValue, appendBoolValue - case reflect.Uint32: - switch encoding { - case "fixed32": - if pointer { - return sizeFixed32Ptr, appendFixed32Ptr - } - if slice { - if packed { - return sizeFixed32PackedSlice, appendFixed32PackedSlice - } - return sizeFixed32Slice, appendFixed32Slice - } - if nozero { - return sizeFixed32ValueNoZero, appendFixed32ValueNoZero - } - return sizeFixed32Value, appendFixed32Value - case "varint": - if pointer { - return sizeVarint32Ptr, appendVarint32Ptr - } - if slice { - if packed { - return sizeVarint32PackedSlice, appendVarint32PackedSlice - } - return sizeVarint32Slice, appendVarint32Slice - } - if nozero { - return sizeVarint32ValueNoZero, appendVarint32ValueNoZero - } - return sizeVarint32Value, appendVarint32Value - } - case reflect.Int32: - switch encoding { - case "fixed32": - if pointer { - return sizeFixedS32Ptr, appendFixedS32Ptr - } - if slice { - if packed { - return sizeFixedS32PackedSlice, appendFixedS32PackedSlice - } - return sizeFixedS32Slice, appendFixedS32Slice - } - if nozero { - return sizeFixedS32ValueNoZero, appendFixedS32ValueNoZero - } - return sizeFixedS32Value, appendFixedS32Value - case "varint": - if pointer { - return sizeVarintS32Ptr, appendVarintS32Ptr - } - if slice { - if packed { - return sizeVarintS32PackedSlice, appendVarintS32PackedSlice - } - return sizeVarintS32Slice, appendVarintS32Slice - } - if nozero { - return sizeVarintS32ValueNoZero, appendVarintS32ValueNoZero - } - return sizeVarintS32Value, appendVarintS32Value - case "zigzag32": - if pointer { - return sizeZigzag32Ptr, appendZigzag32Ptr - } - if slice { - if packed { - return sizeZigzag32PackedSlice, appendZigzag32PackedSlice - } - return sizeZigzag32Slice, appendZigzag32Slice - } - if nozero { - return sizeZigzag32ValueNoZero, appendZigzag32ValueNoZero - } - return sizeZigzag32Value, appendZigzag32Value - } - case reflect.Uint64: - switch encoding { - case "fixed64": - if pointer { - return sizeFixed64Ptr, appendFixed64Ptr - } - if slice { - if packed { - return sizeFixed64PackedSlice, appendFixed64PackedSlice - } - return sizeFixed64Slice, appendFixed64Slice - } - if nozero { - return sizeFixed64ValueNoZero, appendFixed64ValueNoZero - } - return sizeFixed64Value, appendFixed64Value - case "varint": - if pointer { - return sizeVarint64Ptr, appendVarint64Ptr - } - if slice { - if packed { - return sizeVarint64PackedSlice, appendVarint64PackedSlice - } - return sizeVarint64Slice, appendVarint64Slice - } - if nozero { - return sizeVarint64ValueNoZero, appendVarint64ValueNoZero - } - return sizeVarint64Value, appendVarint64Value - } - case reflect.Int64: - switch encoding { - case "fixed64": - if pointer { - return sizeFixedS64Ptr, appendFixedS64Ptr - } - if slice { - if packed { - return sizeFixedS64PackedSlice, appendFixedS64PackedSlice - } - return sizeFixedS64Slice, appendFixedS64Slice - } - if nozero { - return sizeFixedS64ValueNoZero, appendFixedS64ValueNoZero - } - return sizeFixedS64Value, appendFixedS64Value - case "varint": - if pointer { - return sizeVarintS64Ptr, appendVarintS64Ptr - } - if slice { - if packed { - return sizeVarintS64PackedSlice, appendVarintS64PackedSlice - } - return sizeVarintS64Slice, appendVarintS64Slice - } - if nozero { - return sizeVarintS64ValueNoZero, appendVarintS64ValueNoZero - } - return sizeVarintS64Value, appendVarintS64Value - case "zigzag64": - if pointer { - return sizeZigzag64Ptr, appendZigzag64Ptr - } - if slice { - if packed { - return sizeZigzag64PackedSlice, appendZigzag64PackedSlice - } - return sizeZigzag64Slice, appendZigzag64Slice - } - if nozero { - return sizeZigzag64ValueNoZero, appendZigzag64ValueNoZero - } - return sizeZigzag64Value, appendZigzag64Value - } - case reflect.Float32: - if pointer { - return sizeFloat32Ptr, appendFloat32Ptr - } - if slice { - if packed { - return sizeFloat32PackedSlice, appendFloat32PackedSlice - } - return sizeFloat32Slice, appendFloat32Slice - } - if nozero { - return sizeFloat32ValueNoZero, appendFloat32ValueNoZero - } - return sizeFloat32Value, appendFloat32Value - case reflect.Float64: - if pointer { - return sizeFloat64Ptr, appendFloat64Ptr - } - if slice { - if packed { - return sizeFloat64PackedSlice, appendFloat64PackedSlice - } - return sizeFloat64Slice, appendFloat64Slice - } - if nozero { - return sizeFloat64ValueNoZero, appendFloat64ValueNoZero - } - return sizeFloat64Value, appendFloat64Value - case reflect.String: - if pointer { - return sizeStringPtr, appendStringPtr - } - if slice { - return sizeStringSlice, appendStringSlice - } - if nozero { - return sizeStringValueNoZero, appendStringValueNoZero - } - return sizeStringValue, appendStringValue - case reflect.Slice: - if slice { - return sizeBytesSlice, appendBytesSlice - } - if oneof { - // Oneof bytes field may also have "proto3" tag. - // We want to marshal it as a oneof field. Do this - // check before the proto3 check. - return sizeBytesOneof, appendBytesOneof - } - if proto3 { - return sizeBytes3, appendBytes3 - } - return sizeBytes, appendBytes - case reflect.Struct: - switch encoding { - case "group": - if slice { - return makeGroupSliceMarshaler(getMarshalInfo(t)) - } - return makeGroupMarshaler(getMarshalInfo(t)) - case "bytes": - if slice { - return makeMessageSliceMarshaler(getMarshalInfo(t)) - } - return makeMessageMarshaler(getMarshalInfo(t)) - } - } - panic(fmt.Sprintf("unknown or mismatched type: type: %v, wire type: %v", t, encoding)) -} - -// Below are functions to size/marshal a specific type of a field. -// They are stored in the field's info, and called by function pointers. -// They have type sizer or marshaler. - -func sizeFixed32Value(_ pointer, tagsize int) int { - return 4 + tagsize -} -func sizeFixed32ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toUint32() - if v == 0 { - return 0 - } - return 4 + tagsize -} -func sizeFixed32Ptr(ptr pointer, tagsize int) int { - p := *ptr.toUint32Ptr() - if p == nil { - return 0 - } - return 4 + tagsize -} -func sizeFixed32Slice(ptr pointer, tagsize int) int { - s := *ptr.toUint32Slice() - return (4 + tagsize) * len(s) -} -func sizeFixed32PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toUint32Slice() - if len(s) == 0 { - return 0 - } - return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize -} -func sizeFixedS32Value(_ pointer, tagsize int) int { - return 4 + tagsize -} -func sizeFixedS32ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toInt32() - if v == 0 { - return 0 - } - return 4 + tagsize -} -func sizeFixedS32Ptr(ptr pointer, tagsize int) int { - p := ptr.getInt32Ptr() - if p == nil { - return 0 - } - return 4 + tagsize -} -func sizeFixedS32Slice(ptr pointer, tagsize int) int { - s := ptr.getInt32Slice() - return (4 + tagsize) * len(s) -} -func sizeFixedS32PackedSlice(ptr pointer, tagsize int) int { - s := ptr.getInt32Slice() - if len(s) == 0 { - return 0 - } - return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize -} -func sizeFloat32Value(_ pointer, tagsize int) int { - return 4 + tagsize -} -func sizeFloat32ValueNoZero(ptr pointer, tagsize int) int { - v := math.Float32bits(*ptr.toFloat32()) - if v == 0 { - return 0 - } - return 4 + tagsize -} -func sizeFloat32Ptr(ptr pointer, tagsize int) int { - p := *ptr.toFloat32Ptr() - if p == nil { - return 0 - } - return 4 + tagsize -} -func sizeFloat32Slice(ptr pointer, tagsize int) int { - s := *ptr.toFloat32Slice() - return (4 + tagsize) * len(s) -} -func sizeFloat32PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toFloat32Slice() - if len(s) == 0 { - return 0 - } - return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize -} -func sizeFixed64Value(_ pointer, tagsize int) int { - return 8 + tagsize -} -func sizeFixed64ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toUint64() - if v == 0 { - return 0 - } - return 8 + tagsize -} -func sizeFixed64Ptr(ptr pointer, tagsize int) int { - p := *ptr.toUint64Ptr() - if p == nil { - return 0 - } - return 8 + tagsize -} -func sizeFixed64Slice(ptr pointer, tagsize int) int { - s := *ptr.toUint64Slice() - return (8 + tagsize) * len(s) -} -func sizeFixed64PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toUint64Slice() - if len(s) == 0 { - return 0 - } - return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize -} -func sizeFixedS64Value(_ pointer, tagsize int) int { - return 8 + tagsize -} -func sizeFixedS64ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toInt64() - if v == 0 { - return 0 - } - return 8 + tagsize -} -func sizeFixedS64Ptr(ptr pointer, tagsize int) int { - p := *ptr.toInt64Ptr() - if p == nil { - return 0 - } - return 8 + tagsize -} -func sizeFixedS64Slice(ptr pointer, tagsize int) int { - s := *ptr.toInt64Slice() - return (8 + tagsize) * len(s) -} -func sizeFixedS64PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toInt64Slice() - if len(s) == 0 { - return 0 - } - return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize -} -func sizeFloat64Value(_ pointer, tagsize int) int { - return 8 + tagsize -} -func sizeFloat64ValueNoZero(ptr pointer, tagsize int) int { - v := math.Float64bits(*ptr.toFloat64()) - if v == 0 { - return 0 - } - return 8 + tagsize -} -func sizeFloat64Ptr(ptr pointer, tagsize int) int { - p := *ptr.toFloat64Ptr() - if p == nil { - return 0 - } - return 8 + tagsize -} -func sizeFloat64Slice(ptr pointer, tagsize int) int { - s := *ptr.toFloat64Slice() - return (8 + tagsize) * len(s) -} -func sizeFloat64PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toFloat64Slice() - if len(s) == 0 { - return 0 - } - return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize -} -func sizeVarint32Value(ptr pointer, tagsize int) int { - v := *ptr.toUint32() - return SizeVarint(uint64(v)) + tagsize -} -func sizeVarint32ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toUint32() - if v == 0 { - return 0 - } - return SizeVarint(uint64(v)) + tagsize -} -func sizeVarint32Ptr(ptr pointer, tagsize int) int { - p := *ptr.toUint32Ptr() - if p == nil { - return 0 - } - return SizeVarint(uint64(*p)) + tagsize -} -func sizeVarint32Slice(ptr pointer, tagsize int) int { - s := *ptr.toUint32Slice() - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) + tagsize - } - return n -} -func sizeVarint32PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toUint32Slice() - if len(s) == 0 { - return 0 - } - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) - } - return n + SizeVarint(uint64(n)) + tagsize -} -func sizeVarintS32Value(ptr pointer, tagsize int) int { - v := *ptr.toInt32() - return SizeVarint(uint64(v)) + tagsize -} -func sizeVarintS32ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toInt32() - if v == 0 { - return 0 - } - return SizeVarint(uint64(v)) + tagsize -} -func sizeVarintS32Ptr(ptr pointer, tagsize int) int { - p := ptr.getInt32Ptr() - if p == nil { - return 0 - } - return SizeVarint(uint64(*p)) + tagsize -} -func sizeVarintS32Slice(ptr pointer, tagsize int) int { - s := ptr.getInt32Slice() - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) + tagsize - } - return n -} -func sizeVarintS32PackedSlice(ptr pointer, tagsize int) int { - s := ptr.getInt32Slice() - if len(s) == 0 { - return 0 - } - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) - } - return n + SizeVarint(uint64(n)) + tagsize -} -func sizeVarint64Value(ptr pointer, tagsize int) int { - v := *ptr.toUint64() - return SizeVarint(v) + tagsize -} -func sizeVarint64ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toUint64() - if v == 0 { - return 0 - } - return SizeVarint(v) + tagsize -} -func sizeVarint64Ptr(ptr pointer, tagsize int) int { - p := *ptr.toUint64Ptr() - if p == nil { - return 0 - } - return SizeVarint(*p) + tagsize -} -func sizeVarint64Slice(ptr pointer, tagsize int) int { - s := *ptr.toUint64Slice() - n := 0 - for _, v := range s { - n += SizeVarint(v) + tagsize - } - return n -} -func sizeVarint64PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toUint64Slice() - if len(s) == 0 { - return 0 - } - n := 0 - for _, v := range s { - n += SizeVarint(v) - } - return n + SizeVarint(uint64(n)) + tagsize -} -func sizeVarintS64Value(ptr pointer, tagsize int) int { - v := *ptr.toInt64() - return SizeVarint(uint64(v)) + tagsize -} -func sizeVarintS64ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toInt64() - if v == 0 { - return 0 - } - return SizeVarint(uint64(v)) + tagsize -} -func sizeVarintS64Ptr(ptr pointer, tagsize int) int { - p := *ptr.toInt64Ptr() - if p == nil { - return 0 - } - return SizeVarint(uint64(*p)) + tagsize -} -func sizeVarintS64Slice(ptr pointer, tagsize int) int { - s := *ptr.toInt64Slice() - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) + tagsize - } - return n -} -func sizeVarintS64PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toInt64Slice() - if len(s) == 0 { - return 0 - } - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) - } - return n + SizeVarint(uint64(n)) + tagsize -} -func sizeZigzag32Value(ptr pointer, tagsize int) int { - v := *ptr.toInt32() - return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize -} -func sizeZigzag32ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toInt32() - if v == 0 { - return 0 - } - return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize -} -func sizeZigzag32Ptr(ptr pointer, tagsize int) int { - p := ptr.getInt32Ptr() - if p == nil { - return 0 - } - v := *p - return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize -} -func sizeZigzag32Slice(ptr pointer, tagsize int) int { - s := ptr.getInt32Slice() - n := 0 - for _, v := range s { - n += SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize - } - return n -} -func sizeZigzag32PackedSlice(ptr pointer, tagsize int) int { - s := ptr.getInt32Slice() - if len(s) == 0 { - return 0 - } - n := 0 - for _, v := range s { - n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31)))) - } - return n + SizeVarint(uint64(n)) + tagsize -} -func sizeZigzag64Value(ptr pointer, tagsize int) int { - v := *ptr.toInt64() - return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize -} -func sizeZigzag64ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toInt64() - if v == 0 { - return 0 - } - return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize -} -func sizeZigzag64Ptr(ptr pointer, tagsize int) int { - p := *ptr.toInt64Ptr() - if p == nil { - return 0 - } - v := *p - return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize -} -func sizeZigzag64Slice(ptr pointer, tagsize int) int { - s := *ptr.toInt64Slice() - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize - } - return n -} -func sizeZigzag64PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toInt64Slice() - if len(s) == 0 { - return 0 - } - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63))) - } - return n + SizeVarint(uint64(n)) + tagsize -} -func sizeBoolValue(_ pointer, tagsize int) int { - return 1 + tagsize -} -func sizeBoolValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toBool() - if !v { - return 0 - } - return 1 + tagsize -} -func sizeBoolPtr(ptr pointer, tagsize int) int { - p := *ptr.toBoolPtr() - if p == nil { - return 0 - } - return 1 + tagsize -} -func sizeBoolSlice(ptr pointer, tagsize int) int { - s := *ptr.toBoolSlice() - return (1 + tagsize) * len(s) -} -func sizeBoolPackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toBoolSlice() - if len(s) == 0 { - return 0 - } - return len(s) + SizeVarint(uint64(len(s))) + tagsize -} -func sizeStringValue(ptr pointer, tagsize int) int { - v := *ptr.toString() - return len(v) + SizeVarint(uint64(len(v))) + tagsize -} -func sizeStringValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toString() - if v == "" { - return 0 - } - return len(v) + SizeVarint(uint64(len(v))) + tagsize -} -func sizeStringPtr(ptr pointer, tagsize int) int { - p := *ptr.toStringPtr() - if p == nil { - return 0 - } - v := *p - return len(v) + SizeVarint(uint64(len(v))) + tagsize -} -func sizeStringSlice(ptr pointer, tagsize int) int { - s := *ptr.toStringSlice() - n := 0 - for _, v := range s { - n += len(v) + SizeVarint(uint64(len(v))) + tagsize - } - return n -} -func sizeBytes(ptr pointer, tagsize int) int { - v := *ptr.toBytes() - if v == nil { - return 0 - } - return len(v) + SizeVarint(uint64(len(v))) + tagsize -} -func sizeBytes3(ptr pointer, tagsize int) int { - v := *ptr.toBytes() - if len(v) == 0 { - return 0 - } - return len(v) + SizeVarint(uint64(len(v))) + tagsize -} -func sizeBytesOneof(ptr pointer, tagsize int) int { - v := *ptr.toBytes() - return len(v) + SizeVarint(uint64(len(v))) + tagsize -} -func sizeBytesSlice(ptr pointer, tagsize int) int { - s := *ptr.toBytesSlice() - n := 0 - for _, v := range s { - n += len(v) + SizeVarint(uint64(len(v))) + tagsize - } - return n -} - -// appendFixed32 appends an encoded fixed32 to b. -func appendFixed32(b []byte, v uint32) []byte { - b = append(b, - byte(v), - byte(v>>8), - byte(v>>16), - byte(v>>24)) - return b -} - -// appendFixed64 appends an encoded fixed64 to b. -func appendFixed64(b []byte, v uint64) []byte { - b = append(b, - byte(v), - byte(v>>8), - byte(v>>16), - byte(v>>24), - byte(v>>32), - byte(v>>40), - byte(v>>48), - byte(v>>56)) - return b -} - -// appendVarint appends an encoded varint to b. -func appendVarint(b []byte, v uint64) []byte { - // TODO: make 1-byte (maybe 2-byte) case inline-able, once we - // have non-leaf inliner. - switch { - case v < 1<<7: - b = append(b, byte(v)) - case v < 1<<14: - b = append(b, - byte(v&0x7f|0x80), - byte(v>>7)) - case v < 1<<21: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte(v>>14)) - case v < 1<<28: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte(v>>21)) - case v < 1<<35: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte((v>>21)&0x7f|0x80), - byte(v>>28)) - case v < 1<<42: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte((v>>21)&0x7f|0x80), - byte((v>>28)&0x7f|0x80), - byte(v>>35)) - case v < 1<<49: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte((v>>21)&0x7f|0x80), - byte((v>>28)&0x7f|0x80), - byte((v>>35)&0x7f|0x80), - byte(v>>42)) - case v < 1<<56: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte((v>>21)&0x7f|0x80), - byte((v>>28)&0x7f|0x80), - byte((v>>35)&0x7f|0x80), - byte((v>>42)&0x7f|0x80), - byte(v>>49)) - case v < 1<<63: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte((v>>21)&0x7f|0x80), - byte((v>>28)&0x7f|0x80), - byte((v>>35)&0x7f|0x80), - byte((v>>42)&0x7f|0x80), - byte((v>>49)&0x7f|0x80), - byte(v>>56)) - default: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte((v>>21)&0x7f|0x80), - byte((v>>28)&0x7f|0x80), - byte((v>>35)&0x7f|0x80), - byte((v>>42)&0x7f|0x80), - byte((v>>49)&0x7f|0x80), - byte((v>>56)&0x7f|0x80), - 1) - } - return b -} - -func appendFixed32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint32() - b = appendVarint(b, wiretag) - b = appendFixed32(b, v) - return b, nil -} -func appendFixed32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint32() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed32(b, v) - return b, nil -} -func appendFixed32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toUint32Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed32(b, *p) - return b, nil -} -func appendFixed32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint32Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendFixed32(b, v) - } - return b, nil -} -func appendFixed32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint32Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(4*len(s))) - for _, v := range s { - b = appendFixed32(b, v) - } - return b, nil -} -func appendFixedS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt32() - b = appendVarint(b, wiretag) - b = appendFixed32(b, uint32(v)) - return b, nil -} -func appendFixedS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt32() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed32(b, uint32(v)) - return b, nil -} -func appendFixedS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := ptr.getInt32Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed32(b, uint32(*p)) - return b, nil -} -func appendFixedS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := ptr.getInt32Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendFixed32(b, uint32(v)) - } - return b, nil -} -func appendFixedS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := ptr.getInt32Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(4*len(s))) - for _, v := range s { - b = appendFixed32(b, uint32(v)) - } - return b, nil -} -func appendFloat32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := math.Float32bits(*ptr.toFloat32()) - b = appendVarint(b, wiretag) - b = appendFixed32(b, v) - return b, nil -} -func appendFloat32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := math.Float32bits(*ptr.toFloat32()) - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed32(b, v) - return b, nil -} -func appendFloat32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toFloat32Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed32(b, math.Float32bits(*p)) - return b, nil -} -func appendFloat32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toFloat32Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendFixed32(b, math.Float32bits(v)) - } - return b, nil -} -func appendFloat32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toFloat32Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(4*len(s))) - for _, v := range s { - b = appendFixed32(b, math.Float32bits(v)) - } - return b, nil -} -func appendFixed64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint64() - b = appendVarint(b, wiretag) - b = appendFixed64(b, v) - return b, nil -} -func appendFixed64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint64() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed64(b, v) - return b, nil -} -func appendFixed64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toUint64Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed64(b, *p) - return b, nil -} -func appendFixed64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint64Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendFixed64(b, v) - } - return b, nil -} -func appendFixed64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint64Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(8*len(s))) - for _, v := range s { - b = appendFixed64(b, v) - } - return b, nil -} -func appendFixedS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt64() - b = appendVarint(b, wiretag) - b = appendFixed64(b, uint64(v)) - return b, nil -} -func appendFixedS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt64() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed64(b, uint64(v)) - return b, nil -} -func appendFixedS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toInt64Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed64(b, uint64(*p)) - return b, nil -} -func appendFixedS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toInt64Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendFixed64(b, uint64(v)) - } - return b, nil -} -func appendFixedS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toInt64Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(8*len(s))) - for _, v := range s { - b = appendFixed64(b, uint64(v)) - } - return b, nil -} -func appendFloat64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := math.Float64bits(*ptr.toFloat64()) - b = appendVarint(b, wiretag) - b = appendFixed64(b, v) - return b, nil -} -func appendFloat64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := math.Float64bits(*ptr.toFloat64()) - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed64(b, v) - return b, nil -} -func appendFloat64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toFloat64Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed64(b, math.Float64bits(*p)) - return b, nil -} -func appendFloat64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toFloat64Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendFixed64(b, math.Float64bits(v)) - } - return b, nil -} -func appendFloat64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toFloat64Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(8*len(s))) - for _, v := range s { - b = appendFixed64(b, math.Float64bits(v)) - } - return b, nil -} -func appendVarint32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint32() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - return b, nil -} -func appendVarint32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint32() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - return b, nil -} -func appendVarint32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toUint32Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(*p)) - return b, nil -} -func appendVarint32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint32Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - } - return b, nil -} -func appendVarint32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint32Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - // compute size - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) - } - b = appendVarint(b, uint64(n)) - for _, v := range s { - b = appendVarint(b, uint64(v)) - } - return b, nil -} -func appendVarintS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt32() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - return b, nil -} -func appendVarintS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt32() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - return b, nil -} -func appendVarintS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := ptr.getInt32Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(*p)) - return b, nil -} -func appendVarintS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := ptr.getInt32Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - } - return b, nil -} -func appendVarintS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := ptr.getInt32Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - // compute size - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) - } - b = appendVarint(b, uint64(n)) - for _, v := range s { - b = appendVarint(b, uint64(v)) - } - return b, nil -} -func appendVarint64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint64() - b = appendVarint(b, wiretag) - b = appendVarint(b, v) - return b, nil -} -func appendVarint64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint64() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, v) - return b, nil -} -func appendVarint64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toUint64Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, *p) - return b, nil -} -func appendVarint64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint64Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, v) - } - return b, nil -} -func appendVarint64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint64Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - // compute size - n := 0 - for _, v := range s { - n += SizeVarint(v) - } - b = appendVarint(b, uint64(n)) - for _, v := range s { - b = appendVarint(b, v) - } - return b, nil -} -func appendVarintS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt64() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - return b, nil -} -func appendVarintS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt64() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - return b, nil -} -func appendVarintS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toInt64Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(*p)) - return b, nil -} -func appendVarintS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toInt64Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - } - return b, nil -} -func appendVarintS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toInt64Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - // compute size - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) - } - b = appendVarint(b, uint64(n)) - for _, v := range s { - b = appendVarint(b, uint64(v)) - } - return b, nil -} -func appendZigzag32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt32() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) - return b, nil -} -func appendZigzag32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt32() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) - return b, nil -} -func appendZigzag32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := ptr.getInt32Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - v := *p - b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) - return b, nil -} -func appendZigzag32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := ptr.getInt32Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) - } - return b, nil -} -func appendZigzag32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := ptr.getInt32Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - // compute size - n := 0 - for _, v := range s { - n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31)))) - } - b = appendVarint(b, uint64(n)) - for _, v := range s { - b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) - } - return b, nil -} -func appendZigzag64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt64() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) - return b, nil -} -func appendZigzag64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt64() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) - return b, nil -} -func appendZigzag64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toInt64Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - v := *p - b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) - return b, nil -} -func appendZigzag64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toInt64Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) - } - return b, nil -} -func appendZigzag64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toInt64Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - // compute size - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63))) - } - b = appendVarint(b, uint64(n)) - for _, v := range s { - b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) - } - return b, nil -} -func appendBoolValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toBool() - b = appendVarint(b, wiretag) - if v { - b = append(b, 1) - } else { - b = append(b, 0) - } - return b, nil -} -func appendBoolValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toBool() - if !v { - return b, nil - } - b = appendVarint(b, wiretag) - b = append(b, 1) - return b, nil -} - -func appendBoolPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toBoolPtr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - if *p { - b = append(b, 1) - } else { - b = append(b, 0) - } - return b, nil -} -func appendBoolSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toBoolSlice() - for _, v := range s { - b = appendVarint(b, wiretag) - if v { - b = append(b, 1) - } else { - b = append(b, 0) - } - } - return b, nil -} -func appendBoolPackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toBoolSlice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(len(s))) - for _, v := range s { - if v { - b = append(b, 1) - } else { - b = append(b, 0) - } - } - return b, nil -} -func appendStringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toString() - if !utf8.ValidString(v) { - return nil, errInvalidUTF8 - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - return b, nil -} -func appendStringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toString() - if v == "" { - return b, nil - } - if !utf8.ValidString(v) { - return nil, errInvalidUTF8 - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - return b, nil -} -func appendStringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toStringPtr() - if p == nil { - return b, nil - } - v := *p - if !utf8.ValidString(v) { - return nil, errInvalidUTF8 - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - return b, nil -} -func appendStringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toStringSlice() - for _, v := range s { - if !utf8.ValidString(v) { - return nil, errInvalidUTF8 - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - } - return b, nil -} -func appendBytes(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toBytes() - if v == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - return b, nil -} -func appendBytes3(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toBytes() - if len(v) == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - return b, nil -} -func appendBytesOneof(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toBytes() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - return b, nil -} -func appendBytesSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toBytesSlice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - } - return b, nil -} - -// makeGroupMarshaler returns the sizer and marshaler for a group. -// u is the marshal info of the underlying message. -func makeGroupMarshaler(u *marshalInfo) (sizer, marshaler) { - return func(ptr pointer, tagsize int) int { - p := ptr.getPointer() - if p.isNil() { - return 0 - } - return u.size(p) + 2*tagsize - }, - func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { - p := ptr.getPointer() - if p.isNil() { - return b, nil - } - var err error - b = appendVarint(b, wiretag) // start group - b, err = u.marshal(b, p, deterministic) - b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group - return b, err - } -} - -// makeGroupSliceMarshaler returns the sizer and marshaler for a group slice. -// u is the marshal info of the underlying message. -func makeGroupSliceMarshaler(u *marshalInfo) (sizer, marshaler) { - return func(ptr pointer, tagsize int) int { - s := ptr.getPointerSlice() - n := 0 - for _, v := range s { - if v.isNil() { - continue - } - n += u.size(v) + 2*tagsize - } - return n - }, - func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { - s := ptr.getPointerSlice() - var err, errreq error - for _, v := range s { - if v.isNil() { - return b, errRepeatedHasNil - } - b = appendVarint(b, wiretag) // start group - b, err = u.marshal(b, v, deterministic) - b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group - if err != nil { - if _, ok := err.(*RequiredNotSetError); ok { - // Required field in submessage is not set. - // We record the error but keep going, to give a complete marshaling. - if errreq == nil { - errreq = err - } - continue - } - if err == ErrNil { - err = errRepeatedHasNil - } - return b, err - } - } - return b, errreq - } -} - -// makeMessageMarshaler returns the sizer and marshaler for a message field. -// u is the marshal info of the message. -func makeMessageMarshaler(u *marshalInfo) (sizer, marshaler) { - return func(ptr pointer, tagsize int) int { - p := ptr.getPointer() - if p.isNil() { - return 0 - } - siz := u.size(p) - return siz + SizeVarint(uint64(siz)) + tagsize - }, - func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { - p := ptr.getPointer() - if p.isNil() { - return b, nil - } - b = appendVarint(b, wiretag) - siz := u.cachedsize(p) - b = appendVarint(b, uint64(siz)) - return u.marshal(b, p, deterministic) - } -} - -// makeMessageSliceMarshaler returns the sizer and marshaler for a message slice. -// u is the marshal info of the message. -func makeMessageSliceMarshaler(u *marshalInfo) (sizer, marshaler) { - return func(ptr pointer, tagsize int) int { - s := ptr.getPointerSlice() - n := 0 - for _, v := range s { - if v.isNil() { - continue - } - siz := u.size(v) - n += siz + SizeVarint(uint64(siz)) + tagsize - } - return n - }, - func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { - s := ptr.getPointerSlice() - var err, errreq error - for _, v := range s { - if v.isNil() { - return b, errRepeatedHasNil - } - b = appendVarint(b, wiretag) - siz := u.cachedsize(v) - b = appendVarint(b, uint64(siz)) - b, err = u.marshal(b, v, deterministic) - - if err != nil { - if _, ok := err.(*RequiredNotSetError); ok { - // Required field in submessage is not set. - // We record the error but keep going, to give a complete marshaling. - if errreq == nil { - errreq = err - } - continue - } - if err == ErrNil { - err = errRepeatedHasNil - } - return b, err - } - } - return b, errreq - } -} - -// makeMapMarshaler returns the sizer and marshaler for a map field. -// f is the pointer to the reflect data structure of the field. -func makeMapMarshaler(f *reflect.StructField) (sizer, marshaler) { - // figure out key and value type - t := f.Type - keyType := t.Key() - valType := t.Elem() - keyTags := strings.Split(f.Tag.Get("protobuf_key"), ",") - valTags := strings.Split(f.Tag.Get("protobuf_val"), ",") - keySizer, keyMarshaler := typeMarshaler(keyType, keyTags, false, false) // don't omit zero value in map - valSizer, valMarshaler := typeMarshaler(valType, valTags, false, false) // don't omit zero value in map - keyWireTag := 1<<3 | wiretype(keyTags[0]) - valWireTag := 2<<3 | wiretype(valTags[0]) - - // We create an interface to get the addresses of the map key and value. - // If value is pointer-typed, the interface is a direct interface, the - // idata itself is the value. Otherwise, the idata is the pointer to the - // value. - // Key cannot be pointer-typed. - valIsPtr := valType.Kind() == reflect.Ptr - return func(ptr pointer, tagsize int) int { - m := ptr.asPointerTo(t).Elem() // the map - n := 0 - for _, k := range m.MapKeys() { - ki := k.Interface() - vi := m.MapIndex(k).Interface() - kaddr := toAddrPointer(&ki, false) // pointer to key - vaddr := toAddrPointer(&vi, valIsPtr) // pointer to value - siz := keySizer(kaddr, 1) + valSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1) - n += siz + SizeVarint(uint64(siz)) + tagsize - } - return n - }, - func(b []byte, ptr pointer, tag uint64, deterministic bool) ([]byte, error) { - m := ptr.asPointerTo(t).Elem() // the map - var err error - keys := m.MapKeys() - if len(keys) > 1 && deterministic { - sort.Sort(mapKeys(keys)) - } - for _, k := range keys { - ki := k.Interface() - vi := m.MapIndex(k).Interface() - kaddr := toAddrPointer(&ki, false) // pointer to key - vaddr := toAddrPointer(&vi, valIsPtr) // pointer to value - b = appendVarint(b, tag) - siz := keySizer(kaddr, 1) + valSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1) - b = appendVarint(b, uint64(siz)) - b, err = keyMarshaler(b, kaddr, keyWireTag, deterministic) - if err != nil { - return b, err - } - b, err = valMarshaler(b, vaddr, valWireTag, deterministic) - if err != nil && err != ErrNil { // allow nil value in map - return b, err - } - } - return b, nil - } -} - -// makeOneOfMarshaler returns the sizer and marshaler for a oneof field. -// fi is the marshal info of the field. -// f is the pointer to the reflect data structure of the field. -func makeOneOfMarshaler(fi *marshalFieldInfo, f *reflect.StructField) (sizer, marshaler) { - // Oneof field is an interface. We need to get the actual data type on the fly. - t := f.Type - return func(ptr pointer, _ int) int { - p := ptr.getInterfacePointer() - if p.isNil() { - return 0 - } - v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct - telem := v.Type() - e := fi.oneofElems[telem] - return e.sizer(p, e.tagsize) - }, - func(b []byte, ptr pointer, _ uint64, deterministic bool) ([]byte, error) { - p := ptr.getInterfacePointer() - if p.isNil() { - return b, nil - } - v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct - telem := v.Type() - if telem.Field(0).Type.Kind() == reflect.Ptr && p.getPointer().isNil() { - return b, errOneofHasNil - } - e := fi.oneofElems[telem] - return e.marshaler(b, p, e.wiretag, deterministic) - } -} - -// sizeExtensions computes the size of encoded data for a XXX_InternalExtensions field. -func (u *marshalInfo) sizeExtensions(ext *XXX_InternalExtensions) int { - m, mu := ext.extensionsRead() - if m == nil { - return 0 - } - mu.Lock() - - n := 0 - for _, e := range m { - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - n += len(e.enc) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - n += ei.sizer(p, ei.tagsize) - } - mu.Unlock() - return n -} - -// appendExtensions marshals a XXX_InternalExtensions field to the end of byte slice b. -func (u *marshalInfo) appendExtensions(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) { - m, mu := ext.extensionsRead() - if m == nil { - return b, nil - } - mu.Lock() - defer mu.Unlock() - - var err error - - // Fast-path for common cases: zero or one extensions. - // Don't bother sorting the keys. - if len(m) <= 1 { - for _, e := range m { - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - b = append(b, e.enc...) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - b, err = ei.marshaler(b, p, ei.wiretag, deterministic) - if err != nil { - return b, err - } - } - return b, nil - } - - // Sort the keys to provide a deterministic encoding. - // Not sure this is required, but the old code does it. - keys := make([]int, 0, len(m)) - for k := range m { - keys = append(keys, int(k)) - } - sort.Ints(keys) - - for _, k := range keys { - e := m[int32(k)] - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - b = append(b, e.enc...) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - b, err = ei.marshaler(b, p, ei.wiretag, deterministic) - if err != nil { - return b, err - } - } - return b, nil -} - -// message set format is: -// message MessageSet { -// repeated group Item = 1 { -// required int32 type_id = 2; -// required string message = 3; -// }; -// } - -// sizeMessageSet computes the size of encoded data for a XXX_InternalExtensions field -// in message set format (above). -func (u *marshalInfo) sizeMessageSet(ext *XXX_InternalExtensions) int { - m, mu := ext.extensionsRead() - if m == nil { - return 0 - } - mu.Lock() - - n := 0 - for id, e := range m { - n += 2 // start group, end group. tag = 1 (size=1) - n += SizeVarint(uint64(id)) + 1 // type_id, tag = 2 (size=1) - - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint - siz := len(msgWithLen) - n += siz + 1 // message, tag = 3 (size=1) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - n += ei.sizer(p, 1) // message, tag = 3 (size=1) - } - mu.Unlock() - return n -} - -// appendMessageSet marshals a XXX_InternalExtensions field in message set format (above) -// to the end of byte slice b. -func (u *marshalInfo) appendMessageSet(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) { - m, mu := ext.extensionsRead() - if m == nil { - return b, nil - } - mu.Lock() - defer mu.Unlock() - - var err error - - // Fast-path for common cases: zero or one extensions. - // Don't bother sorting the keys. - if len(m) <= 1 { - for id, e := range m { - b = append(b, 1<<3|WireStartGroup) - b = append(b, 2<<3|WireVarint) - b = appendVarint(b, uint64(id)) - - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint - b = append(b, 3<<3|WireBytes) - b = append(b, msgWithLen...) - b = append(b, 1<<3|WireEndGroup) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic) - if err != nil { - return b, err - } - b = append(b, 1<<3|WireEndGroup) - } - return b, nil - } - - // Sort the keys to provide a deterministic encoding. - keys := make([]int, 0, len(m)) - for k := range m { - keys = append(keys, int(k)) - } - sort.Ints(keys) - - for _, id := range keys { - e := m[int32(id)] - b = append(b, 1<<3|WireStartGroup) - b = append(b, 2<<3|WireVarint) - b = appendVarint(b, uint64(id)) - - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint - b = append(b, 3<<3|WireBytes) - b = append(b, msgWithLen...) - b = append(b, 1<<3|WireEndGroup) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic) - b = append(b, 1<<3|WireEndGroup) - if err != nil { - return b, err - } - } - return b, nil -} - -// sizeV1Extensions computes the size of encoded data for a V1-API extension field. -func (u *marshalInfo) sizeV1Extensions(m map[int32]Extension) int { - if m == nil { - return 0 - } - - n := 0 - for _, e := range m { - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - n += len(e.enc) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - n += ei.sizer(p, ei.tagsize) - } - return n -} - -// appendV1Extensions marshals a V1-API extension field to the end of byte slice b. -func (u *marshalInfo) appendV1Extensions(b []byte, m map[int32]Extension, deterministic bool) ([]byte, error) { - if m == nil { - return b, nil - } - - // Sort the keys to provide a deterministic encoding. - keys := make([]int, 0, len(m)) - for k := range m { - keys = append(keys, int(k)) - } - sort.Ints(keys) - - var err error - for _, k := range keys { - e := m[int32(k)] - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - b = append(b, e.enc...) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - b, err = ei.marshaler(b, p, ei.wiretag, deterministic) - if err != nil { - return b, err - } - } - return b, nil -} - -// newMarshaler is the interface representing objects that can marshal themselves. -// -// This exists to support protoc-gen-go generated messages. -// The proto package will stop type-asserting to this interface in the future. -// -// DO NOT DEPEND ON THIS. -type newMarshaler interface { - XXX_Size() int - XXX_Marshal(b []byte, deterministic bool) ([]byte, error) -} - -// Size returns the encoded size of a protocol buffer message. -// This is the main entry point. -func Size(pb Message) int { - if m, ok := pb.(newMarshaler); ok { - return m.XXX_Size() - } - if m, ok := pb.(Marshaler); ok { - // If the message can marshal itself, let it do it, for compatibility. - // NOTE: This is not efficient. - b, _ := m.Marshal() - return len(b) - } - // in case somehow we didn't generate the wrapper - if pb == nil { - return 0 - } - var info InternalMessageInfo - return info.Size(pb) -} - -// Marshal takes a protocol buffer message -// and encodes it into the wire format, returning the data. -// This is the main entry point. -func Marshal(pb Message) ([]byte, error) { - if m, ok := pb.(newMarshaler); ok { - siz := m.XXX_Size() - b := make([]byte, 0, siz) - return m.XXX_Marshal(b, false) - } - if m, ok := pb.(Marshaler); ok { - // If the message can marshal itself, let it do it, for compatibility. - // NOTE: This is not efficient. - return m.Marshal() - } - // in case somehow we didn't generate the wrapper - if pb == nil { - return nil, ErrNil - } - var info InternalMessageInfo - siz := info.Size(pb) - b := make([]byte, 0, siz) - return info.Marshal(b, pb, false) -} - -// Marshal takes a protocol buffer message -// and encodes it into the wire format, writing the result to the -// Buffer. -// This is an alternative entry point. It is not necessary to use -// a Buffer for most applications. -func (p *Buffer) Marshal(pb Message) error { - var err error - if m, ok := pb.(newMarshaler); ok { - siz := m.XXX_Size() - p.grow(siz) // make sure buf has enough capacity - p.buf, err = m.XXX_Marshal(p.buf, p.deterministic) - return err - } - if m, ok := pb.(Marshaler); ok { - // If the message can marshal itself, let it do it, for compatibility. - // NOTE: This is not efficient. - b, err := m.Marshal() - p.buf = append(p.buf, b...) - return err - } - // in case somehow we didn't generate the wrapper - if pb == nil { - return ErrNil - } - var info InternalMessageInfo - siz := info.Size(pb) - p.grow(siz) // make sure buf has enough capacity - p.buf, err = info.Marshal(p.buf, pb, p.deterministic) - return err -} - -// grow grows the buffer's capacity, if necessary, to guarantee space for -// another n bytes. After grow(n), at least n bytes can be written to the -// buffer without another allocation. -func (p *Buffer) grow(n int) { - need := len(p.buf) + n - if need <= cap(p.buf) { - return - } - newCap := len(p.buf) * 2 - if newCap < need { - newCap = need - } - p.buf = append(make([]byte, 0, newCap), p.buf...) -} diff --git a/vendor/github.com/golang/protobuf/proto/table_merge.go b/vendor/github.com/golang/protobuf/proto/table_merge.go deleted file mode 100644 index 5525def..0000000 --- a/vendor/github.com/golang/protobuf/proto/table_merge.go +++ /dev/null @@ -1,654 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2016 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -import ( - "fmt" - "reflect" - "strings" - "sync" - "sync/atomic" -) - -// Merge merges the src message into dst. -// This assumes that dst and src of the same type and are non-nil. -func (a *InternalMessageInfo) Merge(dst, src Message) { - mi := atomicLoadMergeInfo(&a.merge) - if mi == nil { - mi = getMergeInfo(reflect.TypeOf(dst).Elem()) - atomicStoreMergeInfo(&a.merge, mi) - } - mi.merge(toPointer(&dst), toPointer(&src)) -} - -type mergeInfo struct { - typ reflect.Type - - initialized int32 // 0: only typ is valid, 1: everything is valid - lock sync.Mutex - - fields []mergeFieldInfo - unrecognized field // Offset of XXX_unrecognized -} - -type mergeFieldInfo struct { - field field // Offset of field, guaranteed to be valid - - // isPointer reports whether the value in the field is a pointer. - // This is true for the following situations: - // * Pointer to struct - // * Pointer to basic type (proto2 only) - // * Slice (first value in slice header is a pointer) - // * String (first value in string header is a pointer) - isPointer bool - - // basicWidth reports the width of the field assuming that it is directly - // embedded in the struct (as is the case for basic types in proto3). - // The possible values are: - // 0: invalid - // 1: bool - // 4: int32, uint32, float32 - // 8: int64, uint64, float64 - basicWidth int - - // Where dst and src are pointers to the types being merged. - merge func(dst, src pointer) -} - -var ( - mergeInfoMap = map[reflect.Type]*mergeInfo{} - mergeInfoLock sync.Mutex -) - -func getMergeInfo(t reflect.Type) *mergeInfo { - mergeInfoLock.Lock() - defer mergeInfoLock.Unlock() - mi := mergeInfoMap[t] - if mi == nil { - mi = &mergeInfo{typ: t} - mergeInfoMap[t] = mi - } - return mi -} - -// merge merges src into dst assuming they are both of type *mi.typ. -func (mi *mergeInfo) merge(dst, src pointer) { - if dst.isNil() { - panic("proto: nil destination") - } - if src.isNil() { - return // Nothing to do. - } - - if atomic.LoadInt32(&mi.initialized) == 0 { - mi.computeMergeInfo() - } - - for _, fi := range mi.fields { - sfp := src.offset(fi.field) - - // As an optimization, we can avoid the merge function call cost - // if we know for sure that the source will have no effect - // by checking if it is the zero value. - if unsafeAllowed { - if fi.isPointer && sfp.getPointer().isNil() { // Could be slice or string - continue - } - if fi.basicWidth > 0 { - switch { - case fi.basicWidth == 1 && !*sfp.toBool(): - continue - case fi.basicWidth == 4 && *sfp.toUint32() == 0: - continue - case fi.basicWidth == 8 && *sfp.toUint64() == 0: - continue - } - } - } - - dfp := dst.offset(fi.field) - fi.merge(dfp, sfp) - } - - // TODO: Make this faster? - out := dst.asPointerTo(mi.typ).Elem() - in := src.asPointerTo(mi.typ).Elem() - if emIn, err := extendable(in.Addr().Interface()); err == nil { - emOut, _ := extendable(out.Addr().Interface()) - mIn, muIn := emIn.extensionsRead() - if mIn != nil { - mOut := emOut.extensionsWrite() - muIn.Lock() - mergeExtension(mOut, mIn) - muIn.Unlock() - } - } - - if mi.unrecognized.IsValid() { - if b := *src.offset(mi.unrecognized).toBytes(); len(b) > 0 { - *dst.offset(mi.unrecognized).toBytes() = append([]byte(nil), b...) - } - } -} - -func (mi *mergeInfo) computeMergeInfo() { - mi.lock.Lock() - defer mi.lock.Unlock() - if mi.initialized != 0 { - return - } - t := mi.typ - n := t.NumField() - - props := GetProperties(t) - for i := 0; i < n; i++ { - f := t.Field(i) - if strings.HasPrefix(f.Name, "XXX_") { - continue - } - - mfi := mergeFieldInfo{field: toField(&f)} - tf := f.Type - - // As an optimization, we can avoid the merge function call cost - // if we know for sure that the source will have no effect - // by checking if it is the zero value. - if unsafeAllowed { - switch tf.Kind() { - case reflect.Ptr, reflect.Slice, reflect.String: - // As a special case, we assume slices and strings are pointers - // since we know that the first field in the SliceSlice or - // StringHeader is a data pointer. - mfi.isPointer = true - case reflect.Bool: - mfi.basicWidth = 1 - case reflect.Int32, reflect.Uint32, reflect.Float32: - mfi.basicWidth = 4 - case reflect.Int64, reflect.Uint64, reflect.Float64: - mfi.basicWidth = 8 - } - } - - // Unwrap tf to get at its most basic type. - var isPointer, isSlice bool - if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { - isSlice = true - tf = tf.Elem() - } - if tf.Kind() == reflect.Ptr { - isPointer = true - tf = tf.Elem() - } - if isPointer && isSlice && tf.Kind() != reflect.Struct { - panic("both pointer and slice for basic type in " + tf.Name()) - } - - switch tf.Kind() { - case reflect.Int32: - switch { - case isSlice: // E.g., []int32 - mfi.merge = func(dst, src pointer) { - // NOTE: toInt32Slice is not defined (see pointer_reflect.go). - /* - sfsp := src.toInt32Slice() - if *sfsp != nil { - dfsp := dst.toInt32Slice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []int64{} - } - } - */ - sfs := src.getInt32Slice() - if sfs != nil { - dfs := dst.getInt32Slice() - dfs = append(dfs, sfs...) - if dfs == nil { - dfs = []int32{} - } - dst.setInt32Slice(dfs) - } - } - case isPointer: // E.g., *int32 - mfi.merge = func(dst, src pointer) { - // NOTE: toInt32Ptr is not defined (see pointer_reflect.go). - /* - sfpp := src.toInt32Ptr() - if *sfpp != nil { - dfpp := dst.toInt32Ptr() - if *dfpp == nil { - *dfpp = Int32(**sfpp) - } else { - **dfpp = **sfpp - } - } - */ - sfp := src.getInt32Ptr() - if sfp != nil { - dfp := dst.getInt32Ptr() - if dfp == nil { - dst.setInt32Ptr(*sfp) - } else { - *dfp = *sfp - } - } - } - default: // E.g., int32 - mfi.merge = func(dst, src pointer) { - if v := *src.toInt32(); v != 0 { - *dst.toInt32() = v - } - } - } - case reflect.Int64: - switch { - case isSlice: // E.g., []int64 - mfi.merge = func(dst, src pointer) { - sfsp := src.toInt64Slice() - if *sfsp != nil { - dfsp := dst.toInt64Slice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []int64{} - } - } - } - case isPointer: // E.g., *int64 - mfi.merge = func(dst, src pointer) { - sfpp := src.toInt64Ptr() - if *sfpp != nil { - dfpp := dst.toInt64Ptr() - if *dfpp == nil { - *dfpp = Int64(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., int64 - mfi.merge = func(dst, src pointer) { - if v := *src.toInt64(); v != 0 { - *dst.toInt64() = v - } - } - } - case reflect.Uint32: - switch { - case isSlice: // E.g., []uint32 - mfi.merge = func(dst, src pointer) { - sfsp := src.toUint32Slice() - if *sfsp != nil { - dfsp := dst.toUint32Slice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []uint32{} - } - } - } - case isPointer: // E.g., *uint32 - mfi.merge = func(dst, src pointer) { - sfpp := src.toUint32Ptr() - if *sfpp != nil { - dfpp := dst.toUint32Ptr() - if *dfpp == nil { - *dfpp = Uint32(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., uint32 - mfi.merge = func(dst, src pointer) { - if v := *src.toUint32(); v != 0 { - *dst.toUint32() = v - } - } - } - case reflect.Uint64: - switch { - case isSlice: // E.g., []uint64 - mfi.merge = func(dst, src pointer) { - sfsp := src.toUint64Slice() - if *sfsp != nil { - dfsp := dst.toUint64Slice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []uint64{} - } - } - } - case isPointer: // E.g., *uint64 - mfi.merge = func(dst, src pointer) { - sfpp := src.toUint64Ptr() - if *sfpp != nil { - dfpp := dst.toUint64Ptr() - if *dfpp == nil { - *dfpp = Uint64(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., uint64 - mfi.merge = func(dst, src pointer) { - if v := *src.toUint64(); v != 0 { - *dst.toUint64() = v - } - } - } - case reflect.Float32: - switch { - case isSlice: // E.g., []float32 - mfi.merge = func(dst, src pointer) { - sfsp := src.toFloat32Slice() - if *sfsp != nil { - dfsp := dst.toFloat32Slice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []float32{} - } - } - } - case isPointer: // E.g., *float32 - mfi.merge = func(dst, src pointer) { - sfpp := src.toFloat32Ptr() - if *sfpp != nil { - dfpp := dst.toFloat32Ptr() - if *dfpp == nil { - *dfpp = Float32(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., float32 - mfi.merge = func(dst, src pointer) { - if v := *src.toFloat32(); v != 0 { - *dst.toFloat32() = v - } - } - } - case reflect.Float64: - switch { - case isSlice: // E.g., []float64 - mfi.merge = func(dst, src pointer) { - sfsp := src.toFloat64Slice() - if *sfsp != nil { - dfsp := dst.toFloat64Slice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []float64{} - } - } - } - case isPointer: // E.g., *float64 - mfi.merge = func(dst, src pointer) { - sfpp := src.toFloat64Ptr() - if *sfpp != nil { - dfpp := dst.toFloat64Ptr() - if *dfpp == nil { - *dfpp = Float64(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., float64 - mfi.merge = func(dst, src pointer) { - if v := *src.toFloat64(); v != 0 { - *dst.toFloat64() = v - } - } - } - case reflect.Bool: - switch { - case isSlice: // E.g., []bool - mfi.merge = func(dst, src pointer) { - sfsp := src.toBoolSlice() - if *sfsp != nil { - dfsp := dst.toBoolSlice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []bool{} - } - } - } - case isPointer: // E.g., *bool - mfi.merge = func(dst, src pointer) { - sfpp := src.toBoolPtr() - if *sfpp != nil { - dfpp := dst.toBoolPtr() - if *dfpp == nil { - *dfpp = Bool(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., bool - mfi.merge = func(dst, src pointer) { - if v := *src.toBool(); v { - *dst.toBool() = v - } - } - } - case reflect.String: - switch { - case isSlice: // E.g., []string - mfi.merge = func(dst, src pointer) { - sfsp := src.toStringSlice() - if *sfsp != nil { - dfsp := dst.toStringSlice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []string{} - } - } - } - case isPointer: // E.g., *string - mfi.merge = func(dst, src pointer) { - sfpp := src.toStringPtr() - if *sfpp != nil { - dfpp := dst.toStringPtr() - if *dfpp == nil { - *dfpp = String(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., string - mfi.merge = func(dst, src pointer) { - if v := *src.toString(); v != "" { - *dst.toString() = v - } - } - } - case reflect.Slice: - isProto3 := props.Prop[i].proto3 - switch { - case isPointer: - panic("bad pointer in byte slice case in " + tf.Name()) - case tf.Elem().Kind() != reflect.Uint8: - panic("bad element kind in byte slice case in " + tf.Name()) - case isSlice: // E.g., [][]byte - mfi.merge = func(dst, src pointer) { - sbsp := src.toBytesSlice() - if *sbsp != nil { - dbsp := dst.toBytesSlice() - for _, sb := range *sbsp { - if sb == nil { - *dbsp = append(*dbsp, nil) - } else { - *dbsp = append(*dbsp, append([]byte{}, sb...)) - } - } - if *dbsp == nil { - *dbsp = [][]byte{} - } - } - } - default: // E.g., []byte - mfi.merge = func(dst, src pointer) { - sbp := src.toBytes() - if *sbp != nil { - dbp := dst.toBytes() - if !isProto3 || len(*sbp) > 0 { - *dbp = append([]byte{}, *sbp...) - } - } - } - } - case reflect.Struct: - switch { - case !isPointer: - panic(fmt.Sprintf("message field %s without pointer", tf)) - case isSlice: // E.g., []*pb.T - mi := getMergeInfo(tf) - mfi.merge = func(dst, src pointer) { - sps := src.getPointerSlice() - if sps != nil { - dps := dst.getPointerSlice() - for _, sp := range sps { - var dp pointer - if !sp.isNil() { - dp = valToPointer(reflect.New(tf)) - mi.merge(dp, sp) - } - dps = append(dps, dp) - } - if dps == nil { - dps = []pointer{} - } - dst.setPointerSlice(dps) - } - } - default: // E.g., *pb.T - mi := getMergeInfo(tf) - mfi.merge = func(dst, src pointer) { - sp := src.getPointer() - if !sp.isNil() { - dp := dst.getPointer() - if dp.isNil() { - dp = valToPointer(reflect.New(tf)) - dst.setPointer(dp) - } - mi.merge(dp, sp) - } - } - } - case reflect.Map: - switch { - case isPointer || isSlice: - panic("bad pointer or slice in map case in " + tf.Name()) - default: // E.g., map[K]V - mfi.merge = func(dst, src pointer) { - sm := src.asPointerTo(tf).Elem() - if sm.Len() == 0 { - return - } - dm := dst.asPointerTo(tf).Elem() - if dm.IsNil() { - dm.Set(reflect.MakeMap(tf)) - } - - switch tf.Elem().Kind() { - case reflect.Ptr: // Proto struct (e.g., *T) - for _, key := range sm.MapKeys() { - val := sm.MapIndex(key) - val = reflect.ValueOf(Clone(val.Interface().(Message))) - dm.SetMapIndex(key, val) - } - case reflect.Slice: // E.g. Bytes type (e.g., []byte) - for _, key := range sm.MapKeys() { - val := sm.MapIndex(key) - val = reflect.ValueOf(append([]byte{}, val.Bytes()...)) - dm.SetMapIndex(key, val) - } - default: // Basic type (e.g., string) - for _, key := range sm.MapKeys() { - val := sm.MapIndex(key) - dm.SetMapIndex(key, val) - } - } - } - } - case reflect.Interface: - // Must be oneof field. - switch { - case isPointer || isSlice: - panic("bad pointer or slice in interface case in " + tf.Name()) - default: // E.g., interface{} - // TODO: Make this faster? - mfi.merge = func(dst, src pointer) { - su := src.asPointerTo(tf).Elem() - if !su.IsNil() { - du := dst.asPointerTo(tf).Elem() - typ := su.Elem().Type() - if du.IsNil() || du.Elem().Type() != typ { - du.Set(reflect.New(typ.Elem())) // Initialize interface if empty - } - sv := su.Elem().Elem().Field(0) - if sv.Kind() == reflect.Ptr && sv.IsNil() { - return - } - dv := du.Elem().Elem().Field(0) - if dv.Kind() == reflect.Ptr && dv.IsNil() { - dv.Set(reflect.New(sv.Type().Elem())) // Initialize proto message if empty - } - switch sv.Type().Kind() { - case reflect.Ptr: // Proto struct (e.g., *T) - Merge(dv.Interface().(Message), sv.Interface().(Message)) - case reflect.Slice: // E.g. Bytes type (e.g., []byte) - dv.Set(reflect.ValueOf(append([]byte{}, sv.Bytes()...))) - default: // Basic type (e.g., string) - dv.Set(sv) - } - } - } - } - default: - panic(fmt.Sprintf("merger not found for type:%s", tf)) - } - mi.fields = append(mi.fields, mfi) - } - - mi.unrecognized = invalidField - if f, ok := t.FieldByName("XXX_unrecognized"); ok { - if f.Type != reflect.TypeOf([]byte{}) { - panic("expected XXX_unrecognized to be of type []byte") - } - mi.unrecognized = toField(&f) - } - - atomic.StoreInt32(&mi.initialized, 1) -} diff --git a/vendor/github.com/golang/protobuf/proto/table_unmarshal.go b/vendor/github.com/golang/protobuf/proto/table_unmarshal.go deleted file mode 100644 index 55f0340..0000000 --- a/vendor/github.com/golang/protobuf/proto/table_unmarshal.go +++ /dev/null @@ -1,1967 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2016 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -import ( - "errors" - "fmt" - "io" - "math" - "reflect" - "strconv" - "strings" - "sync" - "sync/atomic" - "unicode/utf8" -) - -// Unmarshal is the entry point from the generated .pb.go files. -// This function is not intended to be used by non-generated code. -// This function is not subject to any compatibility guarantee. -// msg contains a pointer to a protocol buffer struct. -// b is the data to be unmarshaled into the protocol buffer. -// a is a pointer to a place to store cached unmarshal information. -func (a *InternalMessageInfo) Unmarshal(msg Message, b []byte) error { - // Load the unmarshal information for this message type. - // The atomic load ensures memory consistency. - u := atomicLoadUnmarshalInfo(&a.unmarshal) - if u == nil { - // Slow path: find unmarshal info for msg, update a with it. - u = getUnmarshalInfo(reflect.TypeOf(msg).Elem()) - atomicStoreUnmarshalInfo(&a.unmarshal, u) - } - // Then do the unmarshaling. - err := u.unmarshal(toPointer(&msg), b) - return err -} - -type unmarshalInfo struct { - typ reflect.Type // type of the protobuf struct - - // 0 = only typ field is initialized - // 1 = completely initialized - initialized int32 - lock sync.Mutex // prevents double initialization - dense []unmarshalFieldInfo // fields indexed by tag # - sparse map[uint64]unmarshalFieldInfo // fields indexed by tag # - reqFields []string // names of required fields - reqMask uint64 // 1< 0 { - // Read tag and wire type. - // Special case 1 and 2 byte varints. - var x uint64 - if b[0] < 128 { - x = uint64(b[0]) - b = b[1:] - } else if len(b) >= 2 && b[1] < 128 { - x = uint64(b[0]&0x7f) + uint64(b[1])<<7 - b = b[2:] - } else { - var n int - x, n = decodeVarint(b) - if n == 0 { - return io.ErrUnexpectedEOF - } - b = b[n:] - } - tag := x >> 3 - wire := int(x) & 7 - - // Dispatch on the tag to one of the unmarshal* functions below. - var f unmarshalFieldInfo - if tag < uint64(len(u.dense)) { - f = u.dense[tag] - } else { - f = u.sparse[tag] - } - if fn := f.unmarshal; fn != nil { - var err error - b, err = fn(b, m.offset(f.field), wire) - if err == nil { - reqMask |= f.reqMask - continue - } - if r, ok := err.(*RequiredNotSetError); ok { - // Remember this error, but keep parsing. We need to produce - // a full parse even if a required field is missing. - rnse = r - reqMask |= f.reqMask - continue - } - if err != errInternalBadWireType { - return err - } - // Fragments with bad wire type are treated as unknown fields. - } - - // Unknown tag. - if !u.unrecognized.IsValid() { - // Don't keep unrecognized data; just skip it. - var err error - b, err = skipField(b, wire) - if err != nil { - return err - } - continue - } - // Keep unrecognized data around. - // maybe in extensions, maybe in the unrecognized field. - z := m.offset(u.unrecognized).toBytes() - var emap map[int32]Extension - var e Extension - for _, r := range u.extensionRanges { - if uint64(r.Start) <= tag && tag <= uint64(r.End) { - if u.extensions.IsValid() { - mp := m.offset(u.extensions).toExtensions() - emap = mp.extensionsWrite() - e = emap[int32(tag)] - z = &e.enc - break - } - if u.oldExtensions.IsValid() { - p := m.offset(u.oldExtensions).toOldExtensions() - emap = *p - if emap == nil { - emap = map[int32]Extension{} - *p = emap - } - e = emap[int32(tag)] - z = &e.enc - break - } - panic("no extensions field available") - } - } - - // Use wire type to skip data. - var err error - b0 := b - b, err = skipField(b, wire) - if err != nil { - return err - } - *z = encodeVarint(*z, tag<<3|uint64(wire)) - *z = append(*z, b0[:len(b0)-len(b)]...) - - if emap != nil { - emap[int32(tag)] = e - } - } - if rnse != nil { - // A required field of a submessage/group is missing. Return that error. - return rnse - } - if reqMask != u.reqMask { - // A required field of this message is missing. - for _, n := range u.reqFields { - if reqMask&1 == 0 { - return &RequiredNotSetError{n} - } - reqMask >>= 1 - } - } - return nil -} - -// computeUnmarshalInfo fills in u with information for use -// in unmarshaling protocol buffers of type u.typ. -func (u *unmarshalInfo) computeUnmarshalInfo() { - u.lock.Lock() - defer u.lock.Unlock() - if u.initialized != 0 { - return - } - t := u.typ - n := t.NumField() - - // Set up the "not found" value for the unrecognized byte buffer. - // This is the default for proto3. - u.unrecognized = invalidField - u.extensions = invalidField - u.oldExtensions = invalidField - - // List of the generated type and offset for each oneof field. - type oneofField struct { - ityp reflect.Type // interface type of oneof field - field field // offset in containing message - } - var oneofFields []oneofField - - for i := 0; i < n; i++ { - f := t.Field(i) - if f.Name == "XXX_unrecognized" { - // The byte slice used to hold unrecognized input is special. - if f.Type != reflect.TypeOf(([]byte)(nil)) { - panic("bad type for XXX_unrecognized field: " + f.Type.Name()) - } - u.unrecognized = toField(&f) - continue - } - if f.Name == "XXX_InternalExtensions" { - // Ditto here. - if f.Type != reflect.TypeOf(XXX_InternalExtensions{}) { - panic("bad type for XXX_InternalExtensions field: " + f.Type.Name()) - } - u.extensions = toField(&f) - if f.Tag.Get("protobuf_messageset") == "1" { - u.isMessageSet = true - } - continue - } - if f.Name == "XXX_extensions" { - // An older form of the extensions field. - if f.Type != reflect.TypeOf((map[int32]Extension)(nil)) { - panic("bad type for XXX_extensions field: " + f.Type.Name()) - } - u.oldExtensions = toField(&f) - continue - } - if f.Name == "XXX_NoUnkeyedLiteral" || f.Name == "XXX_sizecache" { - continue - } - - oneof := f.Tag.Get("protobuf_oneof") - if oneof != "" { - oneofFields = append(oneofFields, oneofField{f.Type, toField(&f)}) - // The rest of oneof processing happens below. - continue - } - - tags := f.Tag.Get("protobuf") - tagArray := strings.Split(tags, ",") - if len(tagArray) < 2 { - panic("protobuf tag not enough fields in " + t.Name() + "." + f.Name + ": " + tags) - } - tag, err := strconv.Atoi(tagArray[1]) - if err != nil { - panic("protobuf tag field not an integer: " + tagArray[1]) - } - - name := "" - for _, tag := range tagArray[3:] { - if strings.HasPrefix(tag, "name=") { - name = tag[5:] - } - } - - // Extract unmarshaling function from the field (its type and tags). - unmarshal := fieldUnmarshaler(&f) - - // Required field? - var reqMask uint64 - if tagArray[2] == "req" { - bit := len(u.reqFields) - u.reqFields = append(u.reqFields, name) - reqMask = uint64(1) << uint(bit) - // TODO: if we have more than 64 required fields, we end up - // not verifying that all required fields are present. - // Fix this, perhaps using a count of required fields? - } - - // Store the info in the correct slot in the message. - u.setTag(tag, toField(&f), unmarshal, reqMask) - } - - // Find any types associated with oneof fields. - // TODO: XXX_OneofFuncs returns more info than we need. Get rid of some of it? - fn := reflect.Zero(reflect.PtrTo(t)).MethodByName("XXX_OneofFuncs") - if fn.IsValid() { - res := fn.Call(nil)[3] // last return value from XXX_OneofFuncs: []interface{} - for i := res.Len() - 1; i >= 0; i-- { - v := res.Index(i) // interface{} - tptr := reflect.ValueOf(v.Interface()).Type() // *Msg_X - typ := tptr.Elem() // Msg_X - - f := typ.Field(0) // oneof implementers have one field - baseUnmarshal := fieldUnmarshaler(&f) - tagstr := strings.Split(f.Tag.Get("protobuf"), ",")[1] - tag, err := strconv.Atoi(tagstr) - if err != nil { - panic("protobuf tag field not an integer: " + tagstr) - } - - // Find the oneof field that this struct implements. - // Might take O(n^2) to process all of the oneofs, but who cares. - for _, of := range oneofFields { - if tptr.Implements(of.ityp) { - // We have found the corresponding interface for this struct. - // That lets us know where this struct should be stored - // when we encounter it during unmarshaling. - unmarshal := makeUnmarshalOneof(typ, of.ityp, baseUnmarshal) - u.setTag(tag, of.field, unmarshal, 0) - } - } - } - } - - // Get extension ranges, if any. - fn = reflect.Zero(reflect.PtrTo(t)).MethodByName("ExtensionRangeArray") - if fn.IsValid() { - if !u.extensions.IsValid() && !u.oldExtensions.IsValid() { - panic("a message with extensions, but no extensions field in " + t.Name()) - } - u.extensionRanges = fn.Call(nil)[0].Interface().([]ExtensionRange) - } - - // Explicitly disallow tag 0. This will ensure we flag an error - // when decoding a buffer of all zeros. Without this code, we - // would decode and skip an all-zero buffer of even length. - // [0 0] is [tag=0/wiretype=varint varint-encoded-0]. - u.setTag(0, zeroField, func(b []byte, f pointer, w int) ([]byte, error) { - return nil, fmt.Errorf("proto: %s: illegal tag 0 (wire type %d)", t, w) - }, 0) - - // Set mask for required field check. - u.reqMask = uint64(1)<= 0 && (tag < 16 || tag < 2*n) { // TODO: what are the right numbers here? - for len(u.dense) <= tag { - u.dense = append(u.dense, unmarshalFieldInfo{}) - } - u.dense[tag] = i - return - } - if u.sparse == nil { - u.sparse = map[uint64]unmarshalFieldInfo{} - } - u.sparse[uint64(tag)] = i -} - -// fieldUnmarshaler returns an unmarshaler for the given field. -func fieldUnmarshaler(f *reflect.StructField) unmarshaler { - if f.Type.Kind() == reflect.Map { - return makeUnmarshalMap(f) - } - return typeUnmarshaler(f.Type, f.Tag.Get("protobuf")) -} - -// typeUnmarshaler returns an unmarshaler for the given field type / field tag pair. -func typeUnmarshaler(t reflect.Type, tags string) unmarshaler { - tagArray := strings.Split(tags, ",") - encoding := tagArray[0] - name := "unknown" - for _, tag := range tagArray[3:] { - if strings.HasPrefix(tag, "name=") { - name = tag[5:] - } - } - - // Figure out packaging (pointer, slice, or both) - slice := false - pointer := false - if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 { - slice = true - t = t.Elem() - } - if t.Kind() == reflect.Ptr { - pointer = true - t = t.Elem() - } - - // We'll never have both pointer and slice for basic types. - if pointer && slice && t.Kind() != reflect.Struct { - panic("both pointer and slice for basic type in " + t.Name()) - } - - switch t.Kind() { - case reflect.Bool: - if pointer { - return unmarshalBoolPtr - } - if slice { - return unmarshalBoolSlice - } - return unmarshalBoolValue - case reflect.Int32: - switch encoding { - case "fixed32": - if pointer { - return unmarshalFixedS32Ptr - } - if slice { - return unmarshalFixedS32Slice - } - return unmarshalFixedS32Value - case "varint": - // this could be int32 or enum - if pointer { - return unmarshalInt32Ptr - } - if slice { - return unmarshalInt32Slice - } - return unmarshalInt32Value - case "zigzag32": - if pointer { - return unmarshalSint32Ptr - } - if slice { - return unmarshalSint32Slice - } - return unmarshalSint32Value - } - case reflect.Int64: - switch encoding { - case "fixed64": - if pointer { - return unmarshalFixedS64Ptr - } - if slice { - return unmarshalFixedS64Slice - } - return unmarshalFixedS64Value - case "varint": - if pointer { - return unmarshalInt64Ptr - } - if slice { - return unmarshalInt64Slice - } - return unmarshalInt64Value - case "zigzag64": - if pointer { - return unmarshalSint64Ptr - } - if slice { - return unmarshalSint64Slice - } - return unmarshalSint64Value - } - case reflect.Uint32: - switch encoding { - case "fixed32": - if pointer { - return unmarshalFixed32Ptr - } - if slice { - return unmarshalFixed32Slice - } - return unmarshalFixed32Value - case "varint": - if pointer { - return unmarshalUint32Ptr - } - if slice { - return unmarshalUint32Slice - } - return unmarshalUint32Value - } - case reflect.Uint64: - switch encoding { - case "fixed64": - if pointer { - return unmarshalFixed64Ptr - } - if slice { - return unmarshalFixed64Slice - } - return unmarshalFixed64Value - case "varint": - if pointer { - return unmarshalUint64Ptr - } - if slice { - return unmarshalUint64Slice - } - return unmarshalUint64Value - } - case reflect.Float32: - if pointer { - return unmarshalFloat32Ptr - } - if slice { - return unmarshalFloat32Slice - } - return unmarshalFloat32Value - case reflect.Float64: - if pointer { - return unmarshalFloat64Ptr - } - if slice { - return unmarshalFloat64Slice - } - return unmarshalFloat64Value - case reflect.Map: - panic("map type in typeUnmarshaler in " + t.Name()) - case reflect.Slice: - if pointer { - panic("bad pointer in slice case in " + t.Name()) - } - if slice { - return unmarshalBytesSlice - } - return unmarshalBytesValue - case reflect.String: - if pointer { - return unmarshalStringPtr - } - if slice { - return unmarshalStringSlice - } - return unmarshalStringValue - case reflect.Struct: - // message or group field - if !pointer { - panic(fmt.Sprintf("message/group field %s:%s without pointer", t, encoding)) - } - switch encoding { - case "bytes": - if slice { - return makeUnmarshalMessageSlicePtr(getUnmarshalInfo(t), name) - } - return makeUnmarshalMessagePtr(getUnmarshalInfo(t), name) - case "group": - if slice { - return makeUnmarshalGroupSlicePtr(getUnmarshalInfo(t), name) - } - return makeUnmarshalGroupPtr(getUnmarshalInfo(t), name) - } - } - panic(fmt.Sprintf("unmarshaler not found type:%s encoding:%s", t, encoding)) -} - -// Below are all the unmarshalers for individual fields of various types. - -func unmarshalInt64Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x) - *f.toInt64() = v - return b, nil -} - -func unmarshalInt64Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x) - *f.toInt64Ptr() = &v - return b, nil -} - -func unmarshalInt64Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x) - s := f.toInt64Slice() - *s = append(*s, v) - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x) - s := f.toInt64Slice() - *s = append(*s, v) - return b, nil -} - -func unmarshalSint64Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x>>1) ^ int64(x)<<63>>63 - *f.toInt64() = v - return b, nil -} - -func unmarshalSint64Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x>>1) ^ int64(x)<<63>>63 - *f.toInt64Ptr() = &v - return b, nil -} - -func unmarshalSint64Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x>>1) ^ int64(x)<<63>>63 - s := f.toInt64Slice() - *s = append(*s, v) - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x>>1) ^ int64(x)<<63>>63 - s := f.toInt64Slice() - *s = append(*s, v) - return b, nil -} - -func unmarshalUint64Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint64(x) - *f.toUint64() = v - return b, nil -} - -func unmarshalUint64Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint64(x) - *f.toUint64Ptr() = &v - return b, nil -} - -func unmarshalUint64Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint64(x) - s := f.toUint64Slice() - *s = append(*s, v) - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint64(x) - s := f.toUint64Slice() - *s = append(*s, v) - return b, nil -} - -func unmarshalInt32Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x) - *f.toInt32() = v - return b, nil -} - -func unmarshalInt32Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x) - f.setInt32Ptr(v) - return b, nil -} - -func unmarshalInt32Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x) - f.appendInt32Slice(v) - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x) - f.appendInt32Slice(v) - return b, nil -} - -func unmarshalSint32Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x>>1) ^ int32(x)<<31>>31 - *f.toInt32() = v - return b, nil -} - -func unmarshalSint32Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x>>1) ^ int32(x)<<31>>31 - f.setInt32Ptr(v) - return b, nil -} - -func unmarshalSint32Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x>>1) ^ int32(x)<<31>>31 - f.appendInt32Slice(v) - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x>>1) ^ int32(x)<<31>>31 - f.appendInt32Slice(v) - return b, nil -} - -func unmarshalUint32Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint32(x) - *f.toUint32() = v - return b, nil -} - -func unmarshalUint32Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint32(x) - *f.toUint32Ptr() = &v - return b, nil -} - -func unmarshalUint32Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint32(x) - s := f.toUint32Slice() - *s = append(*s, v) - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint32(x) - s := f.toUint32Slice() - *s = append(*s, v) - return b, nil -} - -func unmarshalFixed64Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 - *f.toUint64() = v - return b[8:], nil -} - -func unmarshalFixed64Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 - *f.toUint64Ptr() = &v - return b[8:], nil -} - -func unmarshalFixed64Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 - s := f.toUint64Slice() - *s = append(*s, v) - b = b[8:] - } - return res, nil - } - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 - s := f.toUint64Slice() - *s = append(*s, v) - return b[8:], nil -} - -func unmarshalFixedS64Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 - *f.toInt64() = v - return b[8:], nil -} - -func unmarshalFixedS64Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 - *f.toInt64Ptr() = &v - return b[8:], nil -} - -func unmarshalFixedS64Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 - s := f.toInt64Slice() - *s = append(*s, v) - b = b[8:] - } - return res, nil - } - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 - s := f.toInt64Slice() - *s = append(*s, v) - return b[8:], nil -} - -func unmarshalFixed32Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 - *f.toUint32() = v - return b[4:], nil -} - -func unmarshalFixed32Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 - *f.toUint32Ptr() = &v - return b[4:], nil -} - -func unmarshalFixed32Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 - s := f.toUint32Slice() - *s = append(*s, v) - b = b[4:] - } - return res, nil - } - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 - s := f.toUint32Slice() - *s = append(*s, v) - return b[4:], nil -} - -func unmarshalFixedS32Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 - *f.toInt32() = v - return b[4:], nil -} - -func unmarshalFixedS32Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 - f.setInt32Ptr(v) - return b[4:], nil -} - -func unmarshalFixedS32Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 - f.appendInt32Slice(v) - b = b[4:] - } - return res, nil - } - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 - f.appendInt32Slice(v) - return b[4:], nil -} - -func unmarshalBoolValue(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - // Note: any length varint is allowed, even though any sane - // encoder will use one byte. - // See https://github.com/golang/protobuf/issues/76 - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - // TODO: check if x>1? Tests seem to indicate no. - v := x != 0 - *f.toBool() = v - return b[n:], nil -} - -func unmarshalBoolPtr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - v := x != 0 - *f.toBoolPtr() = &v - return b[n:], nil -} - -func unmarshalBoolSlice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - v := x != 0 - s := f.toBoolSlice() - *s = append(*s, v) - b = b[n:] - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - v := x != 0 - s := f.toBoolSlice() - *s = append(*s, v) - return b[n:], nil -} - -func unmarshalFloat64Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) - *f.toFloat64() = v - return b[8:], nil -} - -func unmarshalFloat64Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) - *f.toFloat64Ptr() = &v - return b[8:], nil -} - -func unmarshalFloat64Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) - s := f.toFloat64Slice() - *s = append(*s, v) - b = b[8:] - } - return res, nil - } - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) - s := f.toFloat64Slice() - *s = append(*s, v) - return b[8:], nil -} - -func unmarshalFloat32Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) - *f.toFloat32() = v - return b[4:], nil -} - -func unmarshalFloat32Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) - *f.toFloat32Ptr() = &v - return b[4:], nil -} - -func unmarshalFloat32Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) - s := f.toFloat32Slice() - *s = append(*s, v) - b = b[4:] - } - return res, nil - } - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) - s := f.toFloat32Slice() - *s = append(*s, v) - return b[4:], nil -} - -func unmarshalStringValue(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := string(b[:x]) - if !utf8.ValidString(v) { - return nil, errInvalidUTF8 - } - *f.toString() = v - return b[x:], nil -} - -func unmarshalStringPtr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := string(b[:x]) - if !utf8.ValidString(v) { - return nil, errInvalidUTF8 - } - *f.toStringPtr() = &v - return b[x:], nil -} - -func unmarshalStringSlice(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := string(b[:x]) - if !utf8.ValidString(v) { - return nil, errInvalidUTF8 - } - s := f.toStringSlice() - *s = append(*s, v) - return b[x:], nil -} - -var emptyBuf [0]byte - -func unmarshalBytesValue(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - // The use of append here is a trick which avoids the zeroing - // that would be required if we used a make/copy pair. - // We append to emptyBuf instead of nil because we want - // a non-nil result even when the length is 0. - v := append(emptyBuf[:], b[:x]...) - *f.toBytes() = v - return b[x:], nil -} - -func unmarshalBytesSlice(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := append(emptyBuf[:], b[:x]...) - s := f.toBytesSlice() - *s = append(*s, v) - return b[x:], nil -} - -func makeUnmarshalMessagePtr(sub *unmarshalInfo, name string) unmarshaler { - return func(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - // First read the message field to see if something is there. - // The semantics of multiple submessages are weird. Instead of - // the last one winning (as it is for all other fields), multiple - // submessages are merged. - v := f.getPointer() - if v.isNil() { - v = valToPointer(reflect.New(sub.typ)) - f.setPointer(v) - } - err := sub.unmarshal(v, b[:x]) - if err != nil { - if r, ok := err.(*RequiredNotSetError); ok { - r.field = name + "." + r.field - } else { - return nil, err - } - } - return b[x:], err - } -} - -func makeUnmarshalMessageSlicePtr(sub *unmarshalInfo, name string) unmarshaler { - return func(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := valToPointer(reflect.New(sub.typ)) - err := sub.unmarshal(v, b[:x]) - if err != nil { - if r, ok := err.(*RequiredNotSetError); ok { - r.field = name + "." + r.field - } else { - return nil, err - } - } - f.appendPointer(v) - return b[x:], err - } -} - -func makeUnmarshalGroupPtr(sub *unmarshalInfo, name string) unmarshaler { - return func(b []byte, f pointer, w int) ([]byte, error) { - if w != WireStartGroup { - return b, errInternalBadWireType - } - x, y := findEndGroup(b) - if x < 0 { - return nil, io.ErrUnexpectedEOF - } - v := f.getPointer() - if v.isNil() { - v = valToPointer(reflect.New(sub.typ)) - f.setPointer(v) - } - err := sub.unmarshal(v, b[:x]) - if err != nil { - if r, ok := err.(*RequiredNotSetError); ok { - r.field = name + "." + r.field - } else { - return nil, err - } - } - return b[y:], err - } -} - -func makeUnmarshalGroupSlicePtr(sub *unmarshalInfo, name string) unmarshaler { - return func(b []byte, f pointer, w int) ([]byte, error) { - if w != WireStartGroup { - return b, errInternalBadWireType - } - x, y := findEndGroup(b) - if x < 0 { - return nil, io.ErrUnexpectedEOF - } - v := valToPointer(reflect.New(sub.typ)) - err := sub.unmarshal(v, b[:x]) - if err != nil { - if r, ok := err.(*RequiredNotSetError); ok { - r.field = name + "." + r.field - } else { - return nil, err - } - } - f.appendPointer(v) - return b[y:], err - } -} - -func makeUnmarshalMap(f *reflect.StructField) unmarshaler { - t := f.Type - kt := t.Key() - vt := t.Elem() - unmarshalKey := typeUnmarshaler(kt, f.Tag.Get("protobuf_key")) - unmarshalVal := typeUnmarshaler(vt, f.Tag.Get("protobuf_val")) - return func(b []byte, f pointer, w int) ([]byte, error) { - // The map entry is a submessage. Figure out how big it is. - if w != WireBytes { - return nil, fmt.Errorf("proto: bad wiretype for map field: got %d want %d", w, WireBytes) - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - r := b[x:] // unused data to return - b = b[:x] // data for map entry - - // Note: we could use #keys * #values ~= 200 functions - // to do map decoding without reflection. Probably not worth it. - // Maps will be somewhat slow. Oh well. - - // Read key and value from data. - k := reflect.New(kt) - v := reflect.New(vt) - for len(b) > 0 { - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - wire := int(x) & 7 - b = b[n:] - - var err error - switch x >> 3 { - case 1: - b, err = unmarshalKey(b, valToPointer(k), wire) - case 2: - b, err = unmarshalVal(b, valToPointer(v), wire) - default: - err = errInternalBadWireType // skip unknown tag - } - - if err == nil { - continue - } - if err != errInternalBadWireType { - return nil, err - } - - // Skip past unknown fields. - b, err = skipField(b, wire) - if err != nil { - return nil, err - } - } - - // Get map, allocate if needed. - m := f.asPointerTo(t).Elem() // an addressable map[K]T - if m.IsNil() { - m.Set(reflect.MakeMap(t)) - } - - // Insert into map. - m.SetMapIndex(k.Elem(), v.Elem()) - - return r, nil - } -} - -// makeUnmarshalOneof makes an unmarshaler for oneof fields. -// for: -// message Msg { -// oneof F { -// int64 X = 1; -// float64 Y = 2; -// } -// } -// typ is the type of the concrete entry for a oneof case (e.g. Msg_X). -// ityp is the interface type of the oneof field (e.g. isMsg_F). -// unmarshal is the unmarshaler for the base type of the oneof case (e.g. int64). -// Note that this function will be called once for each case in the oneof. -func makeUnmarshalOneof(typ, ityp reflect.Type, unmarshal unmarshaler) unmarshaler { - sf := typ.Field(0) - field0 := toField(&sf) - return func(b []byte, f pointer, w int) ([]byte, error) { - // Allocate holder for value. - v := reflect.New(typ) - - // Unmarshal data into holder. - // We unmarshal into the first field of the holder object. - var err error - b, err = unmarshal(b, valToPointer(v).offset(field0), w) - if err != nil { - return nil, err - } - - // Write pointer to holder into target field. - f.asPointerTo(ityp).Elem().Set(v) - - return b, nil - } -} - -// Error used by decode internally. -var errInternalBadWireType = errors.New("proto: internal error: bad wiretype") - -// skipField skips past a field of type wire and returns the remaining bytes. -func skipField(b []byte, wire int) ([]byte, error) { - switch wire { - case WireVarint: - _, k := decodeVarint(b) - if k == 0 { - return b, io.ErrUnexpectedEOF - } - b = b[k:] - case WireFixed32: - if len(b) < 4 { - return b, io.ErrUnexpectedEOF - } - b = b[4:] - case WireFixed64: - if len(b) < 8 { - return b, io.ErrUnexpectedEOF - } - b = b[8:] - case WireBytes: - m, k := decodeVarint(b) - if k == 0 || uint64(len(b)-k) < m { - return b, io.ErrUnexpectedEOF - } - b = b[uint64(k)+m:] - case WireStartGroup: - _, i := findEndGroup(b) - if i == -1 { - return b, io.ErrUnexpectedEOF - } - b = b[i:] - default: - return b, fmt.Errorf("proto: can't skip unknown wire type %d", wire) - } - return b, nil -} - -// findEndGroup finds the index of the next EndGroup tag. -// Groups may be nested, so the "next" EndGroup tag is the first -// unpaired EndGroup. -// findEndGroup returns the indexes of the start and end of the EndGroup tag. -// Returns (-1,-1) if it can't find one. -func findEndGroup(b []byte) (int, int) { - depth := 1 - i := 0 - for { - x, n := decodeVarint(b[i:]) - if n == 0 { - return -1, -1 - } - j := i - i += n - switch x & 7 { - case WireVarint: - _, k := decodeVarint(b[i:]) - if k == 0 { - return -1, -1 - } - i += k - case WireFixed32: - if len(b)-4 < i { - return -1, -1 - } - i += 4 - case WireFixed64: - if len(b)-8 < i { - return -1, -1 - } - i += 8 - case WireBytes: - m, k := decodeVarint(b[i:]) - if k == 0 { - return -1, -1 - } - i += k - if uint64(len(b)-i) < m { - return -1, -1 - } - i += int(m) - case WireStartGroup: - depth++ - case WireEndGroup: - depth-- - if depth == 0 { - return j, i - } - default: - return -1, -1 - } - } -} - -// encodeVarint appends a varint-encoded integer to b and returns the result. -func encodeVarint(b []byte, x uint64) []byte { - for x >= 1<<7 { - b = append(b, byte(x&0x7f|0x80)) - x >>= 7 - } - return append(b, byte(x)) -} - -// decodeVarint reads a varint-encoded integer from b. -// Returns the decoded integer and the number of bytes read. -// If there is an error, it returns 0,0. -func decodeVarint(b []byte) (uint64, int) { - var x, y uint64 - if len(b) <= 0 { - goto bad - } - x = uint64(b[0]) - if x < 0x80 { - return x, 1 - } - x -= 0x80 - - if len(b) <= 1 { - goto bad - } - y = uint64(b[1]) - x += y << 7 - if y < 0x80 { - return x, 2 - } - x -= 0x80 << 7 - - if len(b) <= 2 { - goto bad - } - y = uint64(b[2]) - x += y << 14 - if y < 0x80 { - return x, 3 - } - x -= 0x80 << 14 - - if len(b) <= 3 { - goto bad - } - y = uint64(b[3]) - x += y << 21 - if y < 0x80 { - return x, 4 - } - x -= 0x80 << 21 - - if len(b) <= 4 { - goto bad - } - y = uint64(b[4]) - x += y << 28 - if y < 0x80 { - return x, 5 - } - x -= 0x80 << 28 - - if len(b) <= 5 { - goto bad - } - y = uint64(b[5]) - x += y << 35 - if y < 0x80 { - return x, 6 - } - x -= 0x80 << 35 - - if len(b) <= 6 { - goto bad - } - y = uint64(b[6]) - x += y << 42 - if y < 0x80 { - return x, 7 - } - x -= 0x80 << 42 - - if len(b) <= 7 { - goto bad - } - y = uint64(b[7]) - x += y << 49 - if y < 0x80 { - return x, 8 - } - x -= 0x80 << 49 - - if len(b) <= 8 { - goto bad - } - y = uint64(b[8]) - x += y << 56 - if y < 0x80 { - return x, 9 - } - x -= 0x80 << 56 - - if len(b) <= 9 { - goto bad - } - y = uint64(b[9]) - x += y << 63 - if y < 2 { - return x, 10 - } - -bad: - return 0, 0 -} diff --git a/vendor/github.com/golang/protobuf/proto/text.go b/vendor/github.com/golang/protobuf/proto/text.go deleted file mode 100644 index 2205fda..0000000 --- a/vendor/github.com/golang/protobuf/proto/text.go +++ /dev/null @@ -1,843 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -// Functions for writing the text protocol buffer format. - -import ( - "bufio" - "bytes" - "encoding" - "errors" - "fmt" - "io" - "log" - "math" - "reflect" - "sort" - "strings" -) - -var ( - newline = []byte("\n") - spaces = []byte(" ") - endBraceNewline = []byte("}\n") - backslashN = []byte{'\\', 'n'} - backslashR = []byte{'\\', 'r'} - backslashT = []byte{'\\', 't'} - backslashDQ = []byte{'\\', '"'} - backslashBS = []byte{'\\', '\\'} - posInf = []byte("inf") - negInf = []byte("-inf") - nan = []byte("nan") -) - -type writer interface { - io.Writer - WriteByte(byte) error -} - -// textWriter is an io.Writer that tracks its indentation level. -type textWriter struct { - ind int - complete bool // if the current position is a complete line - compact bool // whether to write out as a one-liner - w writer -} - -func (w *textWriter) WriteString(s string) (n int, err error) { - if !strings.Contains(s, "\n") { - if !w.compact && w.complete { - w.writeIndent() - } - w.complete = false - return io.WriteString(w.w, s) - } - // WriteString is typically called without newlines, so this - // codepath and its copy are rare. We copy to avoid - // duplicating all of Write's logic here. - return w.Write([]byte(s)) -} - -func (w *textWriter) Write(p []byte) (n int, err error) { - newlines := bytes.Count(p, newline) - if newlines == 0 { - if !w.compact && w.complete { - w.writeIndent() - } - n, err = w.w.Write(p) - w.complete = false - return n, err - } - - frags := bytes.SplitN(p, newline, newlines+1) - if w.compact { - for i, frag := range frags { - if i > 0 { - if err := w.w.WriteByte(' '); err != nil { - return n, err - } - n++ - } - nn, err := w.w.Write(frag) - n += nn - if err != nil { - return n, err - } - } - return n, nil - } - - for i, frag := range frags { - if w.complete { - w.writeIndent() - } - nn, err := w.w.Write(frag) - n += nn - if err != nil { - return n, err - } - if i+1 < len(frags) { - if err := w.w.WriteByte('\n'); err != nil { - return n, err - } - n++ - } - } - w.complete = len(frags[len(frags)-1]) == 0 - return n, nil -} - -func (w *textWriter) WriteByte(c byte) error { - if w.compact && c == '\n' { - c = ' ' - } - if !w.compact && w.complete { - w.writeIndent() - } - err := w.w.WriteByte(c) - w.complete = c == '\n' - return err -} - -func (w *textWriter) indent() { w.ind++ } - -func (w *textWriter) unindent() { - if w.ind == 0 { - log.Print("proto: textWriter unindented too far") - return - } - w.ind-- -} - -func writeName(w *textWriter, props *Properties) error { - if _, err := w.WriteString(props.OrigName); err != nil { - return err - } - if props.Wire != "group" { - return w.WriteByte(':') - } - return nil -} - -func requiresQuotes(u string) bool { - // When type URL contains any characters except [0-9A-Za-z./\-]*, it must be quoted. - for _, ch := range u { - switch { - case ch == '.' || ch == '/' || ch == '_': - continue - case '0' <= ch && ch <= '9': - continue - case 'A' <= ch && ch <= 'Z': - continue - case 'a' <= ch && ch <= 'z': - continue - default: - return true - } - } - return false -} - -// isAny reports whether sv is a google.protobuf.Any message -func isAny(sv reflect.Value) bool { - type wkt interface { - XXX_WellKnownType() string - } - t, ok := sv.Addr().Interface().(wkt) - return ok && t.XXX_WellKnownType() == "Any" -} - -// writeProto3Any writes an expanded google.protobuf.Any message. -// -// It returns (false, nil) if sv value can't be unmarshaled (e.g. because -// required messages are not linked in). -// -// It returns (true, error) when sv was written in expanded format or an error -// was encountered. -func (tm *TextMarshaler) writeProto3Any(w *textWriter, sv reflect.Value) (bool, error) { - turl := sv.FieldByName("TypeUrl") - val := sv.FieldByName("Value") - if !turl.IsValid() || !val.IsValid() { - return true, errors.New("proto: invalid google.protobuf.Any message") - } - - b, ok := val.Interface().([]byte) - if !ok { - return true, errors.New("proto: invalid google.protobuf.Any message") - } - - parts := strings.Split(turl.String(), "/") - mt := MessageType(parts[len(parts)-1]) - if mt == nil { - return false, nil - } - m := reflect.New(mt.Elem()) - if err := Unmarshal(b, m.Interface().(Message)); err != nil { - return false, nil - } - w.Write([]byte("[")) - u := turl.String() - if requiresQuotes(u) { - writeString(w, u) - } else { - w.Write([]byte(u)) - } - if w.compact { - w.Write([]byte("]:<")) - } else { - w.Write([]byte("]: <\n")) - w.ind++ - } - if err := tm.writeStruct(w, m.Elem()); err != nil { - return true, err - } - if w.compact { - w.Write([]byte("> ")) - } else { - w.ind-- - w.Write([]byte(">\n")) - } - return true, nil -} - -func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error { - if tm.ExpandAny && isAny(sv) { - if canExpand, err := tm.writeProto3Any(w, sv); canExpand { - return err - } - } - st := sv.Type() - sprops := GetProperties(st) - for i := 0; i < sv.NumField(); i++ { - fv := sv.Field(i) - props := sprops.Prop[i] - name := st.Field(i).Name - - if name == "XXX_NoUnkeyedLiteral" { - continue - } - - if strings.HasPrefix(name, "XXX_") { - // There are two XXX_ fields: - // XXX_unrecognized []byte - // XXX_extensions map[int32]proto.Extension - // The first is handled here; - // the second is handled at the bottom of this function. - if name == "XXX_unrecognized" && !fv.IsNil() { - if err := writeUnknownStruct(w, fv.Interface().([]byte)); err != nil { - return err - } - } - continue - } - if fv.Kind() == reflect.Ptr && fv.IsNil() { - // Field not filled in. This could be an optional field or - // a required field that wasn't filled in. Either way, there - // isn't anything we can show for it. - continue - } - if fv.Kind() == reflect.Slice && fv.IsNil() { - // Repeated field that is empty, or a bytes field that is unused. - continue - } - - if props.Repeated && fv.Kind() == reflect.Slice { - // Repeated field. - for j := 0; j < fv.Len(); j++ { - if err := writeName(w, props); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte(' '); err != nil { - return err - } - } - v := fv.Index(j) - if v.Kind() == reflect.Ptr && v.IsNil() { - // A nil message in a repeated field is not valid, - // but we can handle that more gracefully than panicking. - if _, err := w.Write([]byte("\n")); err != nil { - return err - } - continue - } - if err := tm.writeAny(w, v, props); err != nil { - return err - } - if err := w.WriteByte('\n'); err != nil { - return err - } - } - continue - } - if fv.Kind() == reflect.Map { - // Map fields are rendered as a repeated struct with key/value fields. - keys := fv.MapKeys() - sort.Sort(mapKeys(keys)) - for _, key := range keys { - val := fv.MapIndex(key) - if err := writeName(w, props); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte(' '); err != nil { - return err - } - } - // open struct - if err := w.WriteByte('<'); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte('\n'); err != nil { - return err - } - } - w.indent() - // key - if _, err := w.WriteString("key:"); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte(' '); err != nil { - return err - } - } - if err := tm.writeAny(w, key, props.mkeyprop); err != nil { - return err - } - if err := w.WriteByte('\n'); err != nil { - return err - } - // nil values aren't legal, but we can avoid panicking because of them. - if val.Kind() != reflect.Ptr || !val.IsNil() { - // value - if _, err := w.WriteString("value:"); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte(' '); err != nil { - return err - } - } - if err := tm.writeAny(w, val, props.mvalprop); err != nil { - return err - } - if err := w.WriteByte('\n'); err != nil { - return err - } - } - // close struct - w.unindent() - if err := w.WriteByte('>'); err != nil { - return err - } - if err := w.WriteByte('\n'); err != nil { - return err - } - } - continue - } - if props.proto3 && fv.Kind() == reflect.Slice && fv.Len() == 0 { - // empty bytes field - continue - } - if fv.Kind() != reflect.Ptr && fv.Kind() != reflect.Slice { - // proto3 non-repeated scalar field; skip if zero value - if isProto3Zero(fv) { - continue - } - } - - if fv.Kind() == reflect.Interface { - // Check if it is a oneof. - if st.Field(i).Tag.Get("protobuf_oneof") != "" { - // fv is nil, or holds a pointer to generated struct. - // That generated struct has exactly one field, - // which has a protobuf struct tag. - if fv.IsNil() { - continue - } - inner := fv.Elem().Elem() // interface -> *T -> T - tag := inner.Type().Field(0).Tag.Get("protobuf") - props = new(Properties) // Overwrite the outer props var, but not its pointee. - props.Parse(tag) - // Write the value in the oneof, not the oneof itself. - fv = inner.Field(0) - - // Special case to cope with malformed messages gracefully: - // If the value in the oneof is a nil pointer, don't panic - // in writeAny. - if fv.Kind() == reflect.Ptr && fv.IsNil() { - // Use errors.New so writeAny won't render quotes. - msg := errors.New("/* nil */") - fv = reflect.ValueOf(&msg).Elem() - } - } - } - - if err := writeName(w, props); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte(' '); err != nil { - return err - } - } - - // Enums have a String method, so writeAny will work fine. - if err := tm.writeAny(w, fv, props); err != nil { - return err - } - - if err := w.WriteByte('\n'); err != nil { - return err - } - } - - // Extensions (the XXX_extensions field). - pv := sv.Addr() - if _, err := extendable(pv.Interface()); err == nil { - if err := tm.writeExtensions(w, pv); err != nil { - return err - } - } - - return nil -} - -// writeAny writes an arbitrary field. -func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Properties) error { - v = reflect.Indirect(v) - - // Floats have special cases. - if v.Kind() == reflect.Float32 || v.Kind() == reflect.Float64 { - x := v.Float() - var b []byte - switch { - case math.IsInf(x, 1): - b = posInf - case math.IsInf(x, -1): - b = negInf - case math.IsNaN(x): - b = nan - } - if b != nil { - _, err := w.Write(b) - return err - } - // Other values are handled below. - } - - // We don't attempt to serialise every possible value type; only those - // that can occur in protocol buffers. - switch v.Kind() { - case reflect.Slice: - // Should only be a []byte; repeated fields are handled in writeStruct. - if err := writeString(w, string(v.Bytes())); err != nil { - return err - } - case reflect.String: - if err := writeString(w, v.String()); err != nil { - return err - } - case reflect.Struct: - // Required/optional group/message. - var bra, ket byte = '<', '>' - if props != nil && props.Wire == "group" { - bra, ket = '{', '}' - } - if err := w.WriteByte(bra); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte('\n'); err != nil { - return err - } - } - w.indent() - if v.CanAddr() { - // Calling v.Interface on a struct causes the reflect package to - // copy the entire struct. This is racy with the new Marshaler - // since we atomically update the XXX_sizecache. - // - // Thus, we retrieve a pointer to the struct if possible to avoid - // a race since v.Interface on the pointer doesn't copy the struct. - // - // If v is not addressable, then we are not worried about a race - // since it implies that the binary Marshaler cannot possibly be - // mutating this value. - v = v.Addr() - } - if etm, ok := v.Interface().(encoding.TextMarshaler); ok { - text, err := etm.MarshalText() - if err != nil { - return err - } - if _, err = w.Write(text); err != nil { - return err - } - } else { - if v.Kind() == reflect.Ptr { - v = v.Elem() - } - if err := tm.writeStruct(w, v); err != nil { - return err - } - } - w.unindent() - if err := w.WriteByte(ket); err != nil { - return err - } - default: - _, err := fmt.Fprint(w, v.Interface()) - return err - } - return nil -} - -// equivalent to C's isprint. -func isprint(c byte) bool { - return c >= 0x20 && c < 0x7f -} - -// writeString writes a string in the protocol buffer text format. -// It is similar to strconv.Quote except we don't use Go escape sequences, -// we treat the string as a byte sequence, and we use octal escapes. -// These differences are to maintain interoperability with the other -// languages' implementations of the text format. -func writeString(w *textWriter, s string) error { - // use WriteByte here to get any needed indent - if err := w.WriteByte('"'); err != nil { - return err - } - // Loop over the bytes, not the runes. - for i := 0; i < len(s); i++ { - var err error - // Divergence from C++: we don't escape apostrophes. - // There's no need to escape them, and the C++ parser - // copes with a naked apostrophe. - switch c := s[i]; c { - case '\n': - _, err = w.w.Write(backslashN) - case '\r': - _, err = w.w.Write(backslashR) - case '\t': - _, err = w.w.Write(backslashT) - case '"': - _, err = w.w.Write(backslashDQ) - case '\\': - _, err = w.w.Write(backslashBS) - default: - if isprint(c) { - err = w.w.WriteByte(c) - } else { - _, err = fmt.Fprintf(w.w, "\\%03o", c) - } - } - if err != nil { - return err - } - } - return w.WriteByte('"') -} - -func writeUnknownStruct(w *textWriter, data []byte) (err error) { - if !w.compact { - if _, err := fmt.Fprintf(w, "/* %d unknown bytes */\n", len(data)); err != nil { - return err - } - } - b := NewBuffer(data) - for b.index < len(b.buf) { - x, err := b.DecodeVarint() - if err != nil { - _, err := fmt.Fprintf(w, "/* %v */\n", err) - return err - } - wire, tag := x&7, x>>3 - if wire == WireEndGroup { - w.unindent() - if _, err := w.Write(endBraceNewline); err != nil { - return err - } - continue - } - if _, err := fmt.Fprint(w, tag); err != nil { - return err - } - if wire != WireStartGroup { - if err := w.WriteByte(':'); err != nil { - return err - } - } - if !w.compact || wire == WireStartGroup { - if err := w.WriteByte(' '); err != nil { - return err - } - } - switch wire { - case WireBytes: - buf, e := b.DecodeRawBytes(false) - if e == nil { - _, err = fmt.Fprintf(w, "%q", buf) - } else { - _, err = fmt.Fprintf(w, "/* %v */", e) - } - case WireFixed32: - x, err = b.DecodeFixed32() - err = writeUnknownInt(w, x, err) - case WireFixed64: - x, err = b.DecodeFixed64() - err = writeUnknownInt(w, x, err) - case WireStartGroup: - err = w.WriteByte('{') - w.indent() - case WireVarint: - x, err = b.DecodeVarint() - err = writeUnknownInt(w, x, err) - default: - _, err = fmt.Fprintf(w, "/* unknown wire type %d */", wire) - } - if err != nil { - return err - } - if err = w.WriteByte('\n'); err != nil { - return err - } - } - return nil -} - -func writeUnknownInt(w *textWriter, x uint64, err error) error { - if err == nil { - _, err = fmt.Fprint(w, x) - } else { - _, err = fmt.Fprintf(w, "/* %v */", err) - } - return err -} - -type int32Slice []int32 - -func (s int32Slice) Len() int { return len(s) } -func (s int32Slice) Less(i, j int) bool { return s[i] < s[j] } -func (s int32Slice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } - -// writeExtensions writes all the extensions in pv. -// pv is assumed to be a pointer to a protocol message struct that is extendable. -func (tm *TextMarshaler) writeExtensions(w *textWriter, pv reflect.Value) error { - emap := extensionMaps[pv.Type().Elem()] - ep, _ := extendable(pv.Interface()) - - // Order the extensions by ID. - // This isn't strictly necessary, but it will give us - // canonical output, which will also make testing easier. - m, mu := ep.extensionsRead() - if m == nil { - return nil - } - mu.Lock() - ids := make([]int32, 0, len(m)) - for id := range m { - ids = append(ids, id) - } - sort.Sort(int32Slice(ids)) - mu.Unlock() - - for _, extNum := range ids { - ext := m[extNum] - var desc *ExtensionDesc - if emap != nil { - desc = emap[extNum] - } - if desc == nil { - // Unknown extension. - if err := writeUnknownStruct(w, ext.enc); err != nil { - return err - } - continue - } - - pb, err := GetExtension(ep, desc) - if err != nil { - return fmt.Errorf("failed getting extension: %v", err) - } - - // Repeated extensions will appear as a slice. - if !desc.repeated() { - if err := tm.writeExtension(w, desc.Name, pb); err != nil { - return err - } - } else { - v := reflect.ValueOf(pb) - for i := 0; i < v.Len(); i++ { - if err := tm.writeExtension(w, desc.Name, v.Index(i).Interface()); err != nil { - return err - } - } - } - } - return nil -} - -func (tm *TextMarshaler) writeExtension(w *textWriter, name string, pb interface{}) error { - if _, err := fmt.Fprintf(w, "[%s]:", name); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte(' '); err != nil { - return err - } - } - if err := tm.writeAny(w, reflect.ValueOf(pb), nil); err != nil { - return err - } - if err := w.WriteByte('\n'); err != nil { - return err - } - return nil -} - -func (w *textWriter) writeIndent() { - if !w.complete { - return - } - remain := w.ind * 2 - for remain > 0 { - n := remain - if n > len(spaces) { - n = len(spaces) - } - w.w.Write(spaces[:n]) - remain -= n - } - w.complete = false -} - -// TextMarshaler is a configurable text format marshaler. -type TextMarshaler struct { - Compact bool // use compact text format (one line). - ExpandAny bool // expand google.protobuf.Any messages of known types -} - -// Marshal writes a given protocol buffer in text format. -// The only errors returned are from w. -func (tm *TextMarshaler) Marshal(w io.Writer, pb Message) error { - val := reflect.ValueOf(pb) - if pb == nil || val.IsNil() { - w.Write([]byte("")) - return nil - } - var bw *bufio.Writer - ww, ok := w.(writer) - if !ok { - bw = bufio.NewWriter(w) - ww = bw - } - aw := &textWriter{ - w: ww, - complete: true, - compact: tm.Compact, - } - - if etm, ok := pb.(encoding.TextMarshaler); ok { - text, err := etm.MarshalText() - if err != nil { - return err - } - if _, err = aw.Write(text); err != nil { - return err - } - if bw != nil { - return bw.Flush() - } - return nil - } - // Dereference the received pointer so we don't have outer < and >. - v := reflect.Indirect(val) - if err := tm.writeStruct(aw, v); err != nil { - return err - } - if bw != nil { - return bw.Flush() - } - return nil -} - -// Text is the same as Marshal, but returns the string directly. -func (tm *TextMarshaler) Text(pb Message) string { - var buf bytes.Buffer - tm.Marshal(&buf, pb) - return buf.String() -} - -var ( - defaultTextMarshaler = TextMarshaler{} - compactTextMarshaler = TextMarshaler{Compact: true} -) - -// TODO: consider removing some of the Marshal functions below. - -// MarshalText writes a given protocol buffer in text format. -// The only errors returned are from w. -func MarshalText(w io.Writer, pb Message) error { return defaultTextMarshaler.Marshal(w, pb) } - -// MarshalTextString is the same as MarshalText, but returns the string directly. -func MarshalTextString(pb Message) string { return defaultTextMarshaler.Text(pb) } - -// CompactText writes a given protocol buffer in compact text format (one line). -func CompactText(w io.Writer, pb Message) error { return compactTextMarshaler.Marshal(w, pb) } - -// CompactTextString is the same as CompactText, but returns the string directly. -func CompactTextString(pb Message) string { return compactTextMarshaler.Text(pb) } diff --git a/vendor/github.com/golang/protobuf/proto/text_parser.go b/vendor/github.com/golang/protobuf/proto/text_parser.go deleted file mode 100644 index 0685bae..0000000 --- a/vendor/github.com/golang/protobuf/proto/text_parser.go +++ /dev/null @@ -1,880 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -// Functions for parsing the Text protocol buffer format. -// TODO: message sets. - -import ( - "encoding" - "errors" - "fmt" - "reflect" - "strconv" - "strings" - "unicode/utf8" -) - -// Error string emitted when deserializing Any and fields are already set -const anyRepeatedlyUnpacked = "Any message unpacked multiple times, or %q already set" - -type ParseError struct { - Message string - Line int // 1-based line number - Offset int // 0-based byte offset from start of input -} - -func (p *ParseError) Error() string { - if p.Line == 1 { - // show offset only for first line - return fmt.Sprintf("line 1.%d: %v", p.Offset, p.Message) - } - return fmt.Sprintf("line %d: %v", p.Line, p.Message) -} - -type token struct { - value string - err *ParseError - line int // line number - offset int // byte number from start of input, not start of line - unquoted string // the unquoted version of value, if it was a quoted string -} - -func (t *token) String() string { - if t.err == nil { - return fmt.Sprintf("%q (line=%d, offset=%d)", t.value, t.line, t.offset) - } - return fmt.Sprintf("parse error: %v", t.err) -} - -type textParser struct { - s string // remaining input - done bool // whether the parsing is finished (success or error) - backed bool // whether back() was called - offset, line int - cur token -} - -func newTextParser(s string) *textParser { - p := new(textParser) - p.s = s - p.line = 1 - p.cur.line = 1 - return p -} - -func (p *textParser) errorf(format string, a ...interface{}) *ParseError { - pe := &ParseError{fmt.Sprintf(format, a...), p.cur.line, p.cur.offset} - p.cur.err = pe - p.done = true - return pe -} - -// Numbers and identifiers are matched by [-+._A-Za-z0-9] -func isIdentOrNumberChar(c byte) bool { - switch { - case 'A' <= c && c <= 'Z', 'a' <= c && c <= 'z': - return true - case '0' <= c && c <= '9': - return true - } - switch c { - case '-', '+', '.', '_': - return true - } - return false -} - -func isWhitespace(c byte) bool { - switch c { - case ' ', '\t', '\n', '\r': - return true - } - return false -} - -func isQuote(c byte) bool { - switch c { - case '"', '\'': - return true - } - return false -} - -func (p *textParser) skipWhitespace() { - i := 0 - for i < len(p.s) && (isWhitespace(p.s[i]) || p.s[i] == '#') { - if p.s[i] == '#' { - // comment; skip to end of line or input - for i < len(p.s) && p.s[i] != '\n' { - i++ - } - if i == len(p.s) { - break - } - } - if p.s[i] == '\n' { - p.line++ - } - i++ - } - p.offset += i - p.s = p.s[i:len(p.s)] - if len(p.s) == 0 { - p.done = true - } -} - -func (p *textParser) advance() { - // Skip whitespace - p.skipWhitespace() - if p.done { - return - } - - // Start of non-whitespace - p.cur.err = nil - p.cur.offset, p.cur.line = p.offset, p.line - p.cur.unquoted = "" - switch p.s[0] { - case '<', '>', '{', '}', ':', '[', ']', ';', ',', '/': - // Single symbol - p.cur.value, p.s = p.s[0:1], p.s[1:len(p.s)] - case '"', '\'': - // Quoted string - i := 1 - for i < len(p.s) && p.s[i] != p.s[0] && p.s[i] != '\n' { - if p.s[i] == '\\' && i+1 < len(p.s) { - // skip escaped char - i++ - } - i++ - } - if i >= len(p.s) || p.s[i] != p.s[0] { - p.errorf("unmatched quote") - return - } - unq, err := unquoteC(p.s[1:i], rune(p.s[0])) - if err != nil { - p.errorf("invalid quoted string %s: %v", p.s[0:i+1], err) - return - } - p.cur.value, p.s = p.s[0:i+1], p.s[i+1:len(p.s)] - p.cur.unquoted = unq - default: - i := 0 - for i < len(p.s) && isIdentOrNumberChar(p.s[i]) { - i++ - } - if i == 0 { - p.errorf("unexpected byte %#x", p.s[0]) - return - } - p.cur.value, p.s = p.s[0:i], p.s[i:len(p.s)] - } - p.offset += len(p.cur.value) -} - -var ( - errBadUTF8 = errors.New("proto: bad UTF-8") -) - -func unquoteC(s string, quote rune) (string, error) { - // This is based on C++'s tokenizer.cc. - // Despite its name, this is *not* parsing C syntax. - // For instance, "\0" is an invalid quoted string. - - // Avoid allocation in trivial cases. - simple := true - for _, r := range s { - if r == '\\' || r == quote { - simple = false - break - } - } - if simple { - return s, nil - } - - buf := make([]byte, 0, 3*len(s)/2) - for len(s) > 0 { - r, n := utf8.DecodeRuneInString(s) - if r == utf8.RuneError && n == 1 { - return "", errBadUTF8 - } - s = s[n:] - if r != '\\' { - if r < utf8.RuneSelf { - buf = append(buf, byte(r)) - } else { - buf = append(buf, string(r)...) - } - continue - } - - ch, tail, err := unescape(s) - if err != nil { - return "", err - } - buf = append(buf, ch...) - s = tail - } - return string(buf), nil -} - -func unescape(s string) (ch string, tail string, err error) { - r, n := utf8.DecodeRuneInString(s) - if r == utf8.RuneError && n == 1 { - return "", "", errBadUTF8 - } - s = s[n:] - switch r { - case 'a': - return "\a", s, nil - case 'b': - return "\b", s, nil - case 'f': - return "\f", s, nil - case 'n': - return "\n", s, nil - case 'r': - return "\r", s, nil - case 't': - return "\t", s, nil - case 'v': - return "\v", s, nil - case '?': - return "?", s, nil // trigraph workaround - case '\'', '"', '\\': - return string(r), s, nil - case '0', '1', '2', '3', '4', '5', '6', '7': - if len(s) < 2 { - return "", "", fmt.Errorf(`\%c requires 2 following digits`, r) - } - ss := string(r) + s[:2] - s = s[2:] - i, err := strconv.ParseUint(ss, 8, 8) - if err != nil { - return "", "", fmt.Errorf(`\%s contains non-octal digits`, ss) - } - return string([]byte{byte(i)}), s, nil - case 'x', 'X', 'u', 'U': - var n int - switch r { - case 'x', 'X': - n = 2 - case 'u': - n = 4 - case 'U': - n = 8 - } - if len(s) < n { - return "", "", fmt.Errorf(`\%c requires %d following digits`, r, n) - } - ss := s[:n] - s = s[n:] - i, err := strconv.ParseUint(ss, 16, 64) - if err != nil { - return "", "", fmt.Errorf(`\%c%s contains non-hexadecimal digits`, r, ss) - } - if r == 'x' || r == 'X' { - return string([]byte{byte(i)}), s, nil - } - if i > utf8.MaxRune { - return "", "", fmt.Errorf(`\%c%s is not a valid Unicode code point`, r, ss) - } - return string(i), s, nil - } - return "", "", fmt.Errorf(`unknown escape \%c`, r) -} - -// Back off the parser by one token. Can only be done between calls to next(). -// It makes the next advance() a no-op. -func (p *textParser) back() { p.backed = true } - -// Advances the parser and returns the new current token. -func (p *textParser) next() *token { - if p.backed || p.done { - p.backed = false - return &p.cur - } - p.advance() - if p.done { - p.cur.value = "" - } else if len(p.cur.value) > 0 && isQuote(p.cur.value[0]) { - // Look for multiple quoted strings separated by whitespace, - // and concatenate them. - cat := p.cur - for { - p.skipWhitespace() - if p.done || !isQuote(p.s[0]) { - break - } - p.advance() - if p.cur.err != nil { - return &p.cur - } - cat.value += " " + p.cur.value - cat.unquoted += p.cur.unquoted - } - p.done = false // parser may have seen EOF, but we want to return cat - p.cur = cat - } - return &p.cur -} - -func (p *textParser) consumeToken(s string) error { - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value != s { - p.back() - return p.errorf("expected %q, found %q", s, tok.value) - } - return nil -} - -// Return a RequiredNotSetError indicating which required field was not set. -func (p *textParser) missingRequiredFieldError(sv reflect.Value) *RequiredNotSetError { - st := sv.Type() - sprops := GetProperties(st) - for i := 0; i < st.NumField(); i++ { - if !isNil(sv.Field(i)) { - continue - } - - props := sprops.Prop[i] - if props.Required { - return &RequiredNotSetError{fmt.Sprintf("%v.%v", st, props.OrigName)} - } - } - return &RequiredNotSetError{fmt.Sprintf("%v.", st)} // should not happen -} - -// Returns the index in the struct for the named field, as well as the parsed tag properties. -func structFieldByName(sprops *StructProperties, name string) (int, *Properties, bool) { - i, ok := sprops.decoderOrigNames[name] - if ok { - return i, sprops.Prop[i], true - } - return -1, nil, false -} - -// Consume a ':' from the input stream (if the next token is a colon), -// returning an error if a colon is needed but not present. -func (p *textParser) checkForColon(props *Properties, typ reflect.Type) *ParseError { - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value != ":" { - // Colon is optional when the field is a group or message. - needColon := true - switch props.Wire { - case "group": - needColon = false - case "bytes": - // A "bytes" field is either a message, a string, or a repeated field; - // those three become *T, *string and []T respectively, so we can check for - // this field being a pointer to a non-string. - if typ.Kind() == reflect.Ptr { - // *T or *string - if typ.Elem().Kind() == reflect.String { - break - } - } else if typ.Kind() == reflect.Slice { - // []T or []*T - if typ.Elem().Kind() != reflect.Ptr { - break - } - } else if typ.Kind() == reflect.String { - // The proto3 exception is for a string field, - // which requires a colon. - break - } - needColon = false - } - if needColon { - return p.errorf("expected ':', found %q", tok.value) - } - p.back() - } - return nil -} - -func (p *textParser) readStruct(sv reflect.Value, terminator string) error { - st := sv.Type() - sprops := GetProperties(st) - reqCount := sprops.reqCount - var reqFieldErr error - fieldSet := make(map[string]bool) - // A struct is a sequence of "name: value", terminated by one of - // '>' or '}', or the end of the input. A name may also be - // "[extension]" or "[type/url]". - // - // The whole struct can also be an expanded Any message, like: - // [type/url] < ... struct contents ... > - for { - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value == terminator { - break - } - if tok.value == "[" { - // Looks like an extension or an Any. - // - // TODO: Check whether we need to handle - // namespace rooted names (e.g. ".something.Foo"). - extName, err := p.consumeExtName() - if err != nil { - return err - } - - if s := strings.LastIndex(extName, "/"); s >= 0 { - // If it contains a slash, it's an Any type URL. - messageName := extName[s+1:] - mt := MessageType(messageName) - if mt == nil { - return p.errorf("unrecognized message %q in google.protobuf.Any", messageName) - } - tok = p.next() - if tok.err != nil { - return tok.err - } - // consume an optional colon - if tok.value == ":" { - tok = p.next() - if tok.err != nil { - return tok.err - } - } - var terminator string - switch tok.value { - case "<": - terminator = ">" - case "{": - terminator = "}" - default: - return p.errorf("expected '{' or '<', found %q", tok.value) - } - v := reflect.New(mt.Elem()) - if pe := p.readStruct(v.Elem(), terminator); pe != nil { - return pe - } - b, err := Marshal(v.Interface().(Message)) - if err != nil { - return p.errorf("failed to marshal message of type %q: %v", messageName, err) - } - if fieldSet["type_url"] { - return p.errorf(anyRepeatedlyUnpacked, "type_url") - } - if fieldSet["value"] { - return p.errorf(anyRepeatedlyUnpacked, "value") - } - sv.FieldByName("TypeUrl").SetString(extName) - sv.FieldByName("Value").SetBytes(b) - fieldSet["type_url"] = true - fieldSet["value"] = true - continue - } - - var desc *ExtensionDesc - // This could be faster, but it's functional. - // TODO: Do something smarter than a linear scan. - for _, d := range RegisteredExtensions(reflect.New(st).Interface().(Message)) { - if d.Name == extName { - desc = d - break - } - } - if desc == nil { - return p.errorf("unrecognized extension %q", extName) - } - - props := &Properties{} - props.Parse(desc.Tag) - - typ := reflect.TypeOf(desc.ExtensionType) - if err := p.checkForColon(props, typ); err != nil { - return err - } - - rep := desc.repeated() - - // Read the extension structure, and set it in - // the value we're constructing. - var ext reflect.Value - if !rep { - ext = reflect.New(typ).Elem() - } else { - ext = reflect.New(typ.Elem()).Elem() - } - if err := p.readAny(ext, props); err != nil { - if _, ok := err.(*RequiredNotSetError); !ok { - return err - } - reqFieldErr = err - } - ep := sv.Addr().Interface().(Message) - if !rep { - SetExtension(ep, desc, ext.Interface()) - } else { - old, err := GetExtension(ep, desc) - var sl reflect.Value - if err == nil { - sl = reflect.ValueOf(old) // existing slice - } else { - sl = reflect.MakeSlice(typ, 0, 1) - } - sl = reflect.Append(sl, ext) - SetExtension(ep, desc, sl.Interface()) - } - if err := p.consumeOptionalSeparator(); err != nil { - return err - } - continue - } - - // This is a normal, non-extension field. - name := tok.value - var dst reflect.Value - fi, props, ok := structFieldByName(sprops, name) - if ok { - dst = sv.Field(fi) - } else if oop, ok := sprops.OneofTypes[name]; ok { - // It is a oneof. - props = oop.Prop - nv := reflect.New(oop.Type.Elem()) - dst = nv.Elem().Field(0) - field := sv.Field(oop.Field) - if !field.IsNil() { - return p.errorf("field '%s' would overwrite already parsed oneof '%s'", name, sv.Type().Field(oop.Field).Name) - } - field.Set(nv) - } - if !dst.IsValid() { - return p.errorf("unknown field name %q in %v", name, st) - } - - if dst.Kind() == reflect.Map { - // Consume any colon. - if err := p.checkForColon(props, dst.Type()); err != nil { - return err - } - - // Construct the map if it doesn't already exist. - if dst.IsNil() { - dst.Set(reflect.MakeMap(dst.Type())) - } - key := reflect.New(dst.Type().Key()).Elem() - val := reflect.New(dst.Type().Elem()).Elem() - - // The map entry should be this sequence of tokens: - // < key : KEY value : VALUE > - // However, implementations may omit key or value, and technically - // we should support them in any order. See b/28924776 for a time - // this went wrong. - - tok := p.next() - var terminator string - switch tok.value { - case "<": - terminator = ">" - case "{": - terminator = "}" - default: - return p.errorf("expected '{' or '<', found %q", tok.value) - } - for { - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value == terminator { - break - } - switch tok.value { - case "key": - if err := p.consumeToken(":"); err != nil { - return err - } - if err := p.readAny(key, props.mkeyprop); err != nil { - return err - } - if err := p.consumeOptionalSeparator(); err != nil { - return err - } - case "value": - if err := p.checkForColon(props.mvalprop, dst.Type().Elem()); err != nil { - return err - } - if err := p.readAny(val, props.mvalprop); err != nil { - return err - } - if err := p.consumeOptionalSeparator(); err != nil { - return err - } - default: - p.back() - return p.errorf(`expected "key", "value", or %q, found %q`, terminator, tok.value) - } - } - - dst.SetMapIndex(key, val) - continue - } - - // Check that it's not already set if it's not a repeated field. - if !props.Repeated && fieldSet[name] { - return p.errorf("non-repeated field %q was repeated", name) - } - - if err := p.checkForColon(props, dst.Type()); err != nil { - return err - } - - // Parse into the field. - fieldSet[name] = true - if err := p.readAny(dst, props); err != nil { - if _, ok := err.(*RequiredNotSetError); !ok { - return err - } - reqFieldErr = err - } - if props.Required { - reqCount-- - } - - if err := p.consumeOptionalSeparator(); err != nil { - return err - } - - } - - if reqCount > 0 { - return p.missingRequiredFieldError(sv) - } - return reqFieldErr -} - -// consumeExtName consumes extension name or expanded Any type URL and the -// following ']'. It returns the name or URL consumed. -func (p *textParser) consumeExtName() (string, error) { - tok := p.next() - if tok.err != nil { - return "", tok.err - } - - // If extension name or type url is quoted, it's a single token. - if len(tok.value) > 2 && isQuote(tok.value[0]) && tok.value[len(tok.value)-1] == tok.value[0] { - name, err := unquoteC(tok.value[1:len(tok.value)-1], rune(tok.value[0])) - if err != nil { - return "", err - } - return name, p.consumeToken("]") - } - - // Consume everything up to "]" - var parts []string - for tok.value != "]" { - parts = append(parts, tok.value) - tok = p.next() - if tok.err != nil { - return "", p.errorf("unrecognized type_url or extension name: %s", tok.err) - } - if p.done && tok.value != "]" { - return "", p.errorf("unclosed type_url or extension name") - } - } - return strings.Join(parts, ""), nil -} - -// consumeOptionalSeparator consumes an optional semicolon or comma. -// It is used in readStruct to provide backward compatibility. -func (p *textParser) consumeOptionalSeparator() error { - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value != ";" && tok.value != "," { - p.back() - } - return nil -} - -func (p *textParser) readAny(v reflect.Value, props *Properties) error { - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value == "" { - return p.errorf("unexpected EOF") - } - - switch fv := v; fv.Kind() { - case reflect.Slice: - at := v.Type() - if at.Elem().Kind() == reflect.Uint8 { - // Special case for []byte - if tok.value[0] != '"' && tok.value[0] != '\'' { - // Deliberately written out here, as the error after - // this switch statement would write "invalid []byte: ...", - // which is not as user-friendly. - return p.errorf("invalid string: %v", tok.value) - } - bytes := []byte(tok.unquoted) - fv.Set(reflect.ValueOf(bytes)) - return nil - } - // Repeated field. - if tok.value == "[" { - // Repeated field with list notation, like [1,2,3]. - for { - fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem())) - err := p.readAny(fv.Index(fv.Len()-1), props) - if err != nil { - return err - } - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value == "]" { - break - } - if tok.value != "," { - return p.errorf("Expected ']' or ',' found %q", tok.value) - } - } - return nil - } - // One value of the repeated field. - p.back() - fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem())) - return p.readAny(fv.Index(fv.Len()-1), props) - case reflect.Bool: - // true/1/t/True or false/f/0/False. - switch tok.value { - case "true", "1", "t", "True": - fv.SetBool(true) - return nil - case "false", "0", "f", "False": - fv.SetBool(false) - return nil - } - case reflect.Float32, reflect.Float64: - v := tok.value - // Ignore 'f' for compatibility with output generated by C++, but don't - // remove 'f' when the value is "-inf" or "inf". - if strings.HasSuffix(v, "f") && tok.value != "-inf" && tok.value != "inf" { - v = v[:len(v)-1] - } - if f, err := strconv.ParseFloat(v, fv.Type().Bits()); err == nil { - fv.SetFloat(f) - return nil - } - case reflect.Int32: - if x, err := strconv.ParseInt(tok.value, 0, 32); err == nil { - fv.SetInt(x) - return nil - } - - if len(props.Enum) == 0 { - break - } - m, ok := enumValueMaps[props.Enum] - if !ok { - break - } - x, ok := m[tok.value] - if !ok { - break - } - fv.SetInt(int64(x)) - return nil - case reflect.Int64: - if x, err := strconv.ParseInt(tok.value, 0, 64); err == nil { - fv.SetInt(x) - return nil - } - - case reflect.Ptr: - // A basic field (indirected through pointer), or a repeated message/group - p.back() - fv.Set(reflect.New(fv.Type().Elem())) - return p.readAny(fv.Elem(), props) - case reflect.String: - if tok.value[0] == '"' || tok.value[0] == '\'' { - fv.SetString(tok.unquoted) - return nil - } - case reflect.Struct: - var terminator string - switch tok.value { - case "{": - terminator = "}" - case "<": - terminator = ">" - default: - return p.errorf("expected '{' or '<', found %q", tok.value) - } - // TODO: Handle nested messages which implement encoding.TextUnmarshaler. - return p.readStruct(fv, terminator) - case reflect.Uint32: - if x, err := strconv.ParseUint(tok.value, 0, 32); err == nil { - fv.SetUint(uint64(x)) - return nil - } - case reflect.Uint64: - if x, err := strconv.ParseUint(tok.value, 0, 64); err == nil { - fv.SetUint(x) - return nil - } - } - return p.errorf("invalid %v: %v", v.Type(), tok.value) -} - -// UnmarshalText reads a protocol buffer in Text format. UnmarshalText resets pb -// before starting to unmarshal, so any existing data in pb is always removed. -// If a required field is not set and no other error occurs, -// UnmarshalText returns *RequiredNotSetError. -func UnmarshalText(s string, pb Message) error { - if um, ok := pb.(encoding.TextUnmarshaler); ok { - return um.UnmarshalText([]byte(s)) - } - pb.Reset() - v := reflect.ValueOf(pb) - return newTextParser(s).readStruct(v.Elem(), "") -} diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go deleted file mode 100644 index e855b1f..0000000 --- a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go +++ /dev/null @@ -1,2812 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: google/protobuf/descriptor.proto - -package descriptor // import "github.com/golang/protobuf/protoc-gen-go/descriptor" - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -type FieldDescriptorProto_Type int32 - -const ( - // 0 is reserved for errors. - // Order is weird for historical reasons. - FieldDescriptorProto_TYPE_DOUBLE FieldDescriptorProto_Type = 1 - FieldDescriptorProto_TYPE_FLOAT FieldDescriptorProto_Type = 2 - // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if - // negative values are likely. - FieldDescriptorProto_TYPE_INT64 FieldDescriptorProto_Type = 3 - FieldDescriptorProto_TYPE_UINT64 FieldDescriptorProto_Type = 4 - // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if - // negative values are likely. - FieldDescriptorProto_TYPE_INT32 FieldDescriptorProto_Type = 5 - FieldDescriptorProto_TYPE_FIXED64 FieldDescriptorProto_Type = 6 - FieldDescriptorProto_TYPE_FIXED32 FieldDescriptorProto_Type = 7 - FieldDescriptorProto_TYPE_BOOL FieldDescriptorProto_Type = 8 - FieldDescriptorProto_TYPE_STRING FieldDescriptorProto_Type = 9 - // Tag-delimited aggregate. - // Group type is deprecated and not supported in proto3. However, Proto3 - // implementations should still be able to parse the group wire format and - // treat group fields as unknown fields. - FieldDescriptorProto_TYPE_GROUP FieldDescriptorProto_Type = 10 - FieldDescriptorProto_TYPE_MESSAGE FieldDescriptorProto_Type = 11 - // New in version 2. - FieldDescriptorProto_TYPE_BYTES FieldDescriptorProto_Type = 12 - FieldDescriptorProto_TYPE_UINT32 FieldDescriptorProto_Type = 13 - FieldDescriptorProto_TYPE_ENUM FieldDescriptorProto_Type = 14 - FieldDescriptorProto_TYPE_SFIXED32 FieldDescriptorProto_Type = 15 - FieldDescriptorProto_TYPE_SFIXED64 FieldDescriptorProto_Type = 16 - FieldDescriptorProto_TYPE_SINT32 FieldDescriptorProto_Type = 17 - FieldDescriptorProto_TYPE_SINT64 FieldDescriptorProto_Type = 18 -) - -var FieldDescriptorProto_Type_name = map[int32]string{ - 1: "TYPE_DOUBLE", - 2: "TYPE_FLOAT", - 3: "TYPE_INT64", - 4: "TYPE_UINT64", - 5: "TYPE_INT32", - 6: "TYPE_FIXED64", - 7: "TYPE_FIXED32", - 8: "TYPE_BOOL", - 9: "TYPE_STRING", - 10: "TYPE_GROUP", - 11: "TYPE_MESSAGE", - 12: "TYPE_BYTES", - 13: "TYPE_UINT32", - 14: "TYPE_ENUM", - 15: "TYPE_SFIXED32", - 16: "TYPE_SFIXED64", - 17: "TYPE_SINT32", - 18: "TYPE_SINT64", -} -var FieldDescriptorProto_Type_value = map[string]int32{ - "TYPE_DOUBLE": 1, - "TYPE_FLOAT": 2, - "TYPE_INT64": 3, - "TYPE_UINT64": 4, - "TYPE_INT32": 5, - "TYPE_FIXED64": 6, - "TYPE_FIXED32": 7, - "TYPE_BOOL": 8, - "TYPE_STRING": 9, - "TYPE_GROUP": 10, - "TYPE_MESSAGE": 11, - "TYPE_BYTES": 12, - "TYPE_UINT32": 13, - "TYPE_ENUM": 14, - "TYPE_SFIXED32": 15, - "TYPE_SFIXED64": 16, - "TYPE_SINT32": 17, - "TYPE_SINT64": 18, -} - -func (x FieldDescriptorProto_Type) Enum() *FieldDescriptorProto_Type { - p := new(FieldDescriptorProto_Type) - *p = x - return p -} -func (x FieldDescriptorProto_Type) String() string { - return proto.EnumName(FieldDescriptorProto_Type_name, int32(x)) -} -func (x *FieldDescriptorProto_Type) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(FieldDescriptorProto_Type_value, data, "FieldDescriptorProto_Type") - if err != nil { - return err - } - *x = FieldDescriptorProto_Type(value) - return nil -} -func (FieldDescriptorProto_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{4, 0} -} - -type FieldDescriptorProto_Label int32 - -const ( - // 0 is reserved for errors - FieldDescriptorProto_LABEL_OPTIONAL FieldDescriptorProto_Label = 1 - FieldDescriptorProto_LABEL_REQUIRED FieldDescriptorProto_Label = 2 - FieldDescriptorProto_LABEL_REPEATED FieldDescriptorProto_Label = 3 -) - -var FieldDescriptorProto_Label_name = map[int32]string{ - 1: "LABEL_OPTIONAL", - 2: "LABEL_REQUIRED", - 3: "LABEL_REPEATED", -} -var FieldDescriptorProto_Label_value = map[string]int32{ - "LABEL_OPTIONAL": 1, - "LABEL_REQUIRED": 2, - "LABEL_REPEATED": 3, -} - -func (x FieldDescriptorProto_Label) Enum() *FieldDescriptorProto_Label { - p := new(FieldDescriptorProto_Label) - *p = x - return p -} -func (x FieldDescriptorProto_Label) String() string { - return proto.EnumName(FieldDescriptorProto_Label_name, int32(x)) -} -func (x *FieldDescriptorProto_Label) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(FieldDescriptorProto_Label_value, data, "FieldDescriptorProto_Label") - if err != nil { - return err - } - *x = FieldDescriptorProto_Label(value) - return nil -} -func (FieldDescriptorProto_Label) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{4, 1} -} - -// Generated classes can be optimized for speed or code size. -type FileOptions_OptimizeMode int32 - -const ( - FileOptions_SPEED FileOptions_OptimizeMode = 1 - // etc. - FileOptions_CODE_SIZE FileOptions_OptimizeMode = 2 - FileOptions_LITE_RUNTIME FileOptions_OptimizeMode = 3 -) - -var FileOptions_OptimizeMode_name = map[int32]string{ - 1: "SPEED", - 2: "CODE_SIZE", - 3: "LITE_RUNTIME", -} -var FileOptions_OptimizeMode_value = map[string]int32{ - "SPEED": 1, - "CODE_SIZE": 2, - "LITE_RUNTIME": 3, -} - -func (x FileOptions_OptimizeMode) Enum() *FileOptions_OptimizeMode { - p := new(FileOptions_OptimizeMode) - *p = x - return p -} -func (x FileOptions_OptimizeMode) String() string { - return proto.EnumName(FileOptions_OptimizeMode_name, int32(x)) -} -func (x *FileOptions_OptimizeMode) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(FileOptions_OptimizeMode_value, data, "FileOptions_OptimizeMode") - if err != nil { - return err - } - *x = FileOptions_OptimizeMode(value) - return nil -} -func (FileOptions_OptimizeMode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{10, 0} -} - -type FieldOptions_CType int32 - -const ( - // Default mode. - FieldOptions_STRING FieldOptions_CType = 0 - FieldOptions_CORD FieldOptions_CType = 1 - FieldOptions_STRING_PIECE FieldOptions_CType = 2 -) - -var FieldOptions_CType_name = map[int32]string{ - 0: "STRING", - 1: "CORD", - 2: "STRING_PIECE", -} -var FieldOptions_CType_value = map[string]int32{ - "STRING": 0, - "CORD": 1, - "STRING_PIECE": 2, -} - -func (x FieldOptions_CType) Enum() *FieldOptions_CType { - p := new(FieldOptions_CType) - *p = x - return p -} -func (x FieldOptions_CType) String() string { - return proto.EnumName(FieldOptions_CType_name, int32(x)) -} -func (x *FieldOptions_CType) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(FieldOptions_CType_value, data, "FieldOptions_CType") - if err != nil { - return err - } - *x = FieldOptions_CType(value) - return nil -} -func (FieldOptions_CType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{12, 0} -} - -type FieldOptions_JSType int32 - -const ( - // Use the default type. - FieldOptions_JS_NORMAL FieldOptions_JSType = 0 - // Use JavaScript strings. - FieldOptions_JS_STRING FieldOptions_JSType = 1 - // Use JavaScript numbers. - FieldOptions_JS_NUMBER FieldOptions_JSType = 2 -) - -var FieldOptions_JSType_name = map[int32]string{ - 0: "JS_NORMAL", - 1: "JS_STRING", - 2: "JS_NUMBER", -} -var FieldOptions_JSType_value = map[string]int32{ - "JS_NORMAL": 0, - "JS_STRING": 1, - "JS_NUMBER": 2, -} - -func (x FieldOptions_JSType) Enum() *FieldOptions_JSType { - p := new(FieldOptions_JSType) - *p = x - return p -} -func (x FieldOptions_JSType) String() string { - return proto.EnumName(FieldOptions_JSType_name, int32(x)) -} -func (x *FieldOptions_JSType) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(FieldOptions_JSType_value, data, "FieldOptions_JSType") - if err != nil { - return err - } - *x = FieldOptions_JSType(value) - return nil -} -func (FieldOptions_JSType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{12, 1} -} - -// Is this method side-effect-free (or safe in HTTP parlance), or idempotent, -// or neither? HTTP based RPC implementation may choose GET verb for safe -// methods, and PUT verb for idempotent methods instead of the default POST. -type MethodOptions_IdempotencyLevel int32 - -const ( - MethodOptions_IDEMPOTENCY_UNKNOWN MethodOptions_IdempotencyLevel = 0 - MethodOptions_NO_SIDE_EFFECTS MethodOptions_IdempotencyLevel = 1 - MethodOptions_IDEMPOTENT MethodOptions_IdempotencyLevel = 2 -) - -var MethodOptions_IdempotencyLevel_name = map[int32]string{ - 0: "IDEMPOTENCY_UNKNOWN", - 1: "NO_SIDE_EFFECTS", - 2: "IDEMPOTENT", -} -var MethodOptions_IdempotencyLevel_value = map[string]int32{ - "IDEMPOTENCY_UNKNOWN": 0, - "NO_SIDE_EFFECTS": 1, - "IDEMPOTENT": 2, -} - -func (x MethodOptions_IdempotencyLevel) Enum() *MethodOptions_IdempotencyLevel { - p := new(MethodOptions_IdempotencyLevel) - *p = x - return p -} -func (x MethodOptions_IdempotencyLevel) String() string { - return proto.EnumName(MethodOptions_IdempotencyLevel_name, int32(x)) -} -func (x *MethodOptions_IdempotencyLevel) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(MethodOptions_IdempotencyLevel_value, data, "MethodOptions_IdempotencyLevel") - if err != nil { - return err - } - *x = MethodOptions_IdempotencyLevel(value) - return nil -} -func (MethodOptions_IdempotencyLevel) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{17, 0} -} - -// The protocol compiler can output a FileDescriptorSet containing the .proto -// files it parses. -type FileDescriptorSet struct { - File []*FileDescriptorProto `protobuf:"bytes,1,rep,name=file" json:"file,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FileDescriptorSet) Reset() { *m = FileDescriptorSet{} } -func (m *FileDescriptorSet) String() string { return proto.CompactTextString(m) } -func (*FileDescriptorSet) ProtoMessage() {} -func (*FileDescriptorSet) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{0} -} -func (m *FileDescriptorSet) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FileDescriptorSet.Unmarshal(m, b) -} -func (m *FileDescriptorSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FileDescriptorSet.Marshal(b, m, deterministic) -} -func (dst *FileDescriptorSet) XXX_Merge(src proto.Message) { - xxx_messageInfo_FileDescriptorSet.Merge(dst, src) -} -func (m *FileDescriptorSet) XXX_Size() int { - return xxx_messageInfo_FileDescriptorSet.Size(m) -} -func (m *FileDescriptorSet) XXX_DiscardUnknown() { - xxx_messageInfo_FileDescriptorSet.DiscardUnknown(m) -} - -var xxx_messageInfo_FileDescriptorSet proto.InternalMessageInfo - -func (m *FileDescriptorSet) GetFile() []*FileDescriptorProto { - if m != nil { - return m.File - } - return nil -} - -// Describes a complete .proto file. -type FileDescriptorProto struct { - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - Package *string `protobuf:"bytes,2,opt,name=package" json:"package,omitempty"` - // Names of files imported by this file. - Dependency []string `protobuf:"bytes,3,rep,name=dependency" json:"dependency,omitempty"` - // Indexes of the public imported files in the dependency list above. - PublicDependency []int32 `protobuf:"varint,10,rep,name=public_dependency,json=publicDependency" json:"public_dependency,omitempty"` - // Indexes of the weak imported files in the dependency list. - // For Google-internal migration only. Do not use. - WeakDependency []int32 `protobuf:"varint,11,rep,name=weak_dependency,json=weakDependency" json:"weak_dependency,omitempty"` - // All top-level definitions in this file. - MessageType []*DescriptorProto `protobuf:"bytes,4,rep,name=message_type,json=messageType" json:"message_type,omitempty"` - EnumType []*EnumDescriptorProto `protobuf:"bytes,5,rep,name=enum_type,json=enumType" json:"enum_type,omitempty"` - Service []*ServiceDescriptorProto `protobuf:"bytes,6,rep,name=service" json:"service,omitempty"` - Extension []*FieldDescriptorProto `protobuf:"bytes,7,rep,name=extension" json:"extension,omitempty"` - Options *FileOptions `protobuf:"bytes,8,opt,name=options" json:"options,omitempty"` - // This field contains optional information about the original source code. - // You may safely remove this entire field without harming runtime - // functionality of the descriptors -- the information is needed only by - // development tools. - SourceCodeInfo *SourceCodeInfo `protobuf:"bytes,9,opt,name=source_code_info,json=sourceCodeInfo" json:"source_code_info,omitempty"` - // The syntax of the proto file. - // The supported values are "proto2" and "proto3". - Syntax *string `protobuf:"bytes,12,opt,name=syntax" json:"syntax,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FileDescriptorProto) Reset() { *m = FileDescriptorProto{} } -func (m *FileDescriptorProto) String() string { return proto.CompactTextString(m) } -func (*FileDescriptorProto) ProtoMessage() {} -func (*FileDescriptorProto) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{1} -} -func (m *FileDescriptorProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FileDescriptorProto.Unmarshal(m, b) -} -func (m *FileDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FileDescriptorProto.Marshal(b, m, deterministic) -} -func (dst *FileDescriptorProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_FileDescriptorProto.Merge(dst, src) -} -func (m *FileDescriptorProto) XXX_Size() int { - return xxx_messageInfo_FileDescriptorProto.Size(m) -} -func (m *FileDescriptorProto) XXX_DiscardUnknown() { - xxx_messageInfo_FileDescriptorProto.DiscardUnknown(m) -} - -var xxx_messageInfo_FileDescriptorProto proto.InternalMessageInfo - -func (m *FileDescriptorProto) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" -} - -func (m *FileDescriptorProto) GetPackage() string { - if m != nil && m.Package != nil { - return *m.Package - } - return "" -} - -func (m *FileDescriptorProto) GetDependency() []string { - if m != nil { - return m.Dependency - } - return nil -} - -func (m *FileDescriptorProto) GetPublicDependency() []int32 { - if m != nil { - return m.PublicDependency - } - return nil -} - -func (m *FileDescriptorProto) GetWeakDependency() []int32 { - if m != nil { - return m.WeakDependency - } - return nil -} - -func (m *FileDescriptorProto) GetMessageType() []*DescriptorProto { - if m != nil { - return m.MessageType - } - return nil -} - -func (m *FileDescriptorProto) GetEnumType() []*EnumDescriptorProto { - if m != nil { - return m.EnumType - } - return nil -} - -func (m *FileDescriptorProto) GetService() []*ServiceDescriptorProto { - if m != nil { - return m.Service - } - return nil -} - -func (m *FileDescriptorProto) GetExtension() []*FieldDescriptorProto { - if m != nil { - return m.Extension - } - return nil -} - -func (m *FileDescriptorProto) GetOptions() *FileOptions { - if m != nil { - return m.Options - } - return nil -} - -func (m *FileDescriptorProto) GetSourceCodeInfo() *SourceCodeInfo { - if m != nil { - return m.SourceCodeInfo - } - return nil -} - -func (m *FileDescriptorProto) GetSyntax() string { - if m != nil && m.Syntax != nil { - return *m.Syntax - } - return "" -} - -// Describes a message type. -type DescriptorProto struct { - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - Field []*FieldDescriptorProto `protobuf:"bytes,2,rep,name=field" json:"field,omitempty"` - Extension []*FieldDescriptorProto `protobuf:"bytes,6,rep,name=extension" json:"extension,omitempty"` - NestedType []*DescriptorProto `protobuf:"bytes,3,rep,name=nested_type,json=nestedType" json:"nested_type,omitempty"` - EnumType []*EnumDescriptorProto `protobuf:"bytes,4,rep,name=enum_type,json=enumType" json:"enum_type,omitempty"` - ExtensionRange []*DescriptorProto_ExtensionRange `protobuf:"bytes,5,rep,name=extension_range,json=extensionRange" json:"extension_range,omitempty"` - OneofDecl []*OneofDescriptorProto `protobuf:"bytes,8,rep,name=oneof_decl,json=oneofDecl" json:"oneof_decl,omitempty"` - Options *MessageOptions `protobuf:"bytes,7,opt,name=options" json:"options,omitempty"` - ReservedRange []*DescriptorProto_ReservedRange `protobuf:"bytes,9,rep,name=reserved_range,json=reservedRange" json:"reserved_range,omitempty"` - // Reserved field names, which may not be used by fields in the same message. - // A given name may only be reserved once. - ReservedName []string `protobuf:"bytes,10,rep,name=reserved_name,json=reservedName" json:"reserved_name,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *DescriptorProto) Reset() { *m = DescriptorProto{} } -func (m *DescriptorProto) String() string { return proto.CompactTextString(m) } -func (*DescriptorProto) ProtoMessage() {} -func (*DescriptorProto) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{2} -} -func (m *DescriptorProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DescriptorProto.Unmarshal(m, b) -} -func (m *DescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DescriptorProto.Marshal(b, m, deterministic) -} -func (dst *DescriptorProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_DescriptorProto.Merge(dst, src) -} -func (m *DescriptorProto) XXX_Size() int { - return xxx_messageInfo_DescriptorProto.Size(m) -} -func (m *DescriptorProto) XXX_DiscardUnknown() { - xxx_messageInfo_DescriptorProto.DiscardUnknown(m) -} - -var xxx_messageInfo_DescriptorProto proto.InternalMessageInfo - -func (m *DescriptorProto) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" -} - -func (m *DescriptorProto) GetField() []*FieldDescriptorProto { - if m != nil { - return m.Field - } - return nil -} - -func (m *DescriptorProto) GetExtension() []*FieldDescriptorProto { - if m != nil { - return m.Extension - } - return nil -} - -func (m *DescriptorProto) GetNestedType() []*DescriptorProto { - if m != nil { - return m.NestedType - } - return nil -} - -func (m *DescriptorProto) GetEnumType() []*EnumDescriptorProto { - if m != nil { - return m.EnumType - } - return nil -} - -func (m *DescriptorProto) GetExtensionRange() []*DescriptorProto_ExtensionRange { - if m != nil { - return m.ExtensionRange - } - return nil -} - -func (m *DescriptorProto) GetOneofDecl() []*OneofDescriptorProto { - if m != nil { - return m.OneofDecl - } - return nil -} - -func (m *DescriptorProto) GetOptions() *MessageOptions { - if m != nil { - return m.Options - } - return nil -} - -func (m *DescriptorProto) GetReservedRange() []*DescriptorProto_ReservedRange { - if m != nil { - return m.ReservedRange - } - return nil -} - -func (m *DescriptorProto) GetReservedName() []string { - if m != nil { - return m.ReservedName - } - return nil -} - -type DescriptorProto_ExtensionRange struct { - Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` - End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` - Options *ExtensionRangeOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *DescriptorProto_ExtensionRange) Reset() { *m = DescriptorProto_ExtensionRange{} } -func (m *DescriptorProto_ExtensionRange) String() string { return proto.CompactTextString(m) } -func (*DescriptorProto_ExtensionRange) ProtoMessage() {} -func (*DescriptorProto_ExtensionRange) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{2, 0} -} -func (m *DescriptorProto_ExtensionRange) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DescriptorProto_ExtensionRange.Unmarshal(m, b) -} -func (m *DescriptorProto_ExtensionRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DescriptorProto_ExtensionRange.Marshal(b, m, deterministic) -} -func (dst *DescriptorProto_ExtensionRange) XXX_Merge(src proto.Message) { - xxx_messageInfo_DescriptorProto_ExtensionRange.Merge(dst, src) -} -func (m *DescriptorProto_ExtensionRange) XXX_Size() int { - return xxx_messageInfo_DescriptorProto_ExtensionRange.Size(m) -} -func (m *DescriptorProto_ExtensionRange) XXX_DiscardUnknown() { - xxx_messageInfo_DescriptorProto_ExtensionRange.DiscardUnknown(m) -} - -var xxx_messageInfo_DescriptorProto_ExtensionRange proto.InternalMessageInfo - -func (m *DescriptorProto_ExtensionRange) GetStart() int32 { - if m != nil && m.Start != nil { - return *m.Start - } - return 0 -} - -func (m *DescriptorProto_ExtensionRange) GetEnd() int32 { - if m != nil && m.End != nil { - return *m.End - } - return 0 -} - -func (m *DescriptorProto_ExtensionRange) GetOptions() *ExtensionRangeOptions { - if m != nil { - return m.Options - } - return nil -} - -// Range of reserved tag numbers. Reserved tag numbers may not be used by -// fields or extension ranges in the same message. Reserved ranges may -// not overlap. -type DescriptorProto_ReservedRange struct { - Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` - End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *DescriptorProto_ReservedRange) Reset() { *m = DescriptorProto_ReservedRange{} } -func (m *DescriptorProto_ReservedRange) String() string { return proto.CompactTextString(m) } -func (*DescriptorProto_ReservedRange) ProtoMessage() {} -func (*DescriptorProto_ReservedRange) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{2, 1} -} -func (m *DescriptorProto_ReservedRange) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DescriptorProto_ReservedRange.Unmarshal(m, b) -} -func (m *DescriptorProto_ReservedRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DescriptorProto_ReservedRange.Marshal(b, m, deterministic) -} -func (dst *DescriptorProto_ReservedRange) XXX_Merge(src proto.Message) { - xxx_messageInfo_DescriptorProto_ReservedRange.Merge(dst, src) -} -func (m *DescriptorProto_ReservedRange) XXX_Size() int { - return xxx_messageInfo_DescriptorProto_ReservedRange.Size(m) -} -func (m *DescriptorProto_ReservedRange) XXX_DiscardUnknown() { - xxx_messageInfo_DescriptorProto_ReservedRange.DiscardUnknown(m) -} - -var xxx_messageInfo_DescriptorProto_ReservedRange proto.InternalMessageInfo - -func (m *DescriptorProto_ReservedRange) GetStart() int32 { - if m != nil && m.Start != nil { - return *m.Start - } - return 0 -} - -func (m *DescriptorProto_ReservedRange) GetEnd() int32 { - if m != nil && m.End != nil { - return *m.End - } - return 0 -} - -type ExtensionRangeOptions struct { - // The parser stores options it doesn't recognize here. See above. - UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - proto.XXX_InternalExtensions `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ExtensionRangeOptions) Reset() { *m = ExtensionRangeOptions{} } -func (m *ExtensionRangeOptions) String() string { return proto.CompactTextString(m) } -func (*ExtensionRangeOptions) ProtoMessage() {} -func (*ExtensionRangeOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{3} -} - -var extRange_ExtensionRangeOptions = []proto.ExtensionRange{ - {Start: 1000, End: 536870911}, -} - -func (*ExtensionRangeOptions) ExtensionRangeArray() []proto.ExtensionRange { - return extRange_ExtensionRangeOptions -} -func (m *ExtensionRangeOptions) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ExtensionRangeOptions.Unmarshal(m, b) -} -func (m *ExtensionRangeOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ExtensionRangeOptions.Marshal(b, m, deterministic) -} -func (dst *ExtensionRangeOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_ExtensionRangeOptions.Merge(dst, src) -} -func (m *ExtensionRangeOptions) XXX_Size() int { - return xxx_messageInfo_ExtensionRangeOptions.Size(m) -} -func (m *ExtensionRangeOptions) XXX_DiscardUnknown() { - xxx_messageInfo_ExtensionRangeOptions.DiscardUnknown(m) -} - -var xxx_messageInfo_ExtensionRangeOptions proto.InternalMessageInfo - -func (m *ExtensionRangeOptions) GetUninterpretedOption() []*UninterpretedOption { - if m != nil { - return m.UninterpretedOption - } - return nil -} - -// Describes a field within a message. -type FieldDescriptorProto struct { - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - Number *int32 `protobuf:"varint,3,opt,name=number" json:"number,omitempty"` - Label *FieldDescriptorProto_Label `protobuf:"varint,4,opt,name=label,enum=google.protobuf.FieldDescriptorProto_Label" json:"label,omitempty"` - // If type_name is set, this need not be set. If both this and type_name - // are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. - Type *FieldDescriptorProto_Type `protobuf:"varint,5,opt,name=type,enum=google.protobuf.FieldDescriptorProto_Type" json:"type,omitempty"` - // For message and enum types, this is the name of the type. If the name - // starts with a '.', it is fully-qualified. Otherwise, C++-like scoping - // rules are used to find the type (i.e. first the nested types within this - // message are searched, then within the parent, on up to the root - // namespace). - TypeName *string `protobuf:"bytes,6,opt,name=type_name,json=typeName" json:"type_name,omitempty"` - // For extensions, this is the name of the type being extended. It is - // resolved in the same manner as type_name. - Extendee *string `protobuf:"bytes,2,opt,name=extendee" json:"extendee,omitempty"` - // For numeric types, contains the original text representation of the value. - // For booleans, "true" or "false". - // For strings, contains the default text contents (not escaped in any way). - // For bytes, contains the C escaped value. All bytes >= 128 are escaped. - // TODO(kenton): Base-64 encode? - DefaultValue *string `protobuf:"bytes,7,opt,name=default_value,json=defaultValue" json:"default_value,omitempty"` - // If set, gives the index of a oneof in the containing type's oneof_decl - // list. This field is a member of that oneof. - OneofIndex *int32 `protobuf:"varint,9,opt,name=oneof_index,json=oneofIndex" json:"oneof_index,omitempty"` - // JSON name of this field. The value is set by protocol compiler. If the - // user has set a "json_name" option on this field, that option's value - // will be used. Otherwise, it's deduced from the field's name by converting - // it to camelCase. - JsonName *string `protobuf:"bytes,10,opt,name=json_name,json=jsonName" json:"json_name,omitempty"` - Options *FieldOptions `protobuf:"bytes,8,opt,name=options" json:"options,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FieldDescriptorProto) Reset() { *m = FieldDescriptorProto{} } -func (m *FieldDescriptorProto) String() string { return proto.CompactTextString(m) } -func (*FieldDescriptorProto) ProtoMessage() {} -func (*FieldDescriptorProto) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{4} -} -func (m *FieldDescriptorProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FieldDescriptorProto.Unmarshal(m, b) -} -func (m *FieldDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FieldDescriptorProto.Marshal(b, m, deterministic) -} -func (dst *FieldDescriptorProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_FieldDescriptorProto.Merge(dst, src) -} -func (m *FieldDescriptorProto) XXX_Size() int { - return xxx_messageInfo_FieldDescriptorProto.Size(m) -} -func (m *FieldDescriptorProto) XXX_DiscardUnknown() { - xxx_messageInfo_FieldDescriptorProto.DiscardUnknown(m) -} - -var xxx_messageInfo_FieldDescriptorProto proto.InternalMessageInfo - -func (m *FieldDescriptorProto) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" -} - -func (m *FieldDescriptorProto) GetNumber() int32 { - if m != nil && m.Number != nil { - return *m.Number - } - return 0 -} - -func (m *FieldDescriptorProto) GetLabel() FieldDescriptorProto_Label { - if m != nil && m.Label != nil { - return *m.Label - } - return FieldDescriptorProto_LABEL_OPTIONAL -} - -func (m *FieldDescriptorProto) GetType() FieldDescriptorProto_Type { - if m != nil && m.Type != nil { - return *m.Type - } - return FieldDescriptorProto_TYPE_DOUBLE -} - -func (m *FieldDescriptorProto) GetTypeName() string { - if m != nil && m.TypeName != nil { - return *m.TypeName - } - return "" -} - -func (m *FieldDescriptorProto) GetExtendee() string { - if m != nil && m.Extendee != nil { - return *m.Extendee - } - return "" -} - -func (m *FieldDescriptorProto) GetDefaultValue() string { - if m != nil && m.DefaultValue != nil { - return *m.DefaultValue - } - return "" -} - -func (m *FieldDescriptorProto) GetOneofIndex() int32 { - if m != nil && m.OneofIndex != nil { - return *m.OneofIndex - } - return 0 -} - -func (m *FieldDescriptorProto) GetJsonName() string { - if m != nil && m.JsonName != nil { - return *m.JsonName - } - return "" -} - -func (m *FieldDescriptorProto) GetOptions() *FieldOptions { - if m != nil { - return m.Options - } - return nil -} - -// Describes a oneof. -type OneofDescriptorProto struct { - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - Options *OneofOptions `protobuf:"bytes,2,opt,name=options" json:"options,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *OneofDescriptorProto) Reset() { *m = OneofDescriptorProto{} } -func (m *OneofDescriptorProto) String() string { return proto.CompactTextString(m) } -func (*OneofDescriptorProto) ProtoMessage() {} -func (*OneofDescriptorProto) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{5} -} -func (m *OneofDescriptorProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_OneofDescriptorProto.Unmarshal(m, b) -} -func (m *OneofDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_OneofDescriptorProto.Marshal(b, m, deterministic) -} -func (dst *OneofDescriptorProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_OneofDescriptorProto.Merge(dst, src) -} -func (m *OneofDescriptorProto) XXX_Size() int { - return xxx_messageInfo_OneofDescriptorProto.Size(m) -} -func (m *OneofDescriptorProto) XXX_DiscardUnknown() { - xxx_messageInfo_OneofDescriptorProto.DiscardUnknown(m) -} - -var xxx_messageInfo_OneofDescriptorProto proto.InternalMessageInfo - -func (m *OneofDescriptorProto) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" -} - -func (m *OneofDescriptorProto) GetOptions() *OneofOptions { - if m != nil { - return m.Options - } - return nil -} - -// Describes an enum type. -type EnumDescriptorProto struct { - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - Value []*EnumValueDescriptorProto `protobuf:"bytes,2,rep,name=value" json:"value,omitempty"` - Options *EnumOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` - // Range of reserved numeric values. Reserved numeric values may not be used - // by enum values in the same enum declaration. Reserved ranges may not - // overlap. - ReservedRange []*EnumDescriptorProto_EnumReservedRange `protobuf:"bytes,4,rep,name=reserved_range,json=reservedRange" json:"reserved_range,omitempty"` - // Reserved enum value names, which may not be reused. A given name may only - // be reserved once. - ReservedName []string `protobuf:"bytes,5,rep,name=reserved_name,json=reservedName" json:"reserved_name,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *EnumDescriptorProto) Reset() { *m = EnumDescriptorProto{} } -func (m *EnumDescriptorProto) String() string { return proto.CompactTextString(m) } -func (*EnumDescriptorProto) ProtoMessage() {} -func (*EnumDescriptorProto) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{6} -} -func (m *EnumDescriptorProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_EnumDescriptorProto.Unmarshal(m, b) -} -func (m *EnumDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_EnumDescriptorProto.Marshal(b, m, deterministic) -} -func (dst *EnumDescriptorProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_EnumDescriptorProto.Merge(dst, src) -} -func (m *EnumDescriptorProto) XXX_Size() int { - return xxx_messageInfo_EnumDescriptorProto.Size(m) -} -func (m *EnumDescriptorProto) XXX_DiscardUnknown() { - xxx_messageInfo_EnumDescriptorProto.DiscardUnknown(m) -} - -var xxx_messageInfo_EnumDescriptorProto proto.InternalMessageInfo - -func (m *EnumDescriptorProto) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" -} - -func (m *EnumDescriptorProto) GetValue() []*EnumValueDescriptorProto { - if m != nil { - return m.Value - } - return nil -} - -func (m *EnumDescriptorProto) GetOptions() *EnumOptions { - if m != nil { - return m.Options - } - return nil -} - -func (m *EnumDescriptorProto) GetReservedRange() []*EnumDescriptorProto_EnumReservedRange { - if m != nil { - return m.ReservedRange - } - return nil -} - -func (m *EnumDescriptorProto) GetReservedName() []string { - if m != nil { - return m.ReservedName - } - return nil -} - -// Range of reserved numeric values. Reserved values may not be used by -// entries in the same enum. Reserved ranges may not overlap. -// -// Note that this is distinct from DescriptorProto.ReservedRange in that it -// is inclusive such that it can appropriately represent the entire int32 -// domain. -type EnumDescriptorProto_EnumReservedRange struct { - Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` - End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *EnumDescriptorProto_EnumReservedRange) Reset() { *m = EnumDescriptorProto_EnumReservedRange{} } -func (m *EnumDescriptorProto_EnumReservedRange) String() string { return proto.CompactTextString(m) } -func (*EnumDescriptorProto_EnumReservedRange) ProtoMessage() {} -func (*EnumDescriptorProto_EnumReservedRange) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{6, 0} -} -func (m *EnumDescriptorProto_EnumReservedRange) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Unmarshal(m, b) -} -func (m *EnumDescriptorProto_EnumReservedRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Marshal(b, m, deterministic) -} -func (dst *EnumDescriptorProto_EnumReservedRange) XXX_Merge(src proto.Message) { - xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Merge(dst, src) -} -func (m *EnumDescriptorProto_EnumReservedRange) XXX_Size() int { - return xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Size(m) -} -func (m *EnumDescriptorProto_EnumReservedRange) XXX_DiscardUnknown() { - xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.DiscardUnknown(m) -} - -var xxx_messageInfo_EnumDescriptorProto_EnumReservedRange proto.InternalMessageInfo - -func (m *EnumDescriptorProto_EnumReservedRange) GetStart() int32 { - if m != nil && m.Start != nil { - return *m.Start - } - return 0 -} - -func (m *EnumDescriptorProto_EnumReservedRange) GetEnd() int32 { - if m != nil && m.End != nil { - return *m.End - } - return 0 -} - -// Describes a value within an enum. -type EnumValueDescriptorProto struct { - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - Number *int32 `protobuf:"varint,2,opt,name=number" json:"number,omitempty"` - Options *EnumValueOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *EnumValueDescriptorProto) Reset() { *m = EnumValueDescriptorProto{} } -func (m *EnumValueDescriptorProto) String() string { return proto.CompactTextString(m) } -func (*EnumValueDescriptorProto) ProtoMessage() {} -func (*EnumValueDescriptorProto) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{7} -} -func (m *EnumValueDescriptorProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_EnumValueDescriptorProto.Unmarshal(m, b) -} -func (m *EnumValueDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_EnumValueDescriptorProto.Marshal(b, m, deterministic) -} -func (dst *EnumValueDescriptorProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_EnumValueDescriptorProto.Merge(dst, src) -} -func (m *EnumValueDescriptorProto) XXX_Size() int { - return xxx_messageInfo_EnumValueDescriptorProto.Size(m) -} -func (m *EnumValueDescriptorProto) XXX_DiscardUnknown() { - xxx_messageInfo_EnumValueDescriptorProto.DiscardUnknown(m) -} - -var xxx_messageInfo_EnumValueDescriptorProto proto.InternalMessageInfo - -func (m *EnumValueDescriptorProto) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" -} - -func (m *EnumValueDescriptorProto) GetNumber() int32 { - if m != nil && m.Number != nil { - return *m.Number - } - return 0 -} - -func (m *EnumValueDescriptorProto) GetOptions() *EnumValueOptions { - if m != nil { - return m.Options - } - return nil -} - -// Describes a service. -type ServiceDescriptorProto struct { - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - Method []*MethodDescriptorProto `protobuf:"bytes,2,rep,name=method" json:"method,omitempty"` - Options *ServiceOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ServiceDescriptorProto) Reset() { *m = ServiceDescriptorProto{} } -func (m *ServiceDescriptorProto) String() string { return proto.CompactTextString(m) } -func (*ServiceDescriptorProto) ProtoMessage() {} -func (*ServiceDescriptorProto) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{8} -} -func (m *ServiceDescriptorProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ServiceDescriptorProto.Unmarshal(m, b) -} -func (m *ServiceDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ServiceDescriptorProto.Marshal(b, m, deterministic) -} -func (dst *ServiceDescriptorProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_ServiceDescriptorProto.Merge(dst, src) -} -func (m *ServiceDescriptorProto) XXX_Size() int { - return xxx_messageInfo_ServiceDescriptorProto.Size(m) -} -func (m *ServiceDescriptorProto) XXX_DiscardUnknown() { - xxx_messageInfo_ServiceDescriptorProto.DiscardUnknown(m) -} - -var xxx_messageInfo_ServiceDescriptorProto proto.InternalMessageInfo - -func (m *ServiceDescriptorProto) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" -} - -func (m *ServiceDescriptorProto) GetMethod() []*MethodDescriptorProto { - if m != nil { - return m.Method - } - return nil -} - -func (m *ServiceDescriptorProto) GetOptions() *ServiceOptions { - if m != nil { - return m.Options - } - return nil -} - -// Describes a method of a service. -type MethodDescriptorProto struct { - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - // Input and output type names. These are resolved in the same way as - // FieldDescriptorProto.type_name, but must refer to a message type. - InputType *string `protobuf:"bytes,2,opt,name=input_type,json=inputType" json:"input_type,omitempty"` - OutputType *string `protobuf:"bytes,3,opt,name=output_type,json=outputType" json:"output_type,omitempty"` - Options *MethodOptions `protobuf:"bytes,4,opt,name=options" json:"options,omitempty"` - // Identifies if client streams multiple client messages - ClientStreaming *bool `protobuf:"varint,5,opt,name=client_streaming,json=clientStreaming,def=0" json:"client_streaming,omitempty"` - // Identifies if server streams multiple server messages - ServerStreaming *bool `protobuf:"varint,6,opt,name=server_streaming,json=serverStreaming,def=0" json:"server_streaming,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MethodDescriptorProto) Reset() { *m = MethodDescriptorProto{} } -func (m *MethodDescriptorProto) String() string { return proto.CompactTextString(m) } -func (*MethodDescriptorProto) ProtoMessage() {} -func (*MethodDescriptorProto) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{9} -} -func (m *MethodDescriptorProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MethodDescriptorProto.Unmarshal(m, b) -} -func (m *MethodDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MethodDescriptorProto.Marshal(b, m, deterministic) -} -func (dst *MethodDescriptorProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_MethodDescriptorProto.Merge(dst, src) -} -func (m *MethodDescriptorProto) XXX_Size() int { - return xxx_messageInfo_MethodDescriptorProto.Size(m) -} -func (m *MethodDescriptorProto) XXX_DiscardUnknown() { - xxx_messageInfo_MethodDescriptorProto.DiscardUnknown(m) -} - -var xxx_messageInfo_MethodDescriptorProto proto.InternalMessageInfo - -const Default_MethodDescriptorProto_ClientStreaming bool = false -const Default_MethodDescriptorProto_ServerStreaming bool = false - -func (m *MethodDescriptorProto) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" -} - -func (m *MethodDescriptorProto) GetInputType() string { - if m != nil && m.InputType != nil { - return *m.InputType - } - return "" -} - -func (m *MethodDescriptorProto) GetOutputType() string { - if m != nil && m.OutputType != nil { - return *m.OutputType - } - return "" -} - -func (m *MethodDescriptorProto) GetOptions() *MethodOptions { - if m != nil { - return m.Options - } - return nil -} - -func (m *MethodDescriptorProto) GetClientStreaming() bool { - if m != nil && m.ClientStreaming != nil { - return *m.ClientStreaming - } - return Default_MethodDescriptorProto_ClientStreaming -} - -func (m *MethodDescriptorProto) GetServerStreaming() bool { - if m != nil && m.ServerStreaming != nil { - return *m.ServerStreaming - } - return Default_MethodDescriptorProto_ServerStreaming -} - -type FileOptions struct { - // Sets the Java package where classes generated from this .proto will be - // placed. By default, the proto package is used, but this is often - // inappropriate because proto packages do not normally start with backwards - // domain names. - JavaPackage *string `protobuf:"bytes,1,opt,name=java_package,json=javaPackage" json:"java_package,omitempty"` - // If set, all the classes from the .proto file are wrapped in a single - // outer class with the given name. This applies to both Proto1 - // (equivalent to the old "--one_java_file" option) and Proto2 (where - // a .proto always translates to a single class, but you may want to - // explicitly choose the class name). - JavaOuterClassname *string `protobuf:"bytes,8,opt,name=java_outer_classname,json=javaOuterClassname" json:"java_outer_classname,omitempty"` - // If set true, then the Java code generator will generate a separate .java - // file for each top-level message, enum, and service defined in the .proto - // file. Thus, these types will *not* be nested inside the outer class - // named by java_outer_classname. However, the outer class will still be - // generated to contain the file's getDescriptor() method as well as any - // top-level extensions defined in the file. - JavaMultipleFiles *bool `protobuf:"varint,10,opt,name=java_multiple_files,json=javaMultipleFiles,def=0" json:"java_multiple_files,omitempty"` - // This option does nothing. - JavaGenerateEqualsAndHash *bool `protobuf:"varint,20,opt,name=java_generate_equals_and_hash,json=javaGenerateEqualsAndHash" json:"java_generate_equals_and_hash,omitempty"` // Deprecated: Do not use. - // If set true, then the Java2 code generator will generate code that - // throws an exception whenever an attempt is made to assign a non-UTF-8 - // byte sequence to a string field. - // Message reflection will do the same. - // However, an extension field still accepts non-UTF-8 byte sequences. - // This option has no effect on when used with the lite runtime. - JavaStringCheckUtf8 *bool `protobuf:"varint,27,opt,name=java_string_check_utf8,json=javaStringCheckUtf8,def=0" json:"java_string_check_utf8,omitempty"` - OptimizeFor *FileOptions_OptimizeMode `protobuf:"varint,9,opt,name=optimize_for,json=optimizeFor,enum=google.protobuf.FileOptions_OptimizeMode,def=1" json:"optimize_for,omitempty"` - // Sets the Go package where structs generated from this .proto will be - // placed. If omitted, the Go package will be derived from the following: - // - The basename of the package import path, if provided. - // - Otherwise, the package statement in the .proto file, if present. - // - Otherwise, the basename of the .proto file, without extension. - GoPackage *string `protobuf:"bytes,11,opt,name=go_package,json=goPackage" json:"go_package,omitempty"` - // Should generic services be generated in each language? "Generic" services - // are not specific to any particular RPC system. They are generated by the - // main code generators in each language (without additional plugins). - // Generic services were the only kind of service generation supported by - // early versions of google.protobuf. - // - // Generic services are now considered deprecated in favor of using plugins - // that generate code specific to your particular RPC system. Therefore, - // these default to false. Old code which depends on generic services should - // explicitly set them to true. - CcGenericServices *bool `protobuf:"varint,16,opt,name=cc_generic_services,json=ccGenericServices,def=0" json:"cc_generic_services,omitempty"` - JavaGenericServices *bool `protobuf:"varint,17,opt,name=java_generic_services,json=javaGenericServices,def=0" json:"java_generic_services,omitempty"` - PyGenericServices *bool `protobuf:"varint,18,opt,name=py_generic_services,json=pyGenericServices,def=0" json:"py_generic_services,omitempty"` - PhpGenericServices *bool `protobuf:"varint,42,opt,name=php_generic_services,json=phpGenericServices,def=0" json:"php_generic_services,omitempty"` - // Is this file deprecated? - // Depending on the target platform, this can emit Deprecated annotations - // for everything in the file, or it will be completely ignored; in the very - // least, this is a formalization for deprecating files. - Deprecated *bool `protobuf:"varint,23,opt,name=deprecated,def=0" json:"deprecated,omitempty"` - // Enables the use of arenas for the proto messages in this file. This applies - // only to generated classes for C++. - CcEnableArenas *bool `protobuf:"varint,31,opt,name=cc_enable_arenas,json=ccEnableArenas,def=0" json:"cc_enable_arenas,omitempty"` - // Sets the objective c class prefix which is prepended to all objective c - // generated classes from this .proto. There is no default. - ObjcClassPrefix *string `protobuf:"bytes,36,opt,name=objc_class_prefix,json=objcClassPrefix" json:"objc_class_prefix,omitempty"` - // Namespace for generated classes; defaults to the package. - CsharpNamespace *string `protobuf:"bytes,37,opt,name=csharp_namespace,json=csharpNamespace" json:"csharp_namespace,omitempty"` - // By default Swift generators will take the proto package and CamelCase it - // replacing '.' with underscore and use that to prefix the types/symbols - // defined. When this options is provided, they will use this value instead - // to prefix the types/symbols defined. - SwiftPrefix *string `protobuf:"bytes,39,opt,name=swift_prefix,json=swiftPrefix" json:"swift_prefix,omitempty"` - // Sets the php class prefix which is prepended to all php generated classes - // from this .proto. Default is empty. - PhpClassPrefix *string `protobuf:"bytes,40,opt,name=php_class_prefix,json=phpClassPrefix" json:"php_class_prefix,omitempty"` - // Use this option to change the namespace of php generated classes. Default - // is empty. When this option is empty, the package name will be used for - // determining the namespace. - PhpNamespace *string `protobuf:"bytes,41,opt,name=php_namespace,json=phpNamespace" json:"php_namespace,omitempty"` - // The parser stores options it doesn't recognize here. - // See the documentation for the "Options" section above. - UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - proto.XXX_InternalExtensions `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FileOptions) Reset() { *m = FileOptions{} } -func (m *FileOptions) String() string { return proto.CompactTextString(m) } -func (*FileOptions) ProtoMessage() {} -func (*FileOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{10} -} - -var extRange_FileOptions = []proto.ExtensionRange{ - {Start: 1000, End: 536870911}, -} - -func (*FileOptions) ExtensionRangeArray() []proto.ExtensionRange { - return extRange_FileOptions -} -func (m *FileOptions) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FileOptions.Unmarshal(m, b) -} -func (m *FileOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FileOptions.Marshal(b, m, deterministic) -} -func (dst *FileOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_FileOptions.Merge(dst, src) -} -func (m *FileOptions) XXX_Size() int { - return xxx_messageInfo_FileOptions.Size(m) -} -func (m *FileOptions) XXX_DiscardUnknown() { - xxx_messageInfo_FileOptions.DiscardUnknown(m) -} - -var xxx_messageInfo_FileOptions proto.InternalMessageInfo - -const Default_FileOptions_JavaMultipleFiles bool = false -const Default_FileOptions_JavaStringCheckUtf8 bool = false -const Default_FileOptions_OptimizeFor FileOptions_OptimizeMode = FileOptions_SPEED -const Default_FileOptions_CcGenericServices bool = false -const Default_FileOptions_JavaGenericServices bool = false -const Default_FileOptions_PyGenericServices bool = false -const Default_FileOptions_PhpGenericServices bool = false -const Default_FileOptions_Deprecated bool = false -const Default_FileOptions_CcEnableArenas bool = false - -func (m *FileOptions) GetJavaPackage() string { - if m != nil && m.JavaPackage != nil { - return *m.JavaPackage - } - return "" -} - -func (m *FileOptions) GetJavaOuterClassname() string { - if m != nil && m.JavaOuterClassname != nil { - return *m.JavaOuterClassname - } - return "" -} - -func (m *FileOptions) GetJavaMultipleFiles() bool { - if m != nil && m.JavaMultipleFiles != nil { - return *m.JavaMultipleFiles - } - return Default_FileOptions_JavaMultipleFiles -} - -// Deprecated: Do not use. -func (m *FileOptions) GetJavaGenerateEqualsAndHash() bool { - if m != nil && m.JavaGenerateEqualsAndHash != nil { - return *m.JavaGenerateEqualsAndHash - } - return false -} - -func (m *FileOptions) GetJavaStringCheckUtf8() bool { - if m != nil && m.JavaStringCheckUtf8 != nil { - return *m.JavaStringCheckUtf8 - } - return Default_FileOptions_JavaStringCheckUtf8 -} - -func (m *FileOptions) GetOptimizeFor() FileOptions_OptimizeMode { - if m != nil && m.OptimizeFor != nil { - return *m.OptimizeFor - } - return Default_FileOptions_OptimizeFor -} - -func (m *FileOptions) GetGoPackage() string { - if m != nil && m.GoPackage != nil { - return *m.GoPackage - } - return "" -} - -func (m *FileOptions) GetCcGenericServices() bool { - if m != nil && m.CcGenericServices != nil { - return *m.CcGenericServices - } - return Default_FileOptions_CcGenericServices -} - -func (m *FileOptions) GetJavaGenericServices() bool { - if m != nil && m.JavaGenericServices != nil { - return *m.JavaGenericServices - } - return Default_FileOptions_JavaGenericServices -} - -func (m *FileOptions) GetPyGenericServices() bool { - if m != nil && m.PyGenericServices != nil { - return *m.PyGenericServices - } - return Default_FileOptions_PyGenericServices -} - -func (m *FileOptions) GetPhpGenericServices() bool { - if m != nil && m.PhpGenericServices != nil { - return *m.PhpGenericServices - } - return Default_FileOptions_PhpGenericServices -} - -func (m *FileOptions) GetDeprecated() bool { - if m != nil && m.Deprecated != nil { - return *m.Deprecated - } - return Default_FileOptions_Deprecated -} - -func (m *FileOptions) GetCcEnableArenas() bool { - if m != nil && m.CcEnableArenas != nil { - return *m.CcEnableArenas - } - return Default_FileOptions_CcEnableArenas -} - -func (m *FileOptions) GetObjcClassPrefix() string { - if m != nil && m.ObjcClassPrefix != nil { - return *m.ObjcClassPrefix - } - return "" -} - -func (m *FileOptions) GetCsharpNamespace() string { - if m != nil && m.CsharpNamespace != nil { - return *m.CsharpNamespace - } - return "" -} - -func (m *FileOptions) GetSwiftPrefix() string { - if m != nil && m.SwiftPrefix != nil { - return *m.SwiftPrefix - } - return "" -} - -func (m *FileOptions) GetPhpClassPrefix() string { - if m != nil && m.PhpClassPrefix != nil { - return *m.PhpClassPrefix - } - return "" -} - -func (m *FileOptions) GetPhpNamespace() string { - if m != nil && m.PhpNamespace != nil { - return *m.PhpNamespace - } - return "" -} - -func (m *FileOptions) GetUninterpretedOption() []*UninterpretedOption { - if m != nil { - return m.UninterpretedOption - } - return nil -} - -type MessageOptions struct { - // Set true to use the old proto1 MessageSet wire format for extensions. - // This is provided for backwards-compatibility with the MessageSet wire - // format. You should not use this for any other reason: It's less - // efficient, has fewer features, and is more complicated. - // - // The message must be defined exactly as follows: - // message Foo { - // option message_set_wire_format = true; - // extensions 4 to max; - // } - // Note that the message cannot have any defined fields; MessageSets only - // have extensions. - // - // All extensions of your type must be singular messages; e.g. they cannot - // be int32s, enums, or repeated messages. - // - // Because this is an option, the above two restrictions are not enforced by - // the protocol compiler. - MessageSetWireFormat *bool `protobuf:"varint,1,opt,name=message_set_wire_format,json=messageSetWireFormat,def=0" json:"message_set_wire_format,omitempty"` - // Disables the generation of the standard "descriptor()" accessor, which can - // conflict with a field of the same name. This is meant to make migration - // from proto1 easier; new code should avoid fields named "descriptor". - NoStandardDescriptorAccessor *bool `protobuf:"varint,2,opt,name=no_standard_descriptor_accessor,json=noStandardDescriptorAccessor,def=0" json:"no_standard_descriptor_accessor,omitempty"` - // Is this message deprecated? - // Depending on the target platform, this can emit Deprecated annotations - // for the message, or it will be completely ignored; in the very least, - // this is a formalization for deprecating messages. - Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"` - // Whether the message is an automatically generated map entry type for the - // maps field. - // - // For maps fields: - // map map_field = 1; - // The parsed descriptor looks like: - // message MapFieldEntry { - // option map_entry = true; - // optional KeyType key = 1; - // optional ValueType value = 2; - // } - // repeated MapFieldEntry map_field = 1; - // - // Implementations may choose not to generate the map_entry=true message, but - // use a native map in the target language to hold the keys and values. - // The reflection APIs in such implementions still need to work as - // if the field is a repeated message field. - // - // NOTE: Do not set the option in .proto files. Always use the maps syntax - // instead. The option should only be implicitly set by the proto compiler - // parser. - MapEntry *bool `protobuf:"varint,7,opt,name=map_entry,json=mapEntry" json:"map_entry,omitempty"` - // The parser stores options it doesn't recognize here. See above. - UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - proto.XXX_InternalExtensions `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MessageOptions) Reset() { *m = MessageOptions{} } -func (m *MessageOptions) String() string { return proto.CompactTextString(m) } -func (*MessageOptions) ProtoMessage() {} -func (*MessageOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{11} -} - -var extRange_MessageOptions = []proto.ExtensionRange{ - {Start: 1000, End: 536870911}, -} - -func (*MessageOptions) ExtensionRangeArray() []proto.ExtensionRange { - return extRange_MessageOptions -} -func (m *MessageOptions) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MessageOptions.Unmarshal(m, b) -} -func (m *MessageOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MessageOptions.Marshal(b, m, deterministic) -} -func (dst *MessageOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_MessageOptions.Merge(dst, src) -} -func (m *MessageOptions) XXX_Size() int { - return xxx_messageInfo_MessageOptions.Size(m) -} -func (m *MessageOptions) XXX_DiscardUnknown() { - xxx_messageInfo_MessageOptions.DiscardUnknown(m) -} - -var xxx_messageInfo_MessageOptions proto.InternalMessageInfo - -const Default_MessageOptions_MessageSetWireFormat bool = false -const Default_MessageOptions_NoStandardDescriptorAccessor bool = false -const Default_MessageOptions_Deprecated bool = false - -func (m *MessageOptions) GetMessageSetWireFormat() bool { - if m != nil && m.MessageSetWireFormat != nil { - return *m.MessageSetWireFormat - } - return Default_MessageOptions_MessageSetWireFormat -} - -func (m *MessageOptions) GetNoStandardDescriptorAccessor() bool { - if m != nil && m.NoStandardDescriptorAccessor != nil { - return *m.NoStandardDescriptorAccessor - } - return Default_MessageOptions_NoStandardDescriptorAccessor -} - -func (m *MessageOptions) GetDeprecated() bool { - if m != nil && m.Deprecated != nil { - return *m.Deprecated - } - return Default_MessageOptions_Deprecated -} - -func (m *MessageOptions) GetMapEntry() bool { - if m != nil && m.MapEntry != nil { - return *m.MapEntry - } - return false -} - -func (m *MessageOptions) GetUninterpretedOption() []*UninterpretedOption { - if m != nil { - return m.UninterpretedOption - } - return nil -} - -type FieldOptions struct { - // The ctype option instructs the C++ code generator to use a different - // representation of the field than it normally would. See the specific - // options below. This option is not yet implemented in the open source - // release -- sorry, we'll try to include it in a future version! - Ctype *FieldOptions_CType `protobuf:"varint,1,opt,name=ctype,enum=google.protobuf.FieldOptions_CType,def=0" json:"ctype,omitempty"` - // The packed option can be enabled for repeated primitive fields to enable - // a more efficient representation on the wire. Rather than repeatedly - // writing the tag and type for each element, the entire array is encoded as - // a single length-delimited blob. In proto3, only explicit setting it to - // false will avoid using packed encoding. - Packed *bool `protobuf:"varint,2,opt,name=packed" json:"packed,omitempty"` - // The jstype option determines the JavaScript type used for values of the - // field. The option is permitted only for 64 bit integral and fixed types - // (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING - // is represented as JavaScript string, which avoids loss of precision that - // can happen when a large value is converted to a floating point JavaScript. - // Specifying JS_NUMBER for the jstype causes the generated JavaScript code to - // use the JavaScript "number" type. The behavior of the default option - // JS_NORMAL is implementation dependent. - // - // This option is an enum to permit additional types to be added, e.g. - // goog.math.Integer. - Jstype *FieldOptions_JSType `protobuf:"varint,6,opt,name=jstype,enum=google.protobuf.FieldOptions_JSType,def=0" json:"jstype,omitempty"` - // Should this field be parsed lazily? Lazy applies only to message-type - // fields. It means that when the outer message is initially parsed, the - // inner message's contents will not be parsed but instead stored in encoded - // form. The inner message will actually be parsed when it is first accessed. - // - // This is only a hint. Implementations are free to choose whether to use - // eager or lazy parsing regardless of the value of this option. However, - // setting this option true suggests that the protocol author believes that - // using lazy parsing on this field is worth the additional bookkeeping - // overhead typically needed to implement it. - // - // This option does not affect the public interface of any generated code; - // all method signatures remain the same. Furthermore, thread-safety of the - // interface is not affected by this option; const methods remain safe to - // call from multiple threads concurrently, while non-const methods continue - // to require exclusive access. - // - // - // Note that implementations may choose not to check required fields within - // a lazy sub-message. That is, calling IsInitialized() on the outer message - // may return true even if the inner message has missing required fields. - // This is necessary because otherwise the inner message would have to be - // parsed in order to perform the check, defeating the purpose of lazy - // parsing. An implementation which chooses not to check required fields - // must be consistent about it. That is, for any particular sub-message, the - // implementation must either *always* check its required fields, or *never* - // check its required fields, regardless of whether or not the message has - // been parsed. - Lazy *bool `protobuf:"varint,5,opt,name=lazy,def=0" json:"lazy,omitempty"` - // Is this field deprecated? - // Depending on the target platform, this can emit Deprecated annotations - // for accessors, or it will be completely ignored; in the very least, this - // is a formalization for deprecating fields. - Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"` - // For Google-internal migration only. Do not use. - Weak *bool `protobuf:"varint,10,opt,name=weak,def=0" json:"weak,omitempty"` - // The parser stores options it doesn't recognize here. See above. - UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - proto.XXX_InternalExtensions `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FieldOptions) Reset() { *m = FieldOptions{} } -func (m *FieldOptions) String() string { return proto.CompactTextString(m) } -func (*FieldOptions) ProtoMessage() {} -func (*FieldOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{12} -} - -var extRange_FieldOptions = []proto.ExtensionRange{ - {Start: 1000, End: 536870911}, -} - -func (*FieldOptions) ExtensionRangeArray() []proto.ExtensionRange { - return extRange_FieldOptions -} -func (m *FieldOptions) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FieldOptions.Unmarshal(m, b) -} -func (m *FieldOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FieldOptions.Marshal(b, m, deterministic) -} -func (dst *FieldOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_FieldOptions.Merge(dst, src) -} -func (m *FieldOptions) XXX_Size() int { - return xxx_messageInfo_FieldOptions.Size(m) -} -func (m *FieldOptions) XXX_DiscardUnknown() { - xxx_messageInfo_FieldOptions.DiscardUnknown(m) -} - -var xxx_messageInfo_FieldOptions proto.InternalMessageInfo - -const Default_FieldOptions_Ctype FieldOptions_CType = FieldOptions_STRING -const Default_FieldOptions_Jstype FieldOptions_JSType = FieldOptions_JS_NORMAL -const Default_FieldOptions_Lazy bool = false -const Default_FieldOptions_Deprecated bool = false -const Default_FieldOptions_Weak bool = false - -func (m *FieldOptions) GetCtype() FieldOptions_CType { - if m != nil && m.Ctype != nil { - return *m.Ctype - } - return Default_FieldOptions_Ctype -} - -func (m *FieldOptions) GetPacked() bool { - if m != nil && m.Packed != nil { - return *m.Packed - } - return false -} - -func (m *FieldOptions) GetJstype() FieldOptions_JSType { - if m != nil && m.Jstype != nil { - return *m.Jstype - } - return Default_FieldOptions_Jstype -} - -func (m *FieldOptions) GetLazy() bool { - if m != nil && m.Lazy != nil { - return *m.Lazy - } - return Default_FieldOptions_Lazy -} - -func (m *FieldOptions) GetDeprecated() bool { - if m != nil && m.Deprecated != nil { - return *m.Deprecated - } - return Default_FieldOptions_Deprecated -} - -func (m *FieldOptions) GetWeak() bool { - if m != nil && m.Weak != nil { - return *m.Weak - } - return Default_FieldOptions_Weak -} - -func (m *FieldOptions) GetUninterpretedOption() []*UninterpretedOption { - if m != nil { - return m.UninterpretedOption - } - return nil -} - -type OneofOptions struct { - // The parser stores options it doesn't recognize here. See above. - UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - proto.XXX_InternalExtensions `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *OneofOptions) Reset() { *m = OneofOptions{} } -func (m *OneofOptions) String() string { return proto.CompactTextString(m) } -func (*OneofOptions) ProtoMessage() {} -func (*OneofOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{13} -} - -var extRange_OneofOptions = []proto.ExtensionRange{ - {Start: 1000, End: 536870911}, -} - -func (*OneofOptions) ExtensionRangeArray() []proto.ExtensionRange { - return extRange_OneofOptions -} -func (m *OneofOptions) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_OneofOptions.Unmarshal(m, b) -} -func (m *OneofOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_OneofOptions.Marshal(b, m, deterministic) -} -func (dst *OneofOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_OneofOptions.Merge(dst, src) -} -func (m *OneofOptions) XXX_Size() int { - return xxx_messageInfo_OneofOptions.Size(m) -} -func (m *OneofOptions) XXX_DiscardUnknown() { - xxx_messageInfo_OneofOptions.DiscardUnknown(m) -} - -var xxx_messageInfo_OneofOptions proto.InternalMessageInfo - -func (m *OneofOptions) GetUninterpretedOption() []*UninterpretedOption { - if m != nil { - return m.UninterpretedOption - } - return nil -} - -type EnumOptions struct { - // Set this option to true to allow mapping different tag names to the same - // value. - AllowAlias *bool `protobuf:"varint,2,opt,name=allow_alias,json=allowAlias" json:"allow_alias,omitempty"` - // Is this enum deprecated? - // Depending on the target platform, this can emit Deprecated annotations - // for the enum, or it will be completely ignored; in the very least, this - // is a formalization for deprecating enums. - Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"` - // The parser stores options it doesn't recognize here. See above. - UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - proto.XXX_InternalExtensions `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *EnumOptions) Reset() { *m = EnumOptions{} } -func (m *EnumOptions) String() string { return proto.CompactTextString(m) } -func (*EnumOptions) ProtoMessage() {} -func (*EnumOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{14} -} - -var extRange_EnumOptions = []proto.ExtensionRange{ - {Start: 1000, End: 536870911}, -} - -func (*EnumOptions) ExtensionRangeArray() []proto.ExtensionRange { - return extRange_EnumOptions -} -func (m *EnumOptions) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_EnumOptions.Unmarshal(m, b) -} -func (m *EnumOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_EnumOptions.Marshal(b, m, deterministic) -} -func (dst *EnumOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_EnumOptions.Merge(dst, src) -} -func (m *EnumOptions) XXX_Size() int { - return xxx_messageInfo_EnumOptions.Size(m) -} -func (m *EnumOptions) XXX_DiscardUnknown() { - xxx_messageInfo_EnumOptions.DiscardUnknown(m) -} - -var xxx_messageInfo_EnumOptions proto.InternalMessageInfo - -const Default_EnumOptions_Deprecated bool = false - -func (m *EnumOptions) GetAllowAlias() bool { - if m != nil && m.AllowAlias != nil { - return *m.AllowAlias - } - return false -} - -func (m *EnumOptions) GetDeprecated() bool { - if m != nil && m.Deprecated != nil { - return *m.Deprecated - } - return Default_EnumOptions_Deprecated -} - -func (m *EnumOptions) GetUninterpretedOption() []*UninterpretedOption { - if m != nil { - return m.UninterpretedOption - } - return nil -} - -type EnumValueOptions struct { - // Is this enum value deprecated? - // Depending on the target platform, this can emit Deprecated annotations - // for the enum value, or it will be completely ignored; in the very least, - // this is a formalization for deprecating enum values. - Deprecated *bool `protobuf:"varint,1,opt,name=deprecated,def=0" json:"deprecated,omitempty"` - // The parser stores options it doesn't recognize here. See above. - UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - proto.XXX_InternalExtensions `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *EnumValueOptions) Reset() { *m = EnumValueOptions{} } -func (m *EnumValueOptions) String() string { return proto.CompactTextString(m) } -func (*EnumValueOptions) ProtoMessage() {} -func (*EnumValueOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{15} -} - -var extRange_EnumValueOptions = []proto.ExtensionRange{ - {Start: 1000, End: 536870911}, -} - -func (*EnumValueOptions) ExtensionRangeArray() []proto.ExtensionRange { - return extRange_EnumValueOptions -} -func (m *EnumValueOptions) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_EnumValueOptions.Unmarshal(m, b) -} -func (m *EnumValueOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_EnumValueOptions.Marshal(b, m, deterministic) -} -func (dst *EnumValueOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_EnumValueOptions.Merge(dst, src) -} -func (m *EnumValueOptions) XXX_Size() int { - return xxx_messageInfo_EnumValueOptions.Size(m) -} -func (m *EnumValueOptions) XXX_DiscardUnknown() { - xxx_messageInfo_EnumValueOptions.DiscardUnknown(m) -} - -var xxx_messageInfo_EnumValueOptions proto.InternalMessageInfo - -const Default_EnumValueOptions_Deprecated bool = false - -func (m *EnumValueOptions) GetDeprecated() bool { - if m != nil && m.Deprecated != nil { - return *m.Deprecated - } - return Default_EnumValueOptions_Deprecated -} - -func (m *EnumValueOptions) GetUninterpretedOption() []*UninterpretedOption { - if m != nil { - return m.UninterpretedOption - } - return nil -} - -type ServiceOptions struct { - // Is this service deprecated? - // Depending on the target platform, this can emit Deprecated annotations - // for the service, or it will be completely ignored; in the very least, - // this is a formalization for deprecating services. - Deprecated *bool `protobuf:"varint,33,opt,name=deprecated,def=0" json:"deprecated,omitempty"` - // The parser stores options it doesn't recognize here. See above. - UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - proto.XXX_InternalExtensions `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ServiceOptions) Reset() { *m = ServiceOptions{} } -func (m *ServiceOptions) String() string { return proto.CompactTextString(m) } -func (*ServiceOptions) ProtoMessage() {} -func (*ServiceOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{16} -} - -var extRange_ServiceOptions = []proto.ExtensionRange{ - {Start: 1000, End: 536870911}, -} - -func (*ServiceOptions) ExtensionRangeArray() []proto.ExtensionRange { - return extRange_ServiceOptions -} -func (m *ServiceOptions) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ServiceOptions.Unmarshal(m, b) -} -func (m *ServiceOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ServiceOptions.Marshal(b, m, deterministic) -} -func (dst *ServiceOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_ServiceOptions.Merge(dst, src) -} -func (m *ServiceOptions) XXX_Size() int { - return xxx_messageInfo_ServiceOptions.Size(m) -} -func (m *ServiceOptions) XXX_DiscardUnknown() { - xxx_messageInfo_ServiceOptions.DiscardUnknown(m) -} - -var xxx_messageInfo_ServiceOptions proto.InternalMessageInfo - -const Default_ServiceOptions_Deprecated bool = false - -func (m *ServiceOptions) GetDeprecated() bool { - if m != nil && m.Deprecated != nil { - return *m.Deprecated - } - return Default_ServiceOptions_Deprecated -} - -func (m *ServiceOptions) GetUninterpretedOption() []*UninterpretedOption { - if m != nil { - return m.UninterpretedOption - } - return nil -} - -type MethodOptions struct { - // Is this method deprecated? - // Depending on the target platform, this can emit Deprecated annotations - // for the method, or it will be completely ignored; in the very least, - // this is a formalization for deprecating methods. - Deprecated *bool `protobuf:"varint,33,opt,name=deprecated,def=0" json:"deprecated,omitempty"` - IdempotencyLevel *MethodOptions_IdempotencyLevel `protobuf:"varint,34,opt,name=idempotency_level,json=idempotencyLevel,enum=google.protobuf.MethodOptions_IdempotencyLevel,def=0" json:"idempotency_level,omitempty"` - // The parser stores options it doesn't recognize here. See above. - UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - proto.XXX_InternalExtensions `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MethodOptions) Reset() { *m = MethodOptions{} } -func (m *MethodOptions) String() string { return proto.CompactTextString(m) } -func (*MethodOptions) ProtoMessage() {} -func (*MethodOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{17} -} - -var extRange_MethodOptions = []proto.ExtensionRange{ - {Start: 1000, End: 536870911}, -} - -func (*MethodOptions) ExtensionRangeArray() []proto.ExtensionRange { - return extRange_MethodOptions -} -func (m *MethodOptions) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MethodOptions.Unmarshal(m, b) -} -func (m *MethodOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MethodOptions.Marshal(b, m, deterministic) -} -func (dst *MethodOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_MethodOptions.Merge(dst, src) -} -func (m *MethodOptions) XXX_Size() int { - return xxx_messageInfo_MethodOptions.Size(m) -} -func (m *MethodOptions) XXX_DiscardUnknown() { - xxx_messageInfo_MethodOptions.DiscardUnknown(m) -} - -var xxx_messageInfo_MethodOptions proto.InternalMessageInfo - -const Default_MethodOptions_Deprecated bool = false -const Default_MethodOptions_IdempotencyLevel MethodOptions_IdempotencyLevel = MethodOptions_IDEMPOTENCY_UNKNOWN - -func (m *MethodOptions) GetDeprecated() bool { - if m != nil && m.Deprecated != nil { - return *m.Deprecated - } - return Default_MethodOptions_Deprecated -} - -func (m *MethodOptions) GetIdempotencyLevel() MethodOptions_IdempotencyLevel { - if m != nil && m.IdempotencyLevel != nil { - return *m.IdempotencyLevel - } - return Default_MethodOptions_IdempotencyLevel -} - -func (m *MethodOptions) GetUninterpretedOption() []*UninterpretedOption { - if m != nil { - return m.UninterpretedOption - } - return nil -} - -// A message representing a option the parser does not recognize. This only -// appears in options protos created by the compiler::Parser class. -// DescriptorPool resolves these when building Descriptor objects. Therefore, -// options protos in descriptor objects (e.g. returned by Descriptor::options(), -// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions -// in them. -type UninterpretedOption struct { - Name []*UninterpretedOption_NamePart `protobuf:"bytes,2,rep,name=name" json:"name,omitempty"` - // The value of the uninterpreted option, in whatever type the tokenizer - // identified it as during parsing. Exactly one of these should be set. - IdentifierValue *string `protobuf:"bytes,3,opt,name=identifier_value,json=identifierValue" json:"identifier_value,omitempty"` - PositiveIntValue *uint64 `protobuf:"varint,4,opt,name=positive_int_value,json=positiveIntValue" json:"positive_int_value,omitempty"` - NegativeIntValue *int64 `protobuf:"varint,5,opt,name=negative_int_value,json=negativeIntValue" json:"negative_int_value,omitempty"` - DoubleValue *float64 `protobuf:"fixed64,6,opt,name=double_value,json=doubleValue" json:"double_value,omitempty"` - StringValue []byte `protobuf:"bytes,7,opt,name=string_value,json=stringValue" json:"string_value,omitempty"` - AggregateValue *string `protobuf:"bytes,8,opt,name=aggregate_value,json=aggregateValue" json:"aggregate_value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *UninterpretedOption) Reset() { *m = UninterpretedOption{} } -func (m *UninterpretedOption) String() string { return proto.CompactTextString(m) } -func (*UninterpretedOption) ProtoMessage() {} -func (*UninterpretedOption) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{18} -} -func (m *UninterpretedOption) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UninterpretedOption.Unmarshal(m, b) -} -func (m *UninterpretedOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UninterpretedOption.Marshal(b, m, deterministic) -} -func (dst *UninterpretedOption) XXX_Merge(src proto.Message) { - xxx_messageInfo_UninterpretedOption.Merge(dst, src) -} -func (m *UninterpretedOption) XXX_Size() int { - return xxx_messageInfo_UninterpretedOption.Size(m) -} -func (m *UninterpretedOption) XXX_DiscardUnknown() { - xxx_messageInfo_UninterpretedOption.DiscardUnknown(m) -} - -var xxx_messageInfo_UninterpretedOption proto.InternalMessageInfo - -func (m *UninterpretedOption) GetName() []*UninterpretedOption_NamePart { - if m != nil { - return m.Name - } - return nil -} - -func (m *UninterpretedOption) GetIdentifierValue() string { - if m != nil && m.IdentifierValue != nil { - return *m.IdentifierValue - } - return "" -} - -func (m *UninterpretedOption) GetPositiveIntValue() uint64 { - if m != nil && m.PositiveIntValue != nil { - return *m.PositiveIntValue - } - return 0 -} - -func (m *UninterpretedOption) GetNegativeIntValue() int64 { - if m != nil && m.NegativeIntValue != nil { - return *m.NegativeIntValue - } - return 0 -} - -func (m *UninterpretedOption) GetDoubleValue() float64 { - if m != nil && m.DoubleValue != nil { - return *m.DoubleValue - } - return 0 -} - -func (m *UninterpretedOption) GetStringValue() []byte { - if m != nil { - return m.StringValue - } - return nil -} - -func (m *UninterpretedOption) GetAggregateValue() string { - if m != nil && m.AggregateValue != nil { - return *m.AggregateValue - } - return "" -} - -// The name of the uninterpreted option. Each string represents a segment in -// a dot-separated name. is_extension is true iff a segment represents an -// extension (denoted with parentheses in options specs in .proto files). -// E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents -// "foo.(bar.baz).qux". -type UninterpretedOption_NamePart struct { - NamePart *string `protobuf:"bytes,1,req,name=name_part,json=namePart" json:"name_part,omitempty"` - IsExtension *bool `protobuf:"varint,2,req,name=is_extension,json=isExtension" json:"is_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *UninterpretedOption_NamePart) Reset() { *m = UninterpretedOption_NamePart{} } -func (m *UninterpretedOption_NamePart) String() string { return proto.CompactTextString(m) } -func (*UninterpretedOption_NamePart) ProtoMessage() {} -func (*UninterpretedOption_NamePart) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{18, 0} -} -func (m *UninterpretedOption_NamePart) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UninterpretedOption_NamePart.Unmarshal(m, b) -} -func (m *UninterpretedOption_NamePart) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UninterpretedOption_NamePart.Marshal(b, m, deterministic) -} -func (dst *UninterpretedOption_NamePart) XXX_Merge(src proto.Message) { - xxx_messageInfo_UninterpretedOption_NamePart.Merge(dst, src) -} -func (m *UninterpretedOption_NamePart) XXX_Size() int { - return xxx_messageInfo_UninterpretedOption_NamePart.Size(m) -} -func (m *UninterpretedOption_NamePart) XXX_DiscardUnknown() { - xxx_messageInfo_UninterpretedOption_NamePart.DiscardUnknown(m) -} - -var xxx_messageInfo_UninterpretedOption_NamePart proto.InternalMessageInfo - -func (m *UninterpretedOption_NamePart) GetNamePart() string { - if m != nil && m.NamePart != nil { - return *m.NamePart - } - return "" -} - -func (m *UninterpretedOption_NamePart) GetIsExtension() bool { - if m != nil && m.IsExtension != nil { - return *m.IsExtension - } - return false -} - -// Encapsulates information about the original source file from which a -// FileDescriptorProto was generated. -type SourceCodeInfo struct { - // A Location identifies a piece of source code in a .proto file which - // corresponds to a particular definition. This information is intended - // to be useful to IDEs, code indexers, documentation generators, and similar - // tools. - // - // For example, say we have a file like: - // message Foo { - // optional string foo = 1; - // } - // Let's look at just the field definition: - // optional string foo = 1; - // ^ ^^ ^^ ^ ^^^ - // a bc de f ghi - // We have the following locations: - // span path represents - // [a,i) [ 4, 0, 2, 0 ] The whole field definition. - // [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). - // [c,d) [ 4, 0, 2, 0, 5 ] The type (string). - // [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). - // [g,h) [ 4, 0, 2, 0, 3 ] The number (1). - // - // Notes: - // - A location may refer to a repeated field itself (i.e. not to any - // particular index within it). This is used whenever a set of elements are - // logically enclosed in a single code segment. For example, an entire - // extend block (possibly containing multiple extension definitions) will - // have an outer location whose path refers to the "extensions" repeated - // field without an index. - // - Multiple locations may have the same path. This happens when a single - // logical declaration is spread out across multiple places. The most - // obvious example is the "extend" block again -- there may be multiple - // extend blocks in the same scope, each of which will have the same path. - // - A location's span is not always a subset of its parent's span. For - // example, the "extendee" of an extension declaration appears at the - // beginning of the "extend" block and is shared by all extensions within - // the block. - // - Just because a location's span is a subset of some other location's span - // does not mean that it is a descendent. For example, a "group" defines - // both a type and a field in a single declaration. Thus, the locations - // corresponding to the type and field and their components will overlap. - // - Code which tries to interpret locations should probably be designed to - // ignore those that it doesn't understand, as more types of locations could - // be recorded in the future. - Location []*SourceCodeInfo_Location `protobuf:"bytes,1,rep,name=location" json:"location,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SourceCodeInfo) Reset() { *m = SourceCodeInfo{} } -func (m *SourceCodeInfo) String() string { return proto.CompactTextString(m) } -func (*SourceCodeInfo) ProtoMessage() {} -func (*SourceCodeInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{19} -} -func (m *SourceCodeInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SourceCodeInfo.Unmarshal(m, b) -} -func (m *SourceCodeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SourceCodeInfo.Marshal(b, m, deterministic) -} -func (dst *SourceCodeInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_SourceCodeInfo.Merge(dst, src) -} -func (m *SourceCodeInfo) XXX_Size() int { - return xxx_messageInfo_SourceCodeInfo.Size(m) -} -func (m *SourceCodeInfo) XXX_DiscardUnknown() { - xxx_messageInfo_SourceCodeInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_SourceCodeInfo proto.InternalMessageInfo - -func (m *SourceCodeInfo) GetLocation() []*SourceCodeInfo_Location { - if m != nil { - return m.Location - } - return nil -} - -type SourceCodeInfo_Location struct { - // Identifies which part of the FileDescriptorProto was defined at this - // location. - // - // Each element is a field number or an index. They form a path from - // the root FileDescriptorProto to the place where the definition. For - // example, this path: - // [ 4, 3, 2, 7, 1 ] - // refers to: - // file.message_type(3) // 4, 3 - // .field(7) // 2, 7 - // .name() // 1 - // This is because FileDescriptorProto.message_type has field number 4: - // repeated DescriptorProto message_type = 4; - // and DescriptorProto.field has field number 2: - // repeated FieldDescriptorProto field = 2; - // and FieldDescriptorProto.name has field number 1: - // optional string name = 1; - // - // Thus, the above path gives the location of a field name. If we removed - // the last element: - // [ 4, 3, 2, 7 ] - // this path refers to the whole field declaration (from the beginning - // of the label to the terminating semicolon). - Path []int32 `protobuf:"varint,1,rep,packed,name=path" json:"path,omitempty"` - // Always has exactly three or four elements: start line, start column, - // end line (optional, otherwise assumed same as start line), end column. - // These are packed into a single field for efficiency. Note that line - // and column numbers are zero-based -- typically you will want to add - // 1 to each before displaying to a user. - Span []int32 `protobuf:"varint,2,rep,packed,name=span" json:"span,omitempty"` - // If this SourceCodeInfo represents a complete declaration, these are any - // comments appearing before and after the declaration which appear to be - // attached to the declaration. - // - // A series of line comments appearing on consecutive lines, with no other - // tokens appearing on those lines, will be treated as a single comment. - // - // leading_detached_comments will keep paragraphs of comments that appear - // before (but not connected to) the current element. Each paragraph, - // separated by empty lines, will be one comment element in the repeated - // field. - // - // Only the comment content is provided; comment markers (e.g. //) are - // stripped out. For block comments, leading whitespace and an asterisk - // will be stripped from the beginning of each line other than the first. - // Newlines are included in the output. - // - // Examples: - // - // optional int32 foo = 1; // Comment attached to foo. - // // Comment attached to bar. - // optional int32 bar = 2; - // - // optional string baz = 3; - // // Comment attached to baz. - // // Another line attached to baz. - // - // // Comment attached to qux. - // // - // // Another line attached to qux. - // optional double qux = 4; - // - // // Detached comment for corge. This is not leading or trailing comments - // // to qux or corge because there are blank lines separating it from - // // both. - // - // // Detached comment for corge paragraph 2. - // - // optional string corge = 5; - // /* Block comment attached - // * to corge. Leading asterisks - // * will be removed. */ - // /* Block comment attached to - // * grault. */ - // optional int32 grault = 6; - // - // // ignored detached comments. - LeadingComments *string `protobuf:"bytes,3,opt,name=leading_comments,json=leadingComments" json:"leading_comments,omitempty"` - TrailingComments *string `protobuf:"bytes,4,opt,name=trailing_comments,json=trailingComments" json:"trailing_comments,omitempty"` - LeadingDetachedComments []string `protobuf:"bytes,6,rep,name=leading_detached_comments,json=leadingDetachedComments" json:"leading_detached_comments,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SourceCodeInfo_Location) Reset() { *m = SourceCodeInfo_Location{} } -func (m *SourceCodeInfo_Location) String() string { return proto.CompactTextString(m) } -func (*SourceCodeInfo_Location) ProtoMessage() {} -func (*SourceCodeInfo_Location) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{19, 0} -} -func (m *SourceCodeInfo_Location) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SourceCodeInfo_Location.Unmarshal(m, b) -} -func (m *SourceCodeInfo_Location) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SourceCodeInfo_Location.Marshal(b, m, deterministic) -} -func (dst *SourceCodeInfo_Location) XXX_Merge(src proto.Message) { - xxx_messageInfo_SourceCodeInfo_Location.Merge(dst, src) -} -func (m *SourceCodeInfo_Location) XXX_Size() int { - return xxx_messageInfo_SourceCodeInfo_Location.Size(m) -} -func (m *SourceCodeInfo_Location) XXX_DiscardUnknown() { - xxx_messageInfo_SourceCodeInfo_Location.DiscardUnknown(m) -} - -var xxx_messageInfo_SourceCodeInfo_Location proto.InternalMessageInfo - -func (m *SourceCodeInfo_Location) GetPath() []int32 { - if m != nil { - return m.Path - } - return nil -} - -func (m *SourceCodeInfo_Location) GetSpan() []int32 { - if m != nil { - return m.Span - } - return nil -} - -func (m *SourceCodeInfo_Location) GetLeadingComments() string { - if m != nil && m.LeadingComments != nil { - return *m.LeadingComments - } - return "" -} - -func (m *SourceCodeInfo_Location) GetTrailingComments() string { - if m != nil && m.TrailingComments != nil { - return *m.TrailingComments - } - return "" -} - -func (m *SourceCodeInfo_Location) GetLeadingDetachedComments() []string { - if m != nil { - return m.LeadingDetachedComments - } - return nil -} - -// Describes the relationship between generated code and its original source -// file. A GeneratedCodeInfo message is associated with only one generated -// source file, but may contain references to different source .proto files. -type GeneratedCodeInfo struct { - // An Annotation connects some span of text in generated code to an element - // of its generating .proto file. - Annotation []*GeneratedCodeInfo_Annotation `protobuf:"bytes,1,rep,name=annotation" json:"annotation,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GeneratedCodeInfo) Reset() { *m = GeneratedCodeInfo{} } -func (m *GeneratedCodeInfo) String() string { return proto.CompactTextString(m) } -func (*GeneratedCodeInfo) ProtoMessage() {} -func (*GeneratedCodeInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{20} -} -func (m *GeneratedCodeInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GeneratedCodeInfo.Unmarshal(m, b) -} -func (m *GeneratedCodeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GeneratedCodeInfo.Marshal(b, m, deterministic) -} -func (dst *GeneratedCodeInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_GeneratedCodeInfo.Merge(dst, src) -} -func (m *GeneratedCodeInfo) XXX_Size() int { - return xxx_messageInfo_GeneratedCodeInfo.Size(m) -} -func (m *GeneratedCodeInfo) XXX_DiscardUnknown() { - xxx_messageInfo_GeneratedCodeInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_GeneratedCodeInfo proto.InternalMessageInfo - -func (m *GeneratedCodeInfo) GetAnnotation() []*GeneratedCodeInfo_Annotation { - if m != nil { - return m.Annotation - } - return nil -} - -type GeneratedCodeInfo_Annotation struct { - // Identifies the element in the original source .proto file. This field - // is formatted the same as SourceCodeInfo.Location.path. - Path []int32 `protobuf:"varint,1,rep,packed,name=path" json:"path,omitempty"` - // Identifies the filesystem path to the original source .proto. - SourceFile *string `protobuf:"bytes,2,opt,name=source_file,json=sourceFile" json:"source_file,omitempty"` - // Identifies the starting offset in bytes in the generated code - // that relates to the identified object. - Begin *int32 `protobuf:"varint,3,opt,name=begin" json:"begin,omitempty"` - // Identifies the ending offset in bytes in the generated code that - // relates to the identified offset. The end offset should be one past - // the last relevant byte (so the length of the text = end - begin). - End *int32 `protobuf:"varint,4,opt,name=end" json:"end,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GeneratedCodeInfo_Annotation) Reset() { *m = GeneratedCodeInfo_Annotation{} } -func (m *GeneratedCodeInfo_Annotation) String() string { return proto.CompactTextString(m) } -func (*GeneratedCodeInfo_Annotation) ProtoMessage() {} -func (*GeneratedCodeInfo_Annotation) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{20, 0} -} -func (m *GeneratedCodeInfo_Annotation) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GeneratedCodeInfo_Annotation.Unmarshal(m, b) -} -func (m *GeneratedCodeInfo_Annotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GeneratedCodeInfo_Annotation.Marshal(b, m, deterministic) -} -func (dst *GeneratedCodeInfo_Annotation) XXX_Merge(src proto.Message) { - xxx_messageInfo_GeneratedCodeInfo_Annotation.Merge(dst, src) -} -func (m *GeneratedCodeInfo_Annotation) XXX_Size() int { - return xxx_messageInfo_GeneratedCodeInfo_Annotation.Size(m) -} -func (m *GeneratedCodeInfo_Annotation) XXX_DiscardUnknown() { - xxx_messageInfo_GeneratedCodeInfo_Annotation.DiscardUnknown(m) -} - -var xxx_messageInfo_GeneratedCodeInfo_Annotation proto.InternalMessageInfo - -func (m *GeneratedCodeInfo_Annotation) GetPath() []int32 { - if m != nil { - return m.Path - } - return nil -} - -func (m *GeneratedCodeInfo_Annotation) GetSourceFile() string { - if m != nil && m.SourceFile != nil { - return *m.SourceFile - } - return "" -} - -func (m *GeneratedCodeInfo_Annotation) GetBegin() int32 { - if m != nil && m.Begin != nil { - return *m.Begin - } - return 0 -} - -func (m *GeneratedCodeInfo_Annotation) GetEnd() int32 { - if m != nil && m.End != nil { - return *m.End - } - return 0 -} - -func init() { - proto.RegisterType((*FileDescriptorSet)(nil), "google.protobuf.FileDescriptorSet") - proto.RegisterType((*FileDescriptorProto)(nil), "google.protobuf.FileDescriptorProto") - proto.RegisterType((*DescriptorProto)(nil), "google.protobuf.DescriptorProto") - proto.RegisterType((*DescriptorProto_ExtensionRange)(nil), "google.protobuf.DescriptorProto.ExtensionRange") - proto.RegisterType((*DescriptorProto_ReservedRange)(nil), "google.protobuf.DescriptorProto.ReservedRange") - proto.RegisterType((*ExtensionRangeOptions)(nil), "google.protobuf.ExtensionRangeOptions") - proto.RegisterType((*FieldDescriptorProto)(nil), "google.protobuf.FieldDescriptorProto") - proto.RegisterType((*OneofDescriptorProto)(nil), "google.protobuf.OneofDescriptorProto") - proto.RegisterType((*EnumDescriptorProto)(nil), "google.protobuf.EnumDescriptorProto") - proto.RegisterType((*EnumDescriptorProto_EnumReservedRange)(nil), "google.protobuf.EnumDescriptorProto.EnumReservedRange") - proto.RegisterType((*EnumValueDescriptorProto)(nil), "google.protobuf.EnumValueDescriptorProto") - proto.RegisterType((*ServiceDescriptorProto)(nil), "google.protobuf.ServiceDescriptorProto") - proto.RegisterType((*MethodDescriptorProto)(nil), "google.protobuf.MethodDescriptorProto") - proto.RegisterType((*FileOptions)(nil), "google.protobuf.FileOptions") - proto.RegisterType((*MessageOptions)(nil), "google.protobuf.MessageOptions") - proto.RegisterType((*FieldOptions)(nil), "google.protobuf.FieldOptions") - proto.RegisterType((*OneofOptions)(nil), "google.protobuf.OneofOptions") - proto.RegisterType((*EnumOptions)(nil), "google.protobuf.EnumOptions") - proto.RegisterType((*EnumValueOptions)(nil), "google.protobuf.EnumValueOptions") - proto.RegisterType((*ServiceOptions)(nil), "google.protobuf.ServiceOptions") - proto.RegisterType((*MethodOptions)(nil), "google.protobuf.MethodOptions") - proto.RegisterType((*UninterpretedOption)(nil), "google.protobuf.UninterpretedOption") - proto.RegisterType((*UninterpretedOption_NamePart)(nil), "google.protobuf.UninterpretedOption.NamePart") - proto.RegisterType((*SourceCodeInfo)(nil), "google.protobuf.SourceCodeInfo") - proto.RegisterType((*SourceCodeInfo_Location)(nil), "google.protobuf.SourceCodeInfo.Location") - proto.RegisterType((*GeneratedCodeInfo)(nil), "google.protobuf.GeneratedCodeInfo") - proto.RegisterType((*GeneratedCodeInfo_Annotation)(nil), "google.protobuf.GeneratedCodeInfo.Annotation") - proto.RegisterEnum("google.protobuf.FieldDescriptorProto_Type", FieldDescriptorProto_Type_name, FieldDescriptorProto_Type_value) - proto.RegisterEnum("google.protobuf.FieldDescriptorProto_Label", FieldDescriptorProto_Label_name, FieldDescriptorProto_Label_value) - proto.RegisterEnum("google.protobuf.FileOptions_OptimizeMode", FileOptions_OptimizeMode_name, FileOptions_OptimizeMode_value) - proto.RegisterEnum("google.protobuf.FieldOptions_CType", FieldOptions_CType_name, FieldOptions_CType_value) - proto.RegisterEnum("google.protobuf.FieldOptions_JSType", FieldOptions_JSType_name, FieldOptions_JSType_value) - proto.RegisterEnum("google.protobuf.MethodOptions_IdempotencyLevel", MethodOptions_IdempotencyLevel_name, MethodOptions_IdempotencyLevel_value) -} - -func init() { - proto.RegisterFile("google/protobuf/descriptor.proto", fileDescriptor_descriptor_4df4cb5f42392df6) -} - -var fileDescriptor_descriptor_4df4cb5f42392df6 = []byte{ - // 2555 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xdd, 0x6e, 0x1b, 0xc7, - 0xf5, 0xcf, 0xf2, 0x4b, 0xe4, 0x21, 0x45, 0x8d, 0x46, 0x8a, 0xbd, 0x56, 0x3e, 0x2c, 0x33, 0x1f, - 0x96, 0x9d, 0x7f, 0xa8, 0xc0, 0xb1, 0x1d, 0x47, 0xfe, 0x23, 0x2d, 0x45, 0xae, 0x15, 0xaa, 0x12, - 0xc9, 0x2e, 0xa9, 0xe6, 0x03, 0x28, 0x16, 0xa3, 0xdd, 0x21, 0xb9, 0xf6, 0x72, 0x77, 0xb3, 0xbb, - 0xb4, 0xad, 0xa0, 0x17, 0x06, 0x7a, 0xd5, 0xab, 0xde, 0x16, 0x45, 0xd1, 0x8b, 0xde, 0x04, 0xe8, - 0x03, 0x14, 0xc8, 0x5d, 0x9f, 0xa0, 0x40, 0xde, 0xa0, 0x68, 0x0b, 0xb4, 0x8f, 0xd0, 0xcb, 0x62, - 0x66, 0x76, 0x97, 0xbb, 0x24, 0x15, 0x2b, 0x01, 0xe2, 0x5c, 0x91, 0xf3, 0x9b, 0xdf, 0x39, 0x73, - 0xe6, 0xcc, 0x99, 0x33, 0x67, 0x66, 0x61, 0x7b, 0xe4, 0x38, 0x23, 0x8b, 0xee, 0xba, 0x9e, 0x13, - 0x38, 0xa7, 0xd3, 0xe1, 0xae, 0x41, 0x7d, 0xdd, 0x33, 0xdd, 0xc0, 0xf1, 0xea, 0x1c, 0xc3, 0x6b, - 0x82, 0x51, 0x8f, 0x18, 0xb5, 0x63, 0x58, 0x7f, 0x60, 0x5a, 0xb4, 0x15, 0x13, 0xfb, 0x34, 0xc0, - 0xf7, 0x20, 0x37, 0x34, 0x2d, 0x2a, 0x4b, 0xdb, 0xd9, 0x9d, 0xf2, 0xad, 0x37, 0xeb, 0x73, 0x42, - 0xf5, 0xb4, 0x44, 0x8f, 0xc1, 0x2a, 0x97, 0xa8, 0xfd, 0x2b, 0x07, 0x1b, 0x4b, 0x7a, 0x31, 0x86, - 0x9c, 0x4d, 0x26, 0x4c, 0xa3, 0xb4, 0x53, 0x52, 0xf9, 0x7f, 0x2c, 0xc3, 0x8a, 0x4b, 0xf4, 0x47, - 0x64, 0x44, 0xe5, 0x0c, 0x87, 0xa3, 0x26, 0x7e, 0x1d, 0xc0, 0xa0, 0x2e, 0xb5, 0x0d, 0x6a, 0xeb, - 0x67, 0x72, 0x76, 0x3b, 0xbb, 0x53, 0x52, 0x13, 0x08, 0x7e, 0x07, 0xd6, 0xdd, 0xe9, 0xa9, 0x65, - 0xea, 0x5a, 0x82, 0x06, 0xdb, 0xd9, 0x9d, 0xbc, 0x8a, 0x44, 0x47, 0x6b, 0x46, 0xbe, 0x0e, 0x6b, - 0x4f, 0x28, 0x79, 0x94, 0xa4, 0x96, 0x39, 0xb5, 0xca, 0xe0, 0x04, 0xb1, 0x09, 0x95, 0x09, 0xf5, - 0x7d, 0x32, 0xa2, 0x5a, 0x70, 0xe6, 0x52, 0x39, 0xc7, 0x67, 0xbf, 0xbd, 0x30, 0xfb, 0xf9, 0x99, - 0x97, 0x43, 0xa9, 0xc1, 0x99, 0x4b, 0x71, 0x03, 0x4a, 0xd4, 0x9e, 0x4e, 0x84, 0x86, 0xfc, 0x39, - 0xfe, 0x53, 0xec, 0xe9, 0x64, 0x5e, 0x4b, 0x91, 0x89, 0x85, 0x2a, 0x56, 0x7c, 0xea, 0x3d, 0x36, - 0x75, 0x2a, 0x17, 0xb8, 0x82, 0xeb, 0x0b, 0x0a, 0xfa, 0xa2, 0x7f, 0x5e, 0x47, 0x24, 0x87, 0x9b, - 0x50, 0xa2, 0x4f, 0x03, 0x6a, 0xfb, 0xa6, 0x63, 0xcb, 0x2b, 0x5c, 0xc9, 0x5b, 0x4b, 0x56, 0x91, - 0x5a, 0xc6, 0xbc, 0x8a, 0x99, 0x1c, 0xbe, 0x0b, 0x2b, 0x8e, 0x1b, 0x98, 0x8e, 0xed, 0xcb, 0xc5, - 0x6d, 0x69, 0xa7, 0x7c, 0xeb, 0xd5, 0xa5, 0x81, 0xd0, 0x15, 0x1c, 0x35, 0x22, 0xe3, 0x36, 0x20, - 0xdf, 0x99, 0x7a, 0x3a, 0xd5, 0x74, 0xc7, 0xa0, 0x9a, 0x69, 0x0f, 0x1d, 0xb9, 0xc4, 0x15, 0x5c, - 0x5d, 0x9c, 0x08, 0x27, 0x36, 0x1d, 0x83, 0xb6, 0xed, 0xa1, 0xa3, 0x56, 0xfd, 0x54, 0x1b, 0x5f, - 0x82, 0x82, 0x7f, 0x66, 0x07, 0xe4, 0xa9, 0x5c, 0xe1, 0x11, 0x12, 0xb6, 0x6a, 0x5f, 0x17, 0x60, - 0xed, 0x22, 0x21, 0x76, 0x1f, 0xf2, 0x43, 0x36, 0x4b, 0x39, 0xf3, 0x5d, 0x7c, 0x20, 0x64, 0xd2, - 0x4e, 0x2c, 0x7c, 0x4f, 0x27, 0x36, 0xa0, 0x6c, 0x53, 0x3f, 0xa0, 0x86, 0x88, 0x88, 0xec, 0x05, - 0x63, 0x0a, 0x84, 0xd0, 0x62, 0x48, 0xe5, 0xbe, 0x57, 0x48, 0x7d, 0x0a, 0x6b, 0xb1, 0x49, 0x9a, - 0x47, 0xec, 0x51, 0x14, 0x9b, 0xbb, 0xcf, 0xb3, 0xa4, 0xae, 0x44, 0x72, 0x2a, 0x13, 0x53, 0xab, - 0x34, 0xd5, 0xc6, 0x2d, 0x00, 0xc7, 0xa6, 0xce, 0x50, 0x33, 0xa8, 0x6e, 0xc9, 0xc5, 0x73, 0xbc, - 0xd4, 0x65, 0x94, 0x05, 0x2f, 0x39, 0x02, 0xd5, 0x2d, 0xfc, 0xe1, 0x2c, 0xd4, 0x56, 0xce, 0x89, - 0x94, 0x63, 0xb1, 0xc9, 0x16, 0xa2, 0xed, 0x04, 0xaa, 0x1e, 0x65, 0x71, 0x4f, 0x8d, 0x70, 0x66, - 0x25, 0x6e, 0x44, 0xfd, 0xb9, 0x33, 0x53, 0x43, 0x31, 0x31, 0xb1, 0x55, 0x2f, 0xd9, 0xc4, 0x6f, - 0x40, 0x0c, 0x68, 0x3c, 0xac, 0x80, 0x67, 0xa1, 0x4a, 0x04, 0x76, 0xc8, 0x84, 0x6e, 0x7d, 0x09, - 0xd5, 0xb4, 0x7b, 0xf0, 0x26, 0xe4, 0xfd, 0x80, 0x78, 0x01, 0x8f, 0xc2, 0xbc, 0x2a, 0x1a, 0x18, - 0x41, 0x96, 0xda, 0x06, 0xcf, 0x72, 0x79, 0x95, 0xfd, 0xc5, 0x3f, 0x9d, 0x4d, 0x38, 0xcb, 0x27, - 0xfc, 0xf6, 0xe2, 0x8a, 0xa6, 0x34, 0xcf, 0xcf, 0x7b, 0xeb, 0x03, 0x58, 0x4d, 0x4d, 0xe0, 0xa2, - 0x43, 0xd7, 0x7e, 0x05, 0x2f, 0x2f, 0x55, 0x8d, 0x3f, 0x85, 0xcd, 0xa9, 0x6d, 0xda, 0x01, 0xf5, - 0x5c, 0x8f, 0xb2, 0x88, 0x15, 0x43, 0xc9, 0xff, 0x5e, 0x39, 0x27, 0xe6, 0x4e, 0x92, 0x6c, 0xa1, - 0x45, 0xdd, 0x98, 0x2e, 0x82, 0x37, 0x4b, 0xc5, 0xff, 0xac, 0xa0, 0x67, 0xcf, 0x9e, 0x3d, 0xcb, - 0xd4, 0x7e, 0x57, 0x80, 0xcd, 0x65, 0x7b, 0x66, 0xe9, 0xf6, 0xbd, 0x04, 0x05, 0x7b, 0x3a, 0x39, - 0xa5, 0x1e, 0x77, 0x52, 0x5e, 0x0d, 0x5b, 0xb8, 0x01, 0x79, 0x8b, 0x9c, 0x52, 0x4b, 0xce, 0x6d, - 0x4b, 0x3b, 0xd5, 0x5b, 0xef, 0x5c, 0x68, 0x57, 0xd6, 0x8f, 0x98, 0x88, 0x2a, 0x24, 0xf1, 0x47, - 0x90, 0x0b, 0x53, 0x34, 0xd3, 0x70, 0xf3, 0x62, 0x1a, 0xd8, 0x5e, 0x52, 0xb9, 0x1c, 0x7e, 0x05, - 0x4a, 0xec, 0x57, 0xc4, 0x46, 0x81, 0xdb, 0x5c, 0x64, 0x00, 0x8b, 0x0b, 0xbc, 0x05, 0x45, 0xbe, - 0x4d, 0x0c, 0x1a, 0x1d, 0x6d, 0x71, 0x9b, 0x05, 0x96, 0x41, 0x87, 0x64, 0x6a, 0x05, 0xda, 0x63, - 0x62, 0x4d, 0x29, 0x0f, 0xf8, 0x92, 0x5a, 0x09, 0xc1, 0x5f, 0x30, 0x0c, 0x5f, 0x85, 0xb2, 0xd8, - 0x55, 0xa6, 0x6d, 0xd0, 0xa7, 0x3c, 0x7b, 0xe6, 0x55, 0xb1, 0xd1, 0xda, 0x0c, 0x61, 0xc3, 0x3f, - 0xf4, 0x1d, 0x3b, 0x0a, 0x4d, 0x3e, 0x04, 0x03, 0xf8, 0xf0, 0x1f, 0xcc, 0x27, 0xee, 0xd7, 0x96, - 0x4f, 0x6f, 0x3e, 0xa6, 0x6a, 0x7f, 0xc9, 0x40, 0x8e, 0xe7, 0x8b, 0x35, 0x28, 0x0f, 0x3e, 0xeb, - 0x29, 0x5a, 0xab, 0x7b, 0xb2, 0x7f, 0xa4, 0x20, 0x09, 0x57, 0x01, 0x38, 0xf0, 0xe0, 0xa8, 0xdb, - 0x18, 0xa0, 0x4c, 0xdc, 0x6e, 0x77, 0x06, 0x77, 0x6f, 0xa3, 0x6c, 0x2c, 0x70, 0x22, 0x80, 0x5c, - 0x92, 0xf0, 0xfe, 0x2d, 0x94, 0xc7, 0x08, 0x2a, 0x42, 0x41, 0xfb, 0x53, 0xa5, 0x75, 0xf7, 0x36, - 0x2a, 0xa4, 0x91, 0xf7, 0x6f, 0xa1, 0x15, 0xbc, 0x0a, 0x25, 0x8e, 0xec, 0x77, 0xbb, 0x47, 0xa8, - 0x18, 0xeb, 0xec, 0x0f, 0xd4, 0x76, 0xe7, 0x00, 0x95, 0x62, 0x9d, 0x07, 0x6a, 0xf7, 0xa4, 0x87, - 0x20, 0xd6, 0x70, 0xac, 0xf4, 0xfb, 0x8d, 0x03, 0x05, 0x95, 0x63, 0xc6, 0xfe, 0x67, 0x03, 0xa5, - 0x8f, 0x2a, 0x29, 0xb3, 0xde, 0xbf, 0x85, 0x56, 0xe3, 0x21, 0x94, 0xce, 0xc9, 0x31, 0xaa, 0xe2, - 0x75, 0x58, 0x15, 0x43, 0x44, 0x46, 0xac, 0xcd, 0x41, 0x77, 0x6f, 0x23, 0x34, 0x33, 0x44, 0x68, - 0x59, 0x4f, 0x01, 0x77, 0x6f, 0x23, 0x5c, 0x6b, 0x42, 0x9e, 0x47, 0x17, 0xc6, 0x50, 0x3d, 0x6a, - 0xec, 0x2b, 0x47, 0x5a, 0xb7, 0x37, 0x68, 0x77, 0x3b, 0x8d, 0x23, 0x24, 0xcd, 0x30, 0x55, 0xf9, - 0xf9, 0x49, 0x5b, 0x55, 0x5a, 0x28, 0x93, 0xc4, 0x7a, 0x4a, 0x63, 0xa0, 0xb4, 0x50, 0xb6, 0xa6, - 0xc3, 0xe6, 0xb2, 0x3c, 0xb9, 0x74, 0x67, 0x24, 0x96, 0x38, 0x73, 0xce, 0x12, 0x73, 0x5d, 0x0b, - 0x4b, 0xfc, 0xcf, 0x0c, 0x6c, 0x2c, 0x39, 0x2b, 0x96, 0x0e, 0xf2, 0x13, 0xc8, 0x8b, 0x10, 0x15, - 0xa7, 0xe7, 0x8d, 0xa5, 0x87, 0x0e, 0x0f, 0xd8, 0x85, 0x13, 0x94, 0xcb, 0x25, 0x2b, 0x88, 0xec, - 0x39, 0x15, 0x04, 0x53, 0xb1, 0x90, 0xd3, 0x7f, 0xb9, 0x90, 0xd3, 0xc5, 0xb1, 0x77, 0xf7, 0x22, - 0xc7, 0x1e, 0xc7, 0xbe, 0x5b, 0x6e, 0xcf, 0x2f, 0xc9, 0xed, 0xf7, 0x61, 0x7d, 0x41, 0xd1, 0x85, - 0x73, 0xec, 0xaf, 0x25, 0x90, 0xcf, 0x73, 0xce, 0x73, 0x32, 0x5d, 0x26, 0x95, 0xe9, 0xee, 0xcf, - 0x7b, 0xf0, 0xda, 0xf9, 0x8b, 0xb0, 0xb0, 0xd6, 0x5f, 0x49, 0x70, 0x69, 0x79, 0xa5, 0xb8, 0xd4, - 0x86, 0x8f, 0xa0, 0x30, 0xa1, 0xc1, 0xd8, 0x89, 0xaa, 0xa5, 0xb7, 0x97, 0x9c, 0xc1, 0xac, 0x7b, - 0x7e, 0xb1, 0x43, 0xa9, 0xe4, 0x21, 0x9e, 0x3d, 0xaf, 0xdc, 0x13, 0xd6, 0x2c, 0x58, 0xfa, 0x9b, - 0x0c, 0xbc, 0xbc, 0x54, 0xf9, 0x52, 0x43, 0x5f, 0x03, 0x30, 0x6d, 0x77, 0x1a, 0x88, 0x8a, 0x48, - 0x24, 0xd8, 0x12, 0x47, 0x78, 0xf2, 0x62, 0xc9, 0x73, 0x1a, 0xc4, 0xfd, 0x59, 0xde, 0x0f, 0x02, - 0xe2, 0x84, 0x7b, 0x33, 0x43, 0x73, 0xdc, 0xd0, 0xd7, 0xcf, 0x99, 0xe9, 0x42, 0x60, 0xbe, 0x07, - 0x48, 0xb7, 0x4c, 0x6a, 0x07, 0x9a, 0x1f, 0x78, 0x94, 0x4c, 0x4c, 0x7b, 0xc4, 0x4f, 0x90, 0xe2, - 0x5e, 0x7e, 0x48, 0x2c, 0x9f, 0xaa, 0x6b, 0xa2, 0xbb, 0x1f, 0xf5, 0x32, 0x09, 0x1e, 0x40, 0x5e, - 0x42, 0xa2, 0x90, 0x92, 0x10, 0xdd, 0xb1, 0x44, 0xed, 0xeb, 0x22, 0x94, 0x13, 0x75, 0x35, 0xbe, - 0x06, 0x95, 0x87, 0xe4, 0x31, 0xd1, 0xa2, 0xbb, 0x92, 0xf0, 0x44, 0x99, 0x61, 0xbd, 0xf0, 0xbe, - 0xf4, 0x1e, 0x6c, 0x72, 0x8a, 0x33, 0x0d, 0xa8, 0xa7, 0xe9, 0x16, 0xf1, 0x7d, 0xee, 0xb4, 0x22, - 0xa7, 0x62, 0xd6, 0xd7, 0x65, 0x5d, 0xcd, 0xa8, 0x07, 0xdf, 0x81, 0x0d, 0x2e, 0x31, 0x99, 0x5a, - 0x81, 0xe9, 0x5a, 0x54, 0x63, 0xb7, 0x37, 0x9f, 0x9f, 0x24, 0xb1, 0x65, 0xeb, 0x8c, 0x71, 0x1c, - 0x12, 0x98, 0x45, 0x3e, 0x6e, 0xc1, 0x6b, 0x5c, 0x6c, 0x44, 0x6d, 0xea, 0x91, 0x80, 0x6a, 0xf4, - 0x8b, 0x29, 0xb1, 0x7c, 0x8d, 0xd8, 0x86, 0x36, 0x26, 0xfe, 0x58, 0xde, 0x64, 0x0a, 0xf6, 0x33, - 0xb2, 0xa4, 0x5e, 0x61, 0xc4, 0x83, 0x90, 0xa7, 0x70, 0x5a, 0xc3, 0x36, 0x3e, 0x26, 0xfe, 0x18, - 0xef, 0xc1, 0x25, 0xae, 0xc5, 0x0f, 0x3c, 0xd3, 0x1e, 0x69, 0xfa, 0x98, 0xea, 0x8f, 0xb4, 0x69, - 0x30, 0xbc, 0x27, 0xbf, 0x92, 0x1c, 0x9f, 0x5b, 0xd8, 0xe7, 0x9c, 0x26, 0xa3, 0x9c, 0x04, 0xc3, - 0x7b, 0xb8, 0x0f, 0x15, 0xb6, 0x18, 0x13, 0xf3, 0x4b, 0xaa, 0x0d, 0x1d, 0x8f, 0x1f, 0x8d, 0xd5, - 0x25, 0xa9, 0x29, 0xe1, 0xc1, 0x7a, 0x37, 0x14, 0x38, 0x76, 0x0c, 0xba, 0x97, 0xef, 0xf7, 0x14, - 0xa5, 0xa5, 0x96, 0x23, 0x2d, 0x0f, 0x1c, 0x8f, 0x05, 0xd4, 0xc8, 0x89, 0x1d, 0x5c, 0x16, 0x01, - 0x35, 0x72, 0x22, 0xf7, 0xde, 0x81, 0x0d, 0x5d, 0x17, 0x73, 0x36, 0x75, 0x2d, 0xbc, 0x63, 0xf9, - 0x32, 0x4a, 0x39, 0x4b, 0xd7, 0x0f, 0x04, 0x21, 0x8c, 0x71, 0x1f, 0x7f, 0x08, 0x2f, 0xcf, 0x9c, - 0x95, 0x14, 0x5c, 0x5f, 0x98, 0xe5, 0xbc, 0xe8, 0x1d, 0xd8, 0x70, 0xcf, 0x16, 0x05, 0x71, 0x6a, - 0x44, 0xf7, 0x6c, 0x5e, 0xec, 0x03, 0xd8, 0x74, 0xc7, 0xee, 0xa2, 0xdc, 0xcd, 0xa4, 0x1c, 0x76, - 0xc7, 0xee, 0xbc, 0xe0, 0x5b, 0xfc, 0xc2, 0xed, 0x51, 0x9d, 0x04, 0xd4, 0x90, 0x2f, 0x27, 0xe9, - 0x89, 0x0e, 0xbc, 0x0b, 0x48, 0xd7, 0x35, 0x6a, 0x93, 0x53, 0x8b, 0x6a, 0xc4, 0xa3, 0x36, 0xf1, - 0xe5, 0xab, 0x49, 0x72, 0x55, 0xd7, 0x15, 0xde, 0xdb, 0xe0, 0x9d, 0xf8, 0x26, 0xac, 0x3b, 0xa7, - 0x0f, 0x75, 0x11, 0x92, 0x9a, 0xeb, 0xd1, 0xa1, 0xf9, 0x54, 0x7e, 0x93, 0xfb, 0x77, 0x8d, 0x75, - 0xf0, 0x80, 0xec, 0x71, 0x18, 0xdf, 0x00, 0xa4, 0xfb, 0x63, 0xe2, 0xb9, 0x3c, 0x27, 0xfb, 0x2e, - 0xd1, 0xa9, 0xfc, 0x96, 0xa0, 0x0a, 0xbc, 0x13, 0xc1, 0x6c, 0x4b, 0xf8, 0x4f, 0xcc, 0x61, 0x10, - 0x69, 0xbc, 0x2e, 0xb6, 0x04, 0xc7, 0x42, 0x6d, 0x3b, 0x80, 0x98, 0x2b, 0x52, 0x03, 0xef, 0x70, - 0x5a, 0xd5, 0x1d, 0xbb, 0xc9, 0x71, 0xdf, 0x80, 0x55, 0xc6, 0x9c, 0x0d, 0x7a, 0x43, 0x14, 0x64, - 0xee, 0x38, 0x31, 0xe2, 0x0f, 0x56, 0x1b, 0xd7, 0xf6, 0xa0, 0x92, 0x8c, 0x4f, 0x5c, 0x02, 0x11, - 0xa1, 0x48, 0x62, 0xc5, 0x4a, 0xb3, 0xdb, 0x62, 0x65, 0xc6, 0xe7, 0x0a, 0xca, 0xb0, 0x72, 0xe7, - 0xa8, 0x3d, 0x50, 0x34, 0xf5, 0xa4, 0x33, 0x68, 0x1f, 0x2b, 0x28, 0x9b, 0xa8, 0xab, 0x0f, 0x73, - 0xc5, 0xb7, 0xd1, 0xf5, 0xda, 0x37, 0x19, 0xa8, 0xa6, 0x2f, 0x4a, 0xf8, 0xff, 0xe1, 0x72, 0xf4, - 0xaa, 0xe1, 0xd3, 0x40, 0x7b, 0x62, 0x7a, 0x7c, 0xe3, 0x4c, 0x88, 0x38, 0xc4, 0xe2, 0xa5, 0xdb, - 0x0c, 0x59, 0x7d, 0x1a, 0x7c, 0x62, 0x7a, 0x6c, 0x5b, 0x4c, 0x48, 0x80, 0x8f, 0xe0, 0xaa, 0xed, - 0x68, 0x7e, 0x40, 0x6c, 0x83, 0x78, 0x86, 0x36, 0x7b, 0x4f, 0xd2, 0x88, 0xae, 0x53, 0xdf, 0x77, - 0xc4, 0x81, 0x15, 0x6b, 0x79, 0xd5, 0x76, 0xfa, 0x21, 0x79, 0x96, 0xc9, 0x1b, 0x21, 0x75, 0x2e, - 0xcc, 0xb2, 0xe7, 0x85, 0xd9, 0x2b, 0x50, 0x9a, 0x10, 0x57, 0xa3, 0x76, 0xe0, 0x9d, 0xf1, 0xf2, - 0xb8, 0xa8, 0x16, 0x27, 0xc4, 0x55, 0x58, 0xfb, 0x85, 0xdc, 0x52, 0x0e, 0x73, 0xc5, 0x22, 0x2a, - 0x1d, 0xe6, 0x8a, 0x25, 0x04, 0xb5, 0x7f, 0x64, 0xa1, 0x92, 0x2c, 0x97, 0xd9, 0xed, 0x43, 0xe7, - 0x27, 0x8b, 0xc4, 0x73, 0xcf, 0x1b, 0xdf, 0x5a, 0x5c, 0xd7, 0x9b, 0xec, 0xc8, 0xd9, 0x2b, 0x88, - 0x22, 0x56, 0x15, 0x92, 0xec, 0xb8, 0x67, 0xd9, 0x86, 0x8a, 0xa2, 0xa1, 0xa8, 0x86, 0x2d, 0x7c, - 0x00, 0x85, 0x87, 0x3e, 0xd7, 0x5d, 0xe0, 0xba, 0xdf, 0xfc, 0x76, 0xdd, 0x87, 0x7d, 0xae, 0xbc, - 0x74, 0xd8, 0xd7, 0x3a, 0x5d, 0xf5, 0xb8, 0x71, 0xa4, 0x86, 0xe2, 0xf8, 0x0a, 0xe4, 0x2c, 0xf2, - 0xe5, 0x59, 0xfa, 0x70, 0xe2, 0xd0, 0x45, 0x17, 0xe1, 0x0a, 0xe4, 0x9e, 0x50, 0xf2, 0x28, 0x7d, - 0x24, 0x70, 0xe8, 0x07, 0xdc, 0x0c, 0xbb, 0x90, 0xe7, 0xfe, 0xc2, 0x00, 0xa1, 0xc7, 0xd0, 0x4b, - 0xb8, 0x08, 0xb9, 0x66, 0x57, 0x65, 0x1b, 0x02, 0x41, 0x45, 0xa0, 0x5a, 0xaf, 0xad, 0x34, 0x15, - 0x94, 0xa9, 0xdd, 0x81, 0x82, 0x70, 0x02, 0xdb, 0x2c, 0xb1, 0x1b, 0xd0, 0x4b, 0x61, 0x33, 0xd4, - 0x21, 0x45, 0xbd, 0x27, 0xc7, 0xfb, 0x8a, 0x8a, 0x32, 0xe9, 0xa5, 0xce, 0xa1, 0x7c, 0xcd, 0x87, - 0x4a, 0xb2, 0x5e, 0x7e, 0x31, 0x77, 0xe1, 0xbf, 0x4a, 0x50, 0x4e, 0xd4, 0xbf, 0xac, 0x70, 0x21, - 0x96, 0xe5, 0x3c, 0xd1, 0x88, 0x65, 0x12, 0x3f, 0x0c, 0x0d, 0xe0, 0x50, 0x83, 0x21, 0x17, 0x5d, - 0xba, 0x17, 0xb4, 0x45, 0xf2, 0xa8, 0x50, 0xfb, 0xa3, 0x04, 0x68, 0xbe, 0x00, 0x9d, 0x33, 0x53, - 0xfa, 0x31, 0xcd, 0xac, 0xfd, 0x41, 0x82, 0x6a, 0xba, 0xea, 0x9c, 0x33, 0xef, 0xda, 0x8f, 0x6a, - 0xde, 0xdf, 0x33, 0xb0, 0x9a, 0xaa, 0x35, 0x2f, 0x6a, 0xdd, 0x17, 0xb0, 0x6e, 0x1a, 0x74, 0xe2, - 0x3a, 0x01, 0xb5, 0xf5, 0x33, 0xcd, 0xa2, 0x8f, 0xa9, 0x25, 0xd7, 0x78, 0xd2, 0xd8, 0xfd, 0xf6, - 0x6a, 0xb6, 0xde, 0x9e, 0xc9, 0x1d, 0x31, 0xb1, 0xbd, 0x8d, 0x76, 0x4b, 0x39, 0xee, 0x75, 0x07, - 0x4a, 0xa7, 0xf9, 0x99, 0x76, 0xd2, 0xf9, 0x59, 0xa7, 0xfb, 0x49, 0x47, 0x45, 0xe6, 0x1c, 0xed, - 0x07, 0xdc, 0xf6, 0x3d, 0x40, 0xf3, 0x46, 0xe1, 0xcb, 0xb0, 0xcc, 0x2c, 0xf4, 0x12, 0xde, 0x80, - 0xb5, 0x4e, 0x57, 0xeb, 0xb7, 0x5b, 0x8a, 0xa6, 0x3c, 0x78, 0xa0, 0x34, 0x07, 0x7d, 0xf1, 0x3e, - 0x11, 0xb3, 0x07, 0xa9, 0x0d, 0x5e, 0xfb, 0x7d, 0x16, 0x36, 0x96, 0x58, 0x82, 0x1b, 0xe1, 0xcd, - 0x42, 0x5c, 0x76, 0xde, 0xbd, 0x88, 0xf5, 0x75, 0x56, 0x10, 0xf4, 0x88, 0x17, 0x84, 0x17, 0x91, - 0x1b, 0xc0, 0xbc, 0x64, 0x07, 0xe6, 0xd0, 0xa4, 0x5e, 0xf8, 0x9c, 0x23, 0xae, 0x1b, 0x6b, 0x33, - 0x5c, 0xbc, 0xe8, 0xfc, 0x1f, 0x60, 0xd7, 0xf1, 0xcd, 0xc0, 0x7c, 0x4c, 0x35, 0xd3, 0x8e, 0xde, - 0x7e, 0xd8, 0xf5, 0x23, 0xa7, 0xa2, 0xa8, 0xa7, 0x6d, 0x07, 0x31, 0xdb, 0xa6, 0x23, 0x32, 0xc7, - 0x66, 0xc9, 0x3c, 0xab, 0xa2, 0xa8, 0x27, 0x66, 0x5f, 0x83, 0x8a, 0xe1, 0x4c, 0x59, 0x4d, 0x26, - 0x78, 0xec, 0xec, 0x90, 0xd4, 0xb2, 0xc0, 0x62, 0x4a, 0x58, 0x6d, 0xcf, 0x1e, 0x9d, 0x2a, 0x6a, - 0x59, 0x60, 0x82, 0x72, 0x1d, 0xd6, 0xc8, 0x68, 0xe4, 0x31, 0xe5, 0x91, 0x22, 0x71, 0x7f, 0xa8, - 0xc6, 0x30, 0x27, 0x6e, 0x1d, 0x42, 0x31, 0xf2, 0x03, 0x3b, 0xaa, 0x99, 0x27, 0x34, 0x57, 0x5c, - 0x8a, 0x33, 0x3b, 0x25, 0xb5, 0x68, 0x47, 0x9d, 0xd7, 0xa0, 0x62, 0xfa, 0xda, 0xec, 0x0d, 0x3d, - 0xb3, 0x9d, 0xd9, 0x29, 0xaa, 0x65, 0xd3, 0x8f, 0xdf, 0x1f, 0x6b, 0x5f, 0x65, 0xa0, 0x9a, 0xfe, - 0x06, 0x80, 0x5b, 0x50, 0xb4, 0x1c, 0x9d, 0xf0, 0xd0, 0x12, 0x1f, 0xa0, 0x76, 0x9e, 0xf3, 0xd9, - 0xa0, 0x7e, 0x14, 0xf2, 0xd5, 0x58, 0x72, 0xeb, 0x6f, 0x12, 0x14, 0x23, 0x18, 0x5f, 0x82, 0x9c, - 0x4b, 0x82, 0x31, 0x57, 0x97, 0xdf, 0xcf, 0x20, 0x49, 0xe5, 0x6d, 0x86, 0xfb, 0x2e, 0xb1, 0x79, - 0x08, 0x84, 0x38, 0x6b, 0xb3, 0x75, 0xb5, 0x28, 0x31, 0xf8, 0xe5, 0xc4, 0x99, 0x4c, 0xa8, 0x1d, - 0xf8, 0xd1, 0xba, 0x86, 0x78, 0x33, 0x84, 0xf1, 0x3b, 0xb0, 0x1e, 0x78, 0xc4, 0xb4, 0x52, 0xdc, - 0x1c, 0xe7, 0xa2, 0xa8, 0x23, 0x26, 0xef, 0xc1, 0x95, 0x48, 0xaf, 0x41, 0x03, 0xa2, 0x8f, 0xa9, - 0x31, 0x13, 0x2a, 0xf0, 0x47, 0x88, 0xcb, 0x21, 0xa1, 0x15, 0xf6, 0x47, 0xb2, 0xb5, 0x6f, 0x24, - 0x58, 0x8f, 0xae, 0x53, 0x46, 0xec, 0xac, 0x63, 0x00, 0x62, 0xdb, 0x4e, 0x90, 0x74, 0xd7, 0x62, - 0x28, 0x2f, 0xc8, 0xd5, 0x1b, 0xb1, 0x90, 0x9a, 0x50, 0xb0, 0x35, 0x01, 0x98, 0xf5, 0x9c, 0xeb, - 0xb6, 0xab, 0x50, 0x0e, 0x3f, 0xf0, 0xf0, 0xaf, 0x84, 0xe2, 0x02, 0x0e, 0x02, 0x62, 0xf7, 0x2e, - 0xbc, 0x09, 0xf9, 0x53, 0x3a, 0x32, 0xed, 0xf0, 0xd9, 0x56, 0x34, 0xa2, 0x67, 0x92, 0x5c, 0xfc, - 0x4c, 0xb2, 0xff, 0x5b, 0x09, 0x36, 0x74, 0x67, 0x32, 0x6f, 0xef, 0x3e, 0x9a, 0x7b, 0x05, 0xf0, - 0x3f, 0x96, 0x3e, 0xff, 0x68, 0x64, 0x06, 0xe3, 0xe9, 0x69, 0x5d, 0x77, 0x26, 0xbb, 0x23, 0xc7, - 0x22, 0xf6, 0x68, 0xf6, 0x99, 0x93, 0xff, 0xd1, 0xdf, 0x1d, 0x51, 0xfb, 0xdd, 0x91, 0x93, 0xf8, - 0xe8, 0x79, 0x7f, 0xf6, 0xf7, 0xbf, 0x92, 0xf4, 0xa7, 0x4c, 0xf6, 0xa0, 0xb7, 0xff, 0xe7, 0xcc, - 0xd6, 0x81, 0x18, 0xae, 0x17, 0xb9, 0x47, 0xa5, 0x43, 0x8b, 0xea, 0x6c, 0xca, 0xff, 0x0b, 0x00, - 0x00, 0xff, 0xff, 0x1a, 0x28, 0x25, 0x79, 0x42, 0x1d, 0x00, 0x00, -} diff --git a/vendor/github.com/golang/protobuf/ptypes/any.go b/vendor/github.com/golang/protobuf/ptypes/any.go deleted file mode 100644 index b2af97f..0000000 --- a/vendor/github.com/golang/protobuf/ptypes/any.go +++ /dev/null @@ -1,139 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2016 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package ptypes - -// This file implements functions to marshal proto.Message to/from -// google.protobuf.Any message. - -import ( - "fmt" - "reflect" - "strings" - - "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/ptypes/any" -) - -const googleApis = "type.googleapis.com/" - -// AnyMessageName returns the name of the message contained in a google.protobuf.Any message. -// -// Note that regular type assertions should be done using the Is -// function. AnyMessageName is provided for less common use cases like filtering a -// sequence of Any messages based on a set of allowed message type names. -func AnyMessageName(any *any.Any) (string, error) { - if any == nil { - return "", fmt.Errorf("message is nil") - } - slash := strings.LastIndex(any.TypeUrl, "/") - if slash < 0 { - return "", fmt.Errorf("message type url %q is invalid", any.TypeUrl) - } - return any.TypeUrl[slash+1:], nil -} - -// MarshalAny takes the protocol buffer and encodes it into google.protobuf.Any. -func MarshalAny(pb proto.Message) (*any.Any, error) { - value, err := proto.Marshal(pb) - if err != nil { - return nil, err - } - return &any.Any{TypeUrl: googleApis + proto.MessageName(pb), Value: value}, nil -} - -// DynamicAny is a value that can be passed to UnmarshalAny to automatically -// allocate a proto.Message for the type specified in a google.protobuf.Any -// message. The allocated message is stored in the embedded proto.Message. -// -// Example: -// -// var x ptypes.DynamicAny -// if err := ptypes.UnmarshalAny(a, &x); err != nil { ... } -// fmt.Printf("unmarshaled message: %v", x.Message) -type DynamicAny struct { - proto.Message -} - -// Empty returns a new proto.Message of the type specified in a -// google.protobuf.Any message. It returns an error if corresponding message -// type isn't linked in. -func Empty(any *any.Any) (proto.Message, error) { - aname, err := AnyMessageName(any) - if err != nil { - return nil, err - } - - t := proto.MessageType(aname) - if t == nil { - return nil, fmt.Errorf("any: message type %q isn't linked in", aname) - } - return reflect.New(t.Elem()).Interface().(proto.Message), nil -} - -// UnmarshalAny parses the protocol buffer representation in a google.protobuf.Any -// message and places the decoded result in pb. It returns an error if type of -// contents of Any message does not match type of pb message. -// -// pb can be a proto.Message, or a *DynamicAny. -func UnmarshalAny(any *any.Any, pb proto.Message) error { - if d, ok := pb.(*DynamicAny); ok { - if d.Message == nil { - var err error - d.Message, err = Empty(any) - if err != nil { - return err - } - } - return UnmarshalAny(any, d.Message) - } - - aname, err := AnyMessageName(any) - if err != nil { - return err - } - - mname := proto.MessageName(pb) - if aname != mname { - return fmt.Errorf("mismatched message type: got %q want %q", aname, mname) - } - return proto.Unmarshal(any.Value, pb) -} - -// Is returns true if any value contains a given message type. -func Is(any *any.Any, pb proto.Message) bool { - aname, err := AnyMessageName(any) - if err != nil { - return false - } - - return aname == proto.MessageName(pb) -} diff --git a/vendor/github.com/golang/protobuf/ptypes/any/any.pb.go b/vendor/github.com/golang/protobuf/ptypes/any/any.pb.go deleted file mode 100644 index f67edc7..0000000 --- a/vendor/github.com/golang/protobuf/ptypes/any/any.pb.go +++ /dev/null @@ -1,191 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: google/protobuf/any.proto - -package any // import "github.com/golang/protobuf/ptypes/any" - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -// `Any` contains an arbitrary serialized protocol buffer message along with a -// URL that describes the type of the serialized message. -// -// Protobuf library provides support to pack/unpack Any values in the form -// of utility functions or additional generated methods of the Any type. -// -// Example 1: Pack and unpack a message in C++. -// -// Foo foo = ...; -// Any any; -// any.PackFrom(foo); -// ... -// if (any.UnpackTo(&foo)) { -// ... -// } -// -// Example 2: Pack and unpack a message in Java. -// -// Foo foo = ...; -// Any any = Any.pack(foo); -// ... -// if (any.is(Foo.class)) { -// foo = any.unpack(Foo.class); -// } -// -// Example 3: Pack and unpack a message in Python. -// -// foo = Foo(...) -// any = Any() -// any.Pack(foo) -// ... -// if any.Is(Foo.DESCRIPTOR): -// any.Unpack(foo) -// ... -// -// Example 4: Pack and unpack a message in Go -// -// foo := &pb.Foo{...} -// any, err := ptypes.MarshalAny(foo) -// ... -// foo := &pb.Foo{} -// if err := ptypes.UnmarshalAny(any, foo); err != nil { -// ... -// } -// -// The pack methods provided by protobuf library will by default use -// 'type.googleapis.com/full.type.name' as the type URL and the unpack -// methods only use the fully qualified type name after the last '/' -// in the type URL, for example "foo.bar.com/x/y.z" will yield type -// name "y.z". -// -// -// JSON -// ==== -// The JSON representation of an `Any` value uses the regular -// representation of the deserialized, embedded message, with an -// additional field `@type` which contains the type URL. Example: -// -// package google.profile; -// message Person { -// string first_name = 1; -// string last_name = 2; -// } -// -// { -// "@type": "type.googleapis.com/google.profile.Person", -// "firstName": , -// "lastName": -// } -// -// If the embedded message type is well-known and has a custom JSON -// representation, that representation will be embedded adding a field -// `value` which holds the custom JSON in addition to the `@type` -// field. Example (for message [google.protobuf.Duration][]): -// -// { -// "@type": "type.googleapis.com/google.protobuf.Duration", -// "value": "1.212s" -// } -// -type Any struct { - // A URL/resource name whose content describes the type of the - // serialized protocol buffer message. - // - // For URLs which use the scheme `http`, `https`, or no scheme, the - // following restrictions and interpretations apply: - // - // * If no scheme is provided, `https` is assumed. - // * The last segment of the URL's path must represent the fully - // qualified name of the type (as in `path/google.protobuf.Duration`). - // The name should be in a canonical form (e.g., leading "." is - // not accepted). - // * An HTTP GET on the URL must yield a [google.protobuf.Type][] - // value in binary format, or produce an error. - // * Applications are allowed to cache lookup results based on the - // URL, or have them precompiled into a binary to avoid any - // lookup. Therefore, binary compatibility needs to be preserved - // on changes to types. (Use versioned type names to manage - // breaking changes.) - // - // Schemes other than `http`, `https` (or the empty scheme) might be - // used with implementation specific semantics. - // - TypeUrl string `protobuf:"bytes,1,opt,name=type_url,json=typeUrl" json:"type_url,omitempty"` - // Must be a valid serialized protocol buffer of the above specified type. - Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Any) Reset() { *m = Any{} } -func (m *Any) String() string { return proto.CompactTextString(m) } -func (*Any) ProtoMessage() {} -func (*Any) Descriptor() ([]byte, []int) { - return fileDescriptor_any_744b9ca530f228db, []int{0} -} -func (*Any) XXX_WellKnownType() string { return "Any" } -func (m *Any) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Any.Unmarshal(m, b) -} -func (m *Any) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Any.Marshal(b, m, deterministic) -} -func (dst *Any) XXX_Merge(src proto.Message) { - xxx_messageInfo_Any.Merge(dst, src) -} -func (m *Any) XXX_Size() int { - return xxx_messageInfo_Any.Size(m) -} -func (m *Any) XXX_DiscardUnknown() { - xxx_messageInfo_Any.DiscardUnknown(m) -} - -var xxx_messageInfo_Any proto.InternalMessageInfo - -func (m *Any) GetTypeUrl() string { - if m != nil { - return m.TypeUrl - } - return "" -} - -func (m *Any) GetValue() []byte { - if m != nil { - return m.Value - } - return nil -} - -func init() { - proto.RegisterType((*Any)(nil), "google.protobuf.Any") -} - -func init() { proto.RegisterFile("google/protobuf/any.proto", fileDescriptor_any_744b9ca530f228db) } - -var fileDescriptor_any_744b9ca530f228db = []byte{ - // 185 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4c, 0xcf, 0xcf, 0x4f, - 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0xcc, 0xab, 0xd4, - 0x03, 0x73, 0x84, 0xf8, 0x21, 0x52, 0x7a, 0x30, 0x29, 0x25, 0x33, 0x2e, 0x66, 0xc7, 0xbc, 0x4a, - 0x21, 0x49, 0x2e, 0x8e, 0x92, 0xca, 0x82, 0xd4, 0xf8, 0xd2, 0xa2, 0x1c, 0x09, 0x46, 0x05, 0x46, - 0x0d, 0xce, 0x20, 0x76, 0x10, 0x3f, 0xb4, 0x28, 0x47, 0x48, 0x84, 0x8b, 0xb5, 0x2c, 0x31, 0xa7, - 0x34, 0x55, 0x82, 0x49, 0x81, 0x51, 0x83, 0x27, 0x08, 0xc2, 0x71, 0xca, 0xe7, 0x12, 0x4e, 0xce, - 0xcf, 0xd5, 0x43, 0x33, 0xce, 0x89, 0xc3, 0x31, 0xaf, 0x32, 0x00, 0xc4, 0x09, 0x60, 0x8c, 0x52, - 0x4d, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc, - 0x4b, 0x47, 0xb8, 0xa8, 0x00, 0x64, 0x7a, 0x31, 0xc8, 0x61, 0x8b, 0x98, 0x98, 0xdd, 0x03, 0x9c, - 0x56, 0x31, 0xc9, 0xb9, 0x43, 0x8c, 0x0a, 0x80, 0x2a, 0xd1, 0x0b, 0x4f, 0xcd, 0xc9, 0xf1, 0xce, - 0xcb, 0x2f, 0xcf, 0x0b, 0x01, 0x29, 0x4d, 0x62, 0x03, 0xeb, 0x35, 0x06, 0x04, 0x00, 0x00, 0xff, - 0xff, 0x13, 0xf8, 0xe8, 0x42, 0xdd, 0x00, 0x00, 0x00, -} diff --git a/vendor/github.com/golang/protobuf/ptypes/doc.go b/vendor/github.com/golang/protobuf/ptypes/doc.go deleted file mode 100644 index c0d595d..0000000 --- a/vendor/github.com/golang/protobuf/ptypes/doc.go +++ /dev/null @@ -1,35 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2016 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -/* -Package ptypes contains code for interacting with well-known types. -*/ -package ptypes diff --git a/vendor/github.com/golang/protobuf/ptypes/duration.go b/vendor/github.com/golang/protobuf/ptypes/duration.go deleted file mode 100644 index 65cb0f8..0000000 --- a/vendor/github.com/golang/protobuf/ptypes/duration.go +++ /dev/null @@ -1,102 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2016 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package ptypes - -// This file implements conversions between google.protobuf.Duration -// and time.Duration. - -import ( - "errors" - "fmt" - "time" - - durpb "github.com/golang/protobuf/ptypes/duration" -) - -const ( - // Range of a durpb.Duration in seconds, as specified in - // google/protobuf/duration.proto. This is about 10,000 years in seconds. - maxSeconds = int64(10000 * 365.25 * 24 * 60 * 60) - minSeconds = -maxSeconds -) - -// validateDuration determines whether the durpb.Duration is valid according to the -// definition in google/protobuf/duration.proto. A valid durpb.Duration -// may still be too large to fit into a time.Duration (the range of durpb.Duration -// is about 10,000 years, and the range of time.Duration is about 290). -func validateDuration(d *durpb.Duration) error { - if d == nil { - return errors.New("duration: nil Duration") - } - if d.Seconds < minSeconds || d.Seconds > maxSeconds { - return fmt.Errorf("duration: %v: seconds out of range", d) - } - if d.Nanos <= -1e9 || d.Nanos >= 1e9 { - return fmt.Errorf("duration: %v: nanos out of range", d) - } - // Seconds and Nanos must have the same sign, unless d.Nanos is zero. - if (d.Seconds < 0 && d.Nanos > 0) || (d.Seconds > 0 && d.Nanos < 0) { - return fmt.Errorf("duration: %v: seconds and nanos have different signs", d) - } - return nil -} - -// Duration converts a durpb.Duration to a time.Duration. Duration -// returns an error if the durpb.Duration is invalid or is too large to be -// represented in a time.Duration. -func Duration(p *durpb.Duration) (time.Duration, error) { - if err := validateDuration(p); err != nil { - return 0, err - } - d := time.Duration(p.Seconds) * time.Second - if int64(d/time.Second) != p.Seconds { - return 0, fmt.Errorf("duration: %v is out of range for time.Duration", p) - } - if p.Nanos != 0 { - d += time.Duration(p.Nanos) - if (d < 0) != (p.Nanos < 0) { - return 0, fmt.Errorf("duration: %v is out of range for time.Duration", p) - } - } - return d, nil -} - -// DurationProto converts a time.Duration to a durpb.Duration. -func DurationProto(d time.Duration) *durpb.Duration { - nanos := d.Nanoseconds() - secs := nanos / 1e9 - nanos -= secs * 1e9 - return &durpb.Duration{ - Seconds: secs, - Nanos: int32(nanos), - } -} diff --git a/vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go b/vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go deleted file mode 100644 index 4d75473..0000000 --- a/vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go +++ /dev/null @@ -1,159 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: google/protobuf/duration.proto - -package duration // import "github.com/golang/protobuf/ptypes/duration" - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -// A Duration represents a signed, fixed-length span of time represented -// as a count of seconds and fractions of seconds at nanosecond -// resolution. It is independent of any calendar and concepts like "day" -// or "month". It is related to Timestamp in that the difference between -// two Timestamp values is a Duration and it can be added or subtracted -// from a Timestamp. Range is approximately +-10,000 years. -// -// # Examples -// -// Example 1: Compute Duration from two Timestamps in pseudo code. -// -// Timestamp start = ...; -// Timestamp end = ...; -// Duration duration = ...; -// -// duration.seconds = end.seconds - start.seconds; -// duration.nanos = end.nanos - start.nanos; -// -// if (duration.seconds < 0 && duration.nanos > 0) { -// duration.seconds += 1; -// duration.nanos -= 1000000000; -// } else if (durations.seconds > 0 && duration.nanos < 0) { -// duration.seconds -= 1; -// duration.nanos += 1000000000; -// } -// -// Example 2: Compute Timestamp from Timestamp + Duration in pseudo code. -// -// Timestamp start = ...; -// Duration duration = ...; -// Timestamp end = ...; -// -// end.seconds = start.seconds + duration.seconds; -// end.nanos = start.nanos + duration.nanos; -// -// if (end.nanos < 0) { -// end.seconds -= 1; -// end.nanos += 1000000000; -// } else if (end.nanos >= 1000000000) { -// end.seconds += 1; -// end.nanos -= 1000000000; -// } -// -// Example 3: Compute Duration from datetime.timedelta in Python. -// -// td = datetime.timedelta(days=3, minutes=10) -// duration = Duration() -// duration.FromTimedelta(td) -// -// # JSON Mapping -// -// In JSON format, the Duration type is encoded as a string rather than an -// object, where the string ends in the suffix "s" (indicating seconds) and -// is preceded by the number of seconds, with nanoseconds expressed as -// fractional seconds. For example, 3 seconds with 0 nanoseconds should be -// encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should -// be expressed in JSON format as "3.000000001s", and 3 seconds and 1 -// microsecond should be expressed in JSON format as "3.000001s". -// -// -type Duration struct { - // Signed seconds of the span of time. Must be from -315,576,000,000 - // to +315,576,000,000 inclusive. Note: these bounds are computed from: - // 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years - Seconds int64 `protobuf:"varint,1,opt,name=seconds" json:"seconds,omitempty"` - // Signed fractions of a second at nanosecond resolution of the span - // of time. Durations less than one second are represented with a 0 - // `seconds` field and a positive or negative `nanos` field. For durations - // of one second or more, a non-zero value for the `nanos` field must be - // of the same sign as the `seconds` field. Must be from -999,999,999 - // to +999,999,999 inclusive. - Nanos int32 `protobuf:"varint,2,opt,name=nanos" json:"nanos,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Duration) Reset() { *m = Duration{} } -func (m *Duration) String() string { return proto.CompactTextString(m) } -func (*Duration) ProtoMessage() {} -func (*Duration) Descriptor() ([]byte, []int) { - return fileDescriptor_duration_e7d612259e3f0613, []int{0} -} -func (*Duration) XXX_WellKnownType() string { return "Duration" } -func (m *Duration) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Duration.Unmarshal(m, b) -} -func (m *Duration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Duration.Marshal(b, m, deterministic) -} -func (dst *Duration) XXX_Merge(src proto.Message) { - xxx_messageInfo_Duration.Merge(dst, src) -} -func (m *Duration) XXX_Size() int { - return xxx_messageInfo_Duration.Size(m) -} -func (m *Duration) XXX_DiscardUnknown() { - xxx_messageInfo_Duration.DiscardUnknown(m) -} - -var xxx_messageInfo_Duration proto.InternalMessageInfo - -func (m *Duration) GetSeconds() int64 { - if m != nil { - return m.Seconds - } - return 0 -} - -func (m *Duration) GetNanos() int32 { - if m != nil { - return m.Nanos - } - return 0 -} - -func init() { - proto.RegisterType((*Duration)(nil), "google.protobuf.Duration") -} - -func init() { - proto.RegisterFile("google/protobuf/duration.proto", fileDescriptor_duration_e7d612259e3f0613) -} - -var fileDescriptor_duration_e7d612259e3f0613 = []byte{ - // 190 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4b, 0xcf, 0xcf, 0x4f, - 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0x29, 0x2d, 0x4a, - 0x2c, 0xc9, 0xcc, 0xcf, 0xd3, 0x03, 0x8b, 0x08, 0xf1, 0x43, 0xe4, 0xf5, 0x60, 0xf2, 0x4a, 0x56, - 0x5c, 0x1c, 0x2e, 0x50, 0x25, 0x42, 0x12, 0x5c, 0xec, 0xc5, 0xa9, 0xc9, 0xf9, 0x79, 0x29, 0xc5, - 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0xcc, 0x41, 0x30, 0xae, 0x90, 0x08, 0x17, 0x6b, 0x5e, 0x62, 0x5e, - 0x7e, 0xb1, 0x04, 0x93, 0x02, 0xa3, 0x06, 0x6b, 0x10, 0x84, 0xe3, 0x54, 0xc3, 0x25, 0x9c, 0x9c, - 0x9f, 0xab, 0x87, 0x66, 0xa4, 0x13, 0x2f, 0xcc, 0xc0, 0x00, 0x90, 0x48, 0x00, 0x63, 0x94, 0x56, - 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, 0x7a, 0x7e, 0x4e, 0x62, 0x5e, - 0x3a, 0xc2, 0x7d, 0x05, 0x25, 0x95, 0x05, 0xa9, 0xc5, 0x70, 0x67, 0xfe, 0x60, 0x64, 0x5c, 0xc4, - 0xc4, 0xec, 0x1e, 0xe0, 0xb4, 0x8a, 0x49, 0xce, 0x1d, 0x62, 0x6e, 0x00, 0x54, 0xa9, 0x5e, 0x78, - 0x6a, 0x4e, 0x8e, 0x77, 0x5e, 0x7e, 0x79, 0x5e, 0x08, 0x48, 0x4b, 0x12, 0x1b, 0xd8, 0x0c, 0x63, - 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdc, 0x84, 0x30, 0xff, 0xf3, 0x00, 0x00, 0x00, -} diff --git a/vendor/github.com/golang/protobuf/ptypes/timestamp.go b/vendor/github.com/golang/protobuf/ptypes/timestamp.go deleted file mode 100644 index 47f10db..0000000 --- a/vendor/github.com/golang/protobuf/ptypes/timestamp.go +++ /dev/null @@ -1,134 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2016 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package ptypes - -// This file implements operations on google.protobuf.Timestamp. - -import ( - "errors" - "fmt" - "time" - - tspb "github.com/golang/protobuf/ptypes/timestamp" -) - -const ( - // Seconds field of the earliest valid Timestamp. - // This is time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC).Unix(). - minValidSeconds = -62135596800 - // Seconds field just after the latest valid Timestamp. - // This is time.Date(10000, 1, 1, 0, 0, 0, 0, time.UTC).Unix(). - maxValidSeconds = 253402300800 -) - -// validateTimestamp determines whether a Timestamp is valid. -// A valid timestamp represents a time in the range -// [0001-01-01, 10000-01-01) and has a Nanos field -// in the range [0, 1e9). -// -// If the Timestamp is valid, validateTimestamp returns nil. -// Otherwise, it returns an error that describes -// the problem. -// -// Every valid Timestamp can be represented by a time.Time, but the converse is not true. -func validateTimestamp(ts *tspb.Timestamp) error { - if ts == nil { - return errors.New("timestamp: nil Timestamp") - } - if ts.Seconds < minValidSeconds { - return fmt.Errorf("timestamp: %v before 0001-01-01", ts) - } - if ts.Seconds >= maxValidSeconds { - return fmt.Errorf("timestamp: %v after 10000-01-01", ts) - } - if ts.Nanos < 0 || ts.Nanos >= 1e9 { - return fmt.Errorf("timestamp: %v: nanos not in range [0, 1e9)", ts) - } - return nil -} - -// Timestamp converts a google.protobuf.Timestamp proto to a time.Time. -// It returns an error if the argument is invalid. -// -// Unlike most Go functions, if Timestamp returns an error, the first return value -// is not the zero time.Time. Instead, it is the value obtained from the -// time.Unix function when passed the contents of the Timestamp, in the UTC -// locale. This may or may not be a meaningful time; many invalid Timestamps -// do map to valid time.Times. -// -// A nil Timestamp returns an error. The first return value in that case is -// undefined. -func Timestamp(ts *tspb.Timestamp) (time.Time, error) { - // Don't return the zero value on error, because corresponds to a valid - // timestamp. Instead return whatever time.Unix gives us. - var t time.Time - if ts == nil { - t = time.Unix(0, 0).UTC() // treat nil like the empty Timestamp - } else { - t = time.Unix(ts.Seconds, int64(ts.Nanos)).UTC() - } - return t, validateTimestamp(ts) -} - -// TimestampNow returns a google.protobuf.Timestamp for the current time. -func TimestampNow() *tspb.Timestamp { - ts, err := TimestampProto(time.Now()) - if err != nil { - panic("ptypes: time.Now() out of Timestamp range") - } - return ts -} - -// TimestampProto converts the time.Time to a google.protobuf.Timestamp proto. -// It returns an error if the resulting Timestamp is invalid. -func TimestampProto(t time.Time) (*tspb.Timestamp, error) { - seconds := t.Unix() - nanos := int32(t.Sub(time.Unix(seconds, 0))) - ts := &tspb.Timestamp{ - Seconds: seconds, - Nanos: nanos, - } - if err := validateTimestamp(ts); err != nil { - return nil, err - } - return ts, nil -} - -// TimestampString returns the RFC 3339 string for valid Timestamps. For invalid -// Timestamps, it returns an error message in parentheses. -func TimestampString(ts *tspb.Timestamp) string { - t, err := Timestamp(ts) - if err != nil { - return fmt.Sprintf("(%v)", err) - } - return t.Format(time.RFC3339Nano) -} diff --git a/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go b/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go deleted file mode 100644 index e9c2222..0000000 --- a/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go +++ /dev/null @@ -1,175 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: google/protobuf/timestamp.proto - -package timestamp // import "github.com/golang/protobuf/ptypes/timestamp" - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -// A Timestamp represents a point in time independent of any time zone -// or calendar, represented as seconds and fractions of seconds at -// nanosecond resolution in UTC Epoch time. It is encoded using the -// Proleptic Gregorian Calendar which extends the Gregorian calendar -// backwards to year one. It is encoded assuming all minutes are 60 -// seconds long, i.e. leap seconds are "smeared" so that no leap second -// table is needed for interpretation. Range is from -// 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. -// By restricting to that range, we ensure that we can convert to -// and from RFC 3339 date strings. -// See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). -// -// # Examples -// -// Example 1: Compute Timestamp from POSIX `time()`. -// -// Timestamp timestamp; -// timestamp.set_seconds(time(NULL)); -// timestamp.set_nanos(0); -// -// Example 2: Compute Timestamp from POSIX `gettimeofday()`. -// -// struct timeval tv; -// gettimeofday(&tv, NULL); -// -// Timestamp timestamp; -// timestamp.set_seconds(tv.tv_sec); -// timestamp.set_nanos(tv.tv_usec * 1000); -// -// Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. -// -// FILETIME ft; -// GetSystemTimeAsFileTime(&ft); -// UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; -// -// // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z -// // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. -// Timestamp timestamp; -// timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); -// timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); -// -// Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. -// -// long millis = System.currentTimeMillis(); -// -// Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) -// .setNanos((int) ((millis % 1000) * 1000000)).build(); -// -// -// Example 5: Compute Timestamp from current time in Python. -// -// timestamp = Timestamp() -// timestamp.GetCurrentTime() -// -// # JSON Mapping -// -// In JSON format, the Timestamp type is encoded as a string in the -// [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the -// format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" -// where {year} is always expressed using four digits while {month}, {day}, -// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional -// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), -// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone -// is required, though only UTC (as indicated by "Z") is presently supported. -// -// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past -// 01:30 UTC on January 15, 2017. -// -// In JavaScript, one can convert a Date object to this format using the -// standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString] -// method. In Python, a standard `datetime.datetime` object can be converted -// to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) -// with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one -// can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( -// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime--) -// to obtain a formatter capable of generating timestamps in this format. -// -// -type Timestamp struct { - // Represents seconds of UTC time since Unix epoch - // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to - // 9999-12-31T23:59:59Z inclusive. - Seconds int64 `protobuf:"varint,1,opt,name=seconds" json:"seconds,omitempty"` - // Non-negative fractions of a second at nanosecond resolution. Negative - // second values with fractions must still have non-negative nanos values - // that count forward in time. Must be from 0 to 999,999,999 - // inclusive. - Nanos int32 `protobuf:"varint,2,opt,name=nanos" json:"nanos,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Timestamp) Reset() { *m = Timestamp{} } -func (m *Timestamp) String() string { return proto.CompactTextString(m) } -func (*Timestamp) ProtoMessage() {} -func (*Timestamp) Descriptor() ([]byte, []int) { - return fileDescriptor_timestamp_b826e8e5fba671a8, []int{0} -} -func (*Timestamp) XXX_WellKnownType() string { return "Timestamp" } -func (m *Timestamp) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Timestamp.Unmarshal(m, b) -} -func (m *Timestamp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Timestamp.Marshal(b, m, deterministic) -} -func (dst *Timestamp) XXX_Merge(src proto.Message) { - xxx_messageInfo_Timestamp.Merge(dst, src) -} -func (m *Timestamp) XXX_Size() int { - return xxx_messageInfo_Timestamp.Size(m) -} -func (m *Timestamp) XXX_DiscardUnknown() { - xxx_messageInfo_Timestamp.DiscardUnknown(m) -} - -var xxx_messageInfo_Timestamp proto.InternalMessageInfo - -func (m *Timestamp) GetSeconds() int64 { - if m != nil { - return m.Seconds - } - return 0 -} - -func (m *Timestamp) GetNanos() int32 { - if m != nil { - return m.Nanos - } - return 0 -} - -func init() { - proto.RegisterType((*Timestamp)(nil), "google.protobuf.Timestamp") -} - -func init() { - proto.RegisterFile("google/protobuf/timestamp.proto", fileDescriptor_timestamp_b826e8e5fba671a8) -} - -var fileDescriptor_timestamp_b826e8e5fba671a8 = []byte{ - // 191 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4f, 0xcf, 0xcf, 0x4f, - 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0xc9, 0xcc, 0x4d, - 0x2d, 0x2e, 0x49, 0xcc, 0x2d, 0xd0, 0x03, 0x0b, 0x09, 0xf1, 0x43, 0x14, 0xe8, 0xc1, 0x14, 0x28, - 0x59, 0x73, 0x71, 0x86, 0xc0, 0xd4, 0x08, 0x49, 0x70, 0xb1, 0x17, 0xa7, 0x26, 0xe7, 0xe7, 0xa5, - 0x14, 0x4b, 0x30, 0x2a, 0x30, 0x6a, 0x30, 0x07, 0xc1, 0xb8, 0x42, 0x22, 0x5c, 0xac, 0x79, 0x89, - 0x79, 0xf9, 0xc5, 0x12, 0x4c, 0x0a, 0x8c, 0x1a, 0xac, 0x41, 0x10, 0x8e, 0x53, 0x1d, 0x97, 0x70, - 0x72, 0x7e, 0xae, 0x1e, 0x9a, 0x99, 0x4e, 0x7c, 0x70, 0x13, 0x03, 0x40, 0x42, 0x01, 0x8c, 0x51, - 0xda, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0xe9, 0xf9, 0x39, 0x89, - 0x79, 0xe9, 0x08, 0x27, 0x16, 0x94, 0x54, 0x16, 0xa4, 0x16, 0x23, 0x5c, 0xfa, 0x83, 0x91, 0x71, - 0x11, 0x13, 0xb3, 0x7b, 0x80, 0xd3, 0x2a, 0x26, 0x39, 0x77, 0x88, 0xc9, 0x01, 0x50, 0xb5, 0x7a, - 0xe1, 0xa9, 0x39, 0x39, 0xde, 0x79, 0xf9, 0xe5, 0x79, 0x21, 0x20, 0x3d, 0x49, 0x6c, 0x60, 0x43, - 0x8c, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xbc, 0x77, 0x4a, 0x07, 0xf7, 0x00, 0x00, 0x00, -} diff --git a/vendor/github.com/golang/snappy/AUTHORS b/vendor/github.com/golang/snappy/AUTHORS deleted file mode 100644 index bcfa195..0000000 --- a/vendor/github.com/golang/snappy/AUTHORS +++ /dev/null @@ -1,15 +0,0 @@ -# This is the official list of Snappy-Go authors for copyright purposes. -# This file is distinct from the CONTRIBUTORS files. -# See the latter for an explanation. - -# Names should be added to this file as -# Name or Organization -# The email address is not required for organizations. - -# Please keep the list sorted. - -Damian Gryski -Google Inc. -Jan Mercl <0xjnml@gmail.com> -Rodolfo Carvalho -Sebastien Binet diff --git a/vendor/github.com/golang/snappy/CONTRIBUTORS b/vendor/github.com/golang/snappy/CONTRIBUTORS deleted file mode 100644 index 931ae31..0000000 --- a/vendor/github.com/golang/snappy/CONTRIBUTORS +++ /dev/null @@ -1,37 +0,0 @@ -# This is the official list of people who can contribute -# (and typically have contributed) code to the Snappy-Go repository. -# The AUTHORS file lists the copyright holders; this file -# lists people. For example, Google employees are listed here -# but not in AUTHORS, because Google holds the copyright. -# -# The submission process automatically checks to make sure -# that people submitting code are listed in this file (by email address). -# -# Names should be added to this file only after verifying that -# the individual or the individual's organization has agreed to -# the appropriate Contributor License Agreement, found here: -# -# http://code.google.com/legal/individual-cla-v1.0.html -# http://code.google.com/legal/corporate-cla-v1.0.html -# -# The agreement for individuals can be filled out on the web. -# -# When adding J Random Contributor's name to this file, -# either J's name or J's organization's name should be -# added to the AUTHORS file, depending on whether the -# individual or corporate CLA was used. - -# Names should be added to this file like so: -# Name - -# Please keep the list sorted. - -Damian Gryski -Jan Mercl <0xjnml@gmail.com> -Kai Backman -Marc-Antoine Ruel -Nigel Tao -Rob Pike -Rodolfo Carvalho -Russ Cox -Sebastien Binet diff --git a/vendor/github.com/golang/snappy/LICENSE b/vendor/github.com/golang/snappy/LICENSE deleted file mode 100644 index 6050c10..0000000 --- a/vendor/github.com/golang/snappy/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2011 The Snappy-Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/golang/snappy/decode.go b/vendor/github.com/golang/snappy/decode.go deleted file mode 100644 index 72efb03..0000000 --- a/vendor/github.com/golang/snappy/decode.go +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright 2011 The Snappy-Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package snappy - -import ( - "encoding/binary" - "errors" - "io" -) - -var ( - // ErrCorrupt reports that the input is invalid. - ErrCorrupt = errors.New("snappy: corrupt input") - // ErrTooLarge reports that the uncompressed length is too large. - ErrTooLarge = errors.New("snappy: decoded block is too large") - // ErrUnsupported reports that the input isn't supported. - ErrUnsupported = errors.New("snappy: unsupported input") - - errUnsupportedLiteralLength = errors.New("snappy: unsupported literal length") -) - -// DecodedLen returns the length of the decoded block. -func DecodedLen(src []byte) (int, error) { - v, _, err := decodedLen(src) - return v, err -} - -// decodedLen returns the length of the decoded block and the number of bytes -// that the length header occupied. -func decodedLen(src []byte) (blockLen, headerLen int, err error) { - v, n := binary.Uvarint(src) - if n <= 0 || v > 0xffffffff { - return 0, 0, ErrCorrupt - } - - const wordSize = 32 << (^uint(0) >> 32 & 1) - if wordSize == 32 && v > 0x7fffffff { - return 0, 0, ErrTooLarge - } - return int(v), n, nil -} - -const ( - decodeErrCodeCorrupt = 1 - decodeErrCodeUnsupportedLiteralLength = 2 -) - -// Decode returns the decoded form of src. The returned slice may be a sub- -// slice of dst if dst was large enough to hold the entire decoded block. -// Otherwise, a newly allocated slice will be returned. -// -// The dst and src must not overlap. It is valid to pass a nil dst. -func Decode(dst, src []byte) ([]byte, error) { - dLen, s, err := decodedLen(src) - if err != nil { - return nil, err - } - if dLen <= len(dst) { - dst = dst[:dLen] - } else { - dst = make([]byte, dLen) - } - switch decode(dst, src[s:]) { - case 0: - return dst, nil - case decodeErrCodeUnsupportedLiteralLength: - return nil, errUnsupportedLiteralLength - } - return nil, ErrCorrupt -} - -// NewReader returns a new Reader that decompresses from r, using the framing -// format described at -// https://github.com/google/snappy/blob/master/framing_format.txt -func NewReader(r io.Reader) *Reader { - return &Reader{ - r: r, - decoded: make([]byte, maxBlockSize), - buf: make([]byte, maxEncodedLenOfMaxBlockSize+checksumSize), - } -} - -// Reader is an io.Reader that can read Snappy-compressed bytes. -type Reader struct { - r io.Reader - err error - decoded []byte - buf []byte - // decoded[i:j] contains decoded bytes that have not yet been passed on. - i, j int - readHeader bool -} - -// Reset discards any buffered data, resets all state, and switches the Snappy -// reader to read from r. This permits reusing a Reader rather than allocating -// a new one. -func (r *Reader) Reset(reader io.Reader) { - r.r = reader - r.err = nil - r.i = 0 - r.j = 0 - r.readHeader = false -} - -func (r *Reader) readFull(p []byte, allowEOF bool) (ok bool) { - if _, r.err = io.ReadFull(r.r, p); r.err != nil { - if r.err == io.ErrUnexpectedEOF || (r.err == io.EOF && !allowEOF) { - r.err = ErrCorrupt - } - return false - } - return true -} - -// Read satisfies the io.Reader interface. -func (r *Reader) Read(p []byte) (int, error) { - if r.err != nil { - return 0, r.err - } - for { - if r.i < r.j { - n := copy(p, r.decoded[r.i:r.j]) - r.i += n - return n, nil - } - if !r.readFull(r.buf[:4], true) { - return 0, r.err - } - chunkType := r.buf[0] - if !r.readHeader { - if chunkType != chunkTypeStreamIdentifier { - r.err = ErrCorrupt - return 0, r.err - } - r.readHeader = true - } - chunkLen := int(r.buf[1]) | int(r.buf[2])<<8 | int(r.buf[3])<<16 - if chunkLen > len(r.buf) { - r.err = ErrUnsupported - return 0, r.err - } - - // The chunk types are specified at - // https://github.com/google/snappy/blob/master/framing_format.txt - switch chunkType { - case chunkTypeCompressedData: - // Section 4.2. Compressed data (chunk type 0x00). - if chunkLen < checksumSize { - r.err = ErrCorrupt - return 0, r.err - } - buf := r.buf[:chunkLen] - if !r.readFull(buf, false) { - return 0, r.err - } - checksum := uint32(buf[0]) | uint32(buf[1])<<8 | uint32(buf[2])<<16 | uint32(buf[3])<<24 - buf = buf[checksumSize:] - - n, err := DecodedLen(buf) - if err != nil { - r.err = err - return 0, r.err - } - if n > len(r.decoded) { - r.err = ErrCorrupt - return 0, r.err - } - if _, err := Decode(r.decoded, buf); err != nil { - r.err = err - return 0, r.err - } - if crc(r.decoded[:n]) != checksum { - r.err = ErrCorrupt - return 0, r.err - } - r.i, r.j = 0, n - continue - - case chunkTypeUncompressedData: - // Section 4.3. Uncompressed data (chunk type 0x01). - if chunkLen < checksumSize { - r.err = ErrCorrupt - return 0, r.err - } - buf := r.buf[:checksumSize] - if !r.readFull(buf, false) { - return 0, r.err - } - checksum := uint32(buf[0]) | uint32(buf[1])<<8 | uint32(buf[2])<<16 | uint32(buf[3])<<24 - // Read directly into r.decoded instead of via r.buf. - n := chunkLen - checksumSize - if n > len(r.decoded) { - r.err = ErrCorrupt - return 0, r.err - } - if !r.readFull(r.decoded[:n], false) { - return 0, r.err - } - if crc(r.decoded[:n]) != checksum { - r.err = ErrCorrupt - return 0, r.err - } - r.i, r.j = 0, n - continue - - case chunkTypeStreamIdentifier: - // Section 4.1. Stream identifier (chunk type 0xff). - if chunkLen != len(magicBody) { - r.err = ErrCorrupt - return 0, r.err - } - if !r.readFull(r.buf[:len(magicBody)], false) { - return 0, r.err - } - for i := 0; i < len(magicBody); i++ { - if r.buf[i] != magicBody[i] { - r.err = ErrCorrupt - return 0, r.err - } - } - continue - } - - if chunkType <= 0x7f { - // Section 4.5. Reserved unskippable chunks (chunk types 0x02-0x7f). - r.err = ErrUnsupported - return 0, r.err - } - // Section 4.4 Padding (chunk type 0xfe). - // Section 4.6. Reserved skippable chunks (chunk types 0x80-0xfd). - if !r.readFull(r.buf[:chunkLen], false) { - return 0, r.err - } - } -} diff --git a/vendor/github.com/golang/snappy/decode_amd64.go b/vendor/github.com/golang/snappy/decode_amd64.go deleted file mode 100644 index fcd192b..0000000 --- a/vendor/github.com/golang/snappy/decode_amd64.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2016 The Snappy-Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build !appengine -// +build gc -// +build !noasm - -package snappy - -// decode has the same semantics as in decode_other.go. -// -//go:noescape -func decode(dst, src []byte) int diff --git a/vendor/github.com/golang/snappy/decode_amd64.s b/vendor/github.com/golang/snappy/decode_amd64.s deleted file mode 100644 index e6179f6..0000000 --- a/vendor/github.com/golang/snappy/decode_amd64.s +++ /dev/null @@ -1,490 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build !appengine -// +build gc -// +build !noasm - -#include "textflag.h" - -// The asm code generally follows the pure Go code in decode_other.go, except -// where marked with a "!!!". - -// func decode(dst, src []byte) int -// -// All local variables fit into registers. The non-zero stack size is only to -// spill registers and push args when issuing a CALL. The register allocation: -// - AX scratch -// - BX scratch -// - CX length or x -// - DX offset -// - SI &src[s] -// - DI &dst[d] -// + R8 dst_base -// + R9 dst_len -// + R10 dst_base + dst_len -// + R11 src_base -// + R12 src_len -// + R13 src_base + src_len -// - R14 used by doCopy -// - R15 used by doCopy -// -// The registers R8-R13 (marked with a "+") are set at the start of the -// function, and after a CALL returns, and are not otherwise modified. -// -// The d variable is implicitly DI - R8, and len(dst)-d is R10 - DI. -// The s variable is implicitly SI - R11, and len(src)-s is R13 - SI. -TEXT ·decode(SB), NOSPLIT, $48-56 - // Initialize SI, DI and R8-R13. - MOVQ dst_base+0(FP), R8 - MOVQ dst_len+8(FP), R9 - MOVQ R8, DI - MOVQ R8, R10 - ADDQ R9, R10 - MOVQ src_base+24(FP), R11 - MOVQ src_len+32(FP), R12 - MOVQ R11, SI - MOVQ R11, R13 - ADDQ R12, R13 - -loop: - // for s < len(src) - CMPQ SI, R13 - JEQ end - - // CX = uint32(src[s]) - // - // switch src[s] & 0x03 - MOVBLZX (SI), CX - MOVL CX, BX - ANDL $3, BX - CMPL BX, $1 - JAE tagCopy - - // ---------------------------------------- - // The code below handles literal tags. - - // case tagLiteral: - // x := uint32(src[s] >> 2) - // switch - SHRL $2, CX - CMPL CX, $60 - JAE tagLit60Plus - - // case x < 60: - // s++ - INCQ SI - -doLit: - // This is the end of the inner "switch", when we have a literal tag. - // - // We assume that CX == x and x fits in a uint32, where x is the variable - // used in the pure Go decode_other.go code. - - // length = int(x) + 1 - // - // Unlike the pure Go code, we don't need to check if length <= 0 because - // CX can hold 64 bits, so the increment cannot overflow. - INCQ CX - - // Prepare to check if copying length bytes will run past the end of dst or - // src. - // - // AX = len(dst) - d - // BX = len(src) - s - MOVQ R10, AX - SUBQ DI, AX - MOVQ R13, BX - SUBQ SI, BX - - // !!! Try a faster technique for short (16 or fewer bytes) copies. - // - // if length > 16 || len(dst)-d < 16 || len(src)-s < 16 { - // goto callMemmove // Fall back on calling runtime·memmove. - // } - // - // The C++ snappy code calls this TryFastAppend. It also checks len(src)-s - // against 21 instead of 16, because it cannot assume that all of its input - // is contiguous in memory and so it needs to leave enough source bytes to - // read the next tag without refilling buffers, but Go's Decode assumes - // contiguousness (the src argument is a []byte). - CMPQ CX, $16 - JGT callMemmove - CMPQ AX, $16 - JLT callMemmove - CMPQ BX, $16 - JLT callMemmove - - // !!! Implement the copy from src to dst as a 16-byte load and store. - // (Decode's documentation says that dst and src must not overlap.) - // - // This always copies 16 bytes, instead of only length bytes, but that's - // OK. If the input is a valid Snappy encoding then subsequent iterations - // will fix up the overrun. Otherwise, Decode returns a nil []byte (and a - // non-nil error), so the overrun will be ignored. - // - // Note that on amd64, it is legal and cheap to issue unaligned 8-byte or - // 16-byte loads and stores. This technique probably wouldn't be as - // effective on architectures that are fussier about alignment. - MOVOU 0(SI), X0 - MOVOU X0, 0(DI) - - // d += length - // s += length - ADDQ CX, DI - ADDQ CX, SI - JMP loop - -callMemmove: - // if length > len(dst)-d || length > len(src)-s { etc } - CMPQ CX, AX - JGT errCorrupt - CMPQ CX, BX - JGT errCorrupt - - // copy(dst[d:], src[s:s+length]) - // - // This means calling runtime·memmove(&dst[d], &src[s], length), so we push - // DI, SI and CX as arguments. Coincidentally, we also need to spill those - // three registers to the stack, to save local variables across the CALL. - MOVQ DI, 0(SP) - MOVQ SI, 8(SP) - MOVQ CX, 16(SP) - MOVQ DI, 24(SP) - MOVQ SI, 32(SP) - MOVQ CX, 40(SP) - CALL runtime·memmove(SB) - - // Restore local variables: unspill registers from the stack and - // re-calculate R8-R13. - MOVQ 24(SP), DI - MOVQ 32(SP), SI - MOVQ 40(SP), CX - MOVQ dst_base+0(FP), R8 - MOVQ dst_len+8(FP), R9 - MOVQ R8, R10 - ADDQ R9, R10 - MOVQ src_base+24(FP), R11 - MOVQ src_len+32(FP), R12 - MOVQ R11, R13 - ADDQ R12, R13 - - // d += length - // s += length - ADDQ CX, DI - ADDQ CX, SI - JMP loop - -tagLit60Plus: - // !!! This fragment does the - // - // s += x - 58; if uint(s) > uint(len(src)) { etc } - // - // checks. In the asm version, we code it once instead of once per switch case. - ADDQ CX, SI - SUBQ $58, SI - MOVQ SI, BX - SUBQ R11, BX - CMPQ BX, R12 - JA errCorrupt - - // case x == 60: - CMPL CX, $61 - JEQ tagLit61 - JA tagLit62Plus - - // x = uint32(src[s-1]) - MOVBLZX -1(SI), CX - JMP doLit - -tagLit61: - // case x == 61: - // x = uint32(src[s-2]) | uint32(src[s-1])<<8 - MOVWLZX -2(SI), CX - JMP doLit - -tagLit62Plus: - CMPL CX, $62 - JA tagLit63 - - // case x == 62: - // x = uint32(src[s-3]) | uint32(src[s-2])<<8 | uint32(src[s-1])<<16 - MOVWLZX -3(SI), CX - MOVBLZX -1(SI), BX - SHLL $16, BX - ORL BX, CX - JMP doLit - -tagLit63: - // case x == 63: - // x = uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24 - MOVL -4(SI), CX - JMP doLit - -// The code above handles literal tags. -// ---------------------------------------- -// The code below handles copy tags. - -tagCopy4: - // case tagCopy4: - // s += 5 - ADDQ $5, SI - - // if uint(s) > uint(len(src)) { etc } - MOVQ SI, BX - SUBQ R11, BX - CMPQ BX, R12 - JA errCorrupt - - // length = 1 + int(src[s-5])>>2 - SHRQ $2, CX - INCQ CX - - // offset = int(uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24) - MOVLQZX -4(SI), DX - JMP doCopy - -tagCopy2: - // case tagCopy2: - // s += 3 - ADDQ $3, SI - - // if uint(s) > uint(len(src)) { etc } - MOVQ SI, BX - SUBQ R11, BX - CMPQ BX, R12 - JA errCorrupt - - // length = 1 + int(src[s-3])>>2 - SHRQ $2, CX - INCQ CX - - // offset = int(uint32(src[s-2]) | uint32(src[s-1])<<8) - MOVWQZX -2(SI), DX - JMP doCopy - -tagCopy: - // We have a copy tag. We assume that: - // - BX == src[s] & 0x03 - // - CX == src[s] - CMPQ BX, $2 - JEQ tagCopy2 - JA tagCopy4 - - // case tagCopy1: - // s += 2 - ADDQ $2, SI - - // if uint(s) > uint(len(src)) { etc } - MOVQ SI, BX - SUBQ R11, BX - CMPQ BX, R12 - JA errCorrupt - - // offset = int(uint32(src[s-2])&0xe0<<3 | uint32(src[s-1])) - MOVQ CX, DX - ANDQ $0xe0, DX - SHLQ $3, DX - MOVBQZX -1(SI), BX - ORQ BX, DX - - // length = 4 + int(src[s-2])>>2&0x7 - SHRQ $2, CX - ANDQ $7, CX - ADDQ $4, CX - -doCopy: - // This is the end of the outer "switch", when we have a copy tag. - // - // We assume that: - // - CX == length && CX > 0 - // - DX == offset - - // if offset <= 0 { etc } - CMPQ DX, $0 - JLE errCorrupt - - // if d < offset { etc } - MOVQ DI, BX - SUBQ R8, BX - CMPQ BX, DX - JLT errCorrupt - - // if length > len(dst)-d { etc } - MOVQ R10, BX - SUBQ DI, BX - CMPQ CX, BX - JGT errCorrupt - - // forwardCopy(dst[d:d+length], dst[d-offset:]); d += length - // - // Set: - // - R14 = len(dst)-d - // - R15 = &dst[d-offset] - MOVQ R10, R14 - SUBQ DI, R14 - MOVQ DI, R15 - SUBQ DX, R15 - - // !!! Try a faster technique for short (16 or fewer bytes) forward copies. - // - // First, try using two 8-byte load/stores, similar to the doLit technique - // above. Even if dst[d:d+length] and dst[d-offset:] can overlap, this is - // still OK if offset >= 8. Note that this has to be two 8-byte load/stores - // and not one 16-byte load/store, and the first store has to be before the - // second load, due to the overlap if offset is in the range [8, 16). - // - // if length > 16 || offset < 8 || len(dst)-d < 16 { - // goto slowForwardCopy - // } - // copy 16 bytes - // d += length - CMPQ CX, $16 - JGT slowForwardCopy - CMPQ DX, $8 - JLT slowForwardCopy - CMPQ R14, $16 - JLT slowForwardCopy - MOVQ 0(R15), AX - MOVQ AX, 0(DI) - MOVQ 8(R15), BX - MOVQ BX, 8(DI) - ADDQ CX, DI - JMP loop - -slowForwardCopy: - // !!! If the forward copy is longer than 16 bytes, or if offset < 8, we - // can still try 8-byte load stores, provided we can overrun up to 10 extra - // bytes. As above, the overrun will be fixed up by subsequent iterations - // of the outermost loop. - // - // The C++ snappy code calls this technique IncrementalCopyFastPath. Its - // commentary says: - // - // ---- - // - // The main part of this loop is a simple copy of eight bytes at a time - // until we've copied (at least) the requested amount of bytes. However, - // if d and d-offset are less than eight bytes apart (indicating a - // repeating pattern of length < 8), we first need to expand the pattern in - // order to get the correct results. For instance, if the buffer looks like - // this, with the eight-byte and patterns marked as - // intervals: - // - // abxxxxxxxxxxxx - // [------] d-offset - // [------] d - // - // a single eight-byte copy from to will repeat the pattern - // once, after which we can move two bytes without moving : - // - // ababxxxxxxxxxx - // [------] d-offset - // [------] d - // - // and repeat the exercise until the two no longer overlap. - // - // This allows us to do very well in the special case of one single byte - // repeated many times, without taking a big hit for more general cases. - // - // The worst case of extra writing past the end of the match occurs when - // offset == 1 and length == 1; the last copy will read from byte positions - // [0..7] and write to [4..11], whereas it was only supposed to write to - // position 1. Thus, ten excess bytes. - // - // ---- - // - // That "10 byte overrun" worst case is confirmed by Go's - // TestSlowForwardCopyOverrun, which also tests the fixUpSlowForwardCopy - // and finishSlowForwardCopy algorithm. - // - // if length > len(dst)-d-10 { - // goto verySlowForwardCopy - // } - SUBQ $10, R14 - CMPQ CX, R14 - JGT verySlowForwardCopy - -makeOffsetAtLeast8: - // !!! As above, expand the pattern so that offset >= 8 and we can use - // 8-byte load/stores. - // - // for offset < 8 { - // copy 8 bytes from dst[d-offset:] to dst[d:] - // length -= offset - // d += offset - // offset += offset - // // The two previous lines together means that d-offset, and therefore - // // R15, is unchanged. - // } - CMPQ DX, $8 - JGE fixUpSlowForwardCopy - MOVQ (R15), BX - MOVQ BX, (DI) - SUBQ DX, CX - ADDQ DX, DI - ADDQ DX, DX - JMP makeOffsetAtLeast8 - -fixUpSlowForwardCopy: - // !!! Add length (which might be negative now) to d (implied by DI being - // &dst[d]) so that d ends up at the right place when we jump back to the - // top of the loop. Before we do that, though, we save DI to AX so that, if - // length is positive, copying the remaining length bytes will write to the - // right place. - MOVQ DI, AX - ADDQ CX, DI - -finishSlowForwardCopy: - // !!! Repeat 8-byte load/stores until length <= 0. Ending with a negative - // length means that we overrun, but as above, that will be fixed up by - // subsequent iterations of the outermost loop. - CMPQ CX, $0 - JLE loop - MOVQ (R15), BX - MOVQ BX, (AX) - ADDQ $8, R15 - ADDQ $8, AX - SUBQ $8, CX - JMP finishSlowForwardCopy - -verySlowForwardCopy: - // verySlowForwardCopy is a simple implementation of forward copy. In C - // parlance, this is a do/while loop instead of a while loop, since we know - // that length > 0. In Go syntax: - // - // for { - // dst[d] = dst[d - offset] - // d++ - // length-- - // if length == 0 { - // break - // } - // } - MOVB (R15), BX - MOVB BX, (DI) - INCQ R15 - INCQ DI - DECQ CX - JNZ verySlowForwardCopy - JMP loop - -// The code above handles copy tags. -// ---------------------------------------- - -end: - // This is the end of the "for s < len(src)". - // - // if d != len(dst) { etc } - CMPQ DI, R10 - JNE errCorrupt - - // return 0 - MOVQ $0, ret+48(FP) - RET - -errCorrupt: - // return decodeErrCodeCorrupt - MOVQ $1, ret+48(FP) - RET diff --git a/vendor/github.com/golang/snappy/decode_other.go b/vendor/github.com/golang/snappy/decode_other.go deleted file mode 100644 index 8c9f204..0000000 --- a/vendor/github.com/golang/snappy/decode_other.go +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright 2016 The Snappy-Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build !amd64 appengine !gc noasm - -package snappy - -// decode writes the decoding of src to dst. It assumes that the varint-encoded -// length of the decompressed bytes has already been read, and that len(dst) -// equals that length. -// -// It returns 0 on success or a decodeErrCodeXxx error code on failure. -func decode(dst, src []byte) int { - var d, s, offset, length int - for s < len(src) { - switch src[s] & 0x03 { - case tagLiteral: - x := uint32(src[s] >> 2) - switch { - case x < 60: - s++ - case x == 60: - s += 2 - if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line. - return decodeErrCodeCorrupt - } - x = uint32(src[s-1]) - case x == 61: - s += 3 - if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line. - return decodeErrCodeCorrupt - } - x = uint32(src[s-2]) | uint32(src[s-1])<<8 - case x == 62: - s += 4 - if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line. - return decodeErrCodeCorrupt - } - x = uint32(src[s-3]) | uint32(src[s-2])<<8 | uint32(src[s-1])<<16 - case x == 63: - s += 5 - if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line. - return decodeErrCodeCorrupt - } - x = uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24 - } - length = int(x) + 1 - if length <= 0 { - return decodeErrCodeUnsupportedLiteralLength - } - if length > len(dst)-d || length > len(src)-s { - return decodeErrCodeCorrupt - } - copy(dst[d:], src[s:s+length]) - d += length - s += length - continue - - case tagCopy1: - s += 2 - if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line. - return decodeErrCodeCorrupt - } - length = 4 + int(src[s-2])>>2&0x7 - offset = int(uint32(src[s-2])&0xe0<<3 | uint32(src[s-1])) - - case tagCopy2: - s += 3 - if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line. - return decodeErrCodeCorrupt - } - length = 1 + int(src[s-3])>>2 - offset = int(uint32(src[s-2]) | uint32(src[s-1])<<8) - - case tagCopy4: - s += 5 - if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line. - return decodeErrCodeCorrupt - } - length = 1 + int(src[s-5])>>2 - offset = int(uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24) - } - - if offset <= 0 || d < offset || length > len(dst)-d { - return decodeErrCodeCorrupt - } - // Copy from an earlier sub-slice of dst to a later sub-slice. Unlike - // the built-in copy function, this byte-by-byte copy always runs - // forwards, even if the slices overlap. Conceptually, this is: - // - // d += forwardCopy(dst[d:d+length], dst[d-offset:]) - for end := d + length; d != end; d++ { - dst[d] = dst[d-offset] - } - } - if d != len(dst) { - return decodeErrCodeCorrupt - } - return 0 -} diff --git a/vendor/github.com/golang/snappy/encode.go b/vendor/github.com/golang/snappy/encode.go deleted file mode 100644 index 8d393e9..0000000 --- a/vendor/github.com/golang/snappy/encode.go +++ /dev/null @@ -1,285 +0,0 @@ -// Copyright 2011 The Snappy-Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package snappy - -import ( - "encoding/binary" - "errors" - "io" -) - -// Encode returns the encoded form of src. The returned slice may be a sub- -// slice of dst if dst was large enough to hold the entire encoded block. -// Otherwise, a newly allocated slice will be returned. -// -// The dst and src must not overlap. It is valid to pass a nil dst. -func Encode(dst, src []byte) []byte { - if n := MaxEncodedLen(len(src)); n < 0 { - panic(ErrTooLarge) - } else if len(dst) < n { - dst = make([]byte, n) - } - - // The block starts with the varint-encoded length of the decompressed bytes. - d := binary.PutUvarint(dst, uint64(len(src))) - - for len(src) > 0 { - p := src - src = nil - if len(p) > maxBlockSize { - p, src = p[:maxBlockSize], p[maxBlockSize:] - } - if len(p) < minNonLiteralBlockSize { - d += emitLiteral(dst[d:], p) - } else { - d += encodeBlock(dst[d:], p) - } - } - return dst[:d] -} - -// inputMargin is the minimum number of extra input bytes to keep, inside -// encodeBlock's inner loop. On some architectures, this margin lets us -// implement a fast path for emitLiteral, where the copy of short (<= 16 byte) -// literals can be implemented as a single load to and store from a 16-byte -// register. That literal's actual length can be as short as 1 byte, so this -// can copy up to 15 bytes too much, but that's OK as subsequent iterations of -// the encoding loop will fix up the copy overrun, and this inputMargin ensures -// that we don't overrun the dst and src buffers. -const inputMargin = 16 - 1 - -// minNonLiteralBlockSize is the minimum size of the input to encodeBlock that -// could be encoded with a copy tag. This is the minimum with respect to the -// algorithm used by encodeBlock, not a minimum enforced by the file format. -// -// The encoded output must start with at least a 1 byte literal, as there are -// no previous bytes to copy. A minimal (1 byte) copy after that, generated -// from an emitCopy call in encodeBlock's main loop, would require at least -// another inputMargin bytes, for the reason above: we want any emitLiteral -// calls inside encodeBlock's main loop to use the fast path if possible, which -// requires being able to overrun by inputMargin bytes. Thus, -// minNonLiteralBlockSize equals 1 + 1 + inputMargin. -// -// The C++ code doesn't use this exact threshold, but it could, as discussed at -// https://groups.google.com/d/topic/snappy-compression/oGbhsdIJSJ8/discussion -// The difference between Go (2+inputMargin) and C++ (inputMargin) is purely an -// optimization. It should not affect the encoded form. This is tested by -// TestSameEncodingAsCppShortCopies. -const minNonLiteralBlockSize = 1 + 1 + inputMargin - -// MaxEncodedLen returns the maximum length of a snappy block, given its -// uncompressed length. -// -// It will return a negative value if srcLen is too large to encode. -func MaxEncodedLen(srcLen int) int { - n := uint64(srcLen) - if n > 0xffffffff { - return -1 - } - // Compressed data can be defined as: - // compressed := item* literal* - // item := literal* copy - // - // The trailing literal sequence has a space blowup of at most 62/60 - // since a literal of length 60 needs one tag byte + one extra byte - // for length information. - // - // Item blowup is trickier to measure. Suppose the "copy" op copies - // 4 bytes of data. Because of a special check in the encoding code, - // we produce a 4-byte copy only if the offset is < 65536. Therefore - // the copy op takes 3 bytes to encode, and this type of item leads - // to at most the 62/60 blowup for representing literals. - // - // Suppose the "copy" op copies 5 bytes of data. If the offset is big - // enough, it will take 5 bytes to encode the copy op. Therefore the - // worst case here is a one-byte literal followed by a five-byte copy. - // That is, 6 bytes of input turn into 7 bytes of "compressed" data. - // - // This last factor dominates the blowup, so the final estimate is: - n = 32 + n + n/6 - if n > 0xffffffff { - return -1 - } - return int(n) -} - -var errClosed = errors.New("snappy: Writer is closed") - -// NewWriter returns a new Writer that compresses to w. -// -// The Writer returned does not buffer writes. There is no need to Flush or -// Close such a Writer. -// -// Deprecated: the Writer returned is not suitable for many small writes, only -// for few large writes. Use NewBufferedWriter instead, which is efficient -// regardless of the frequency and shape of the writes, and remember to Close -// that Writer when done. -func NewWriter(w io.Writer) *Writer { - return &Writer{ - w: w, - obuf: make([]byte, obufLen), - } -} - -// NewBufferedWriter returns a new Writer that compresses to w, using the -// framing format described at -// https://github.com/google/snappy/blob/master/framing_format.txt -// -// The Writer returned buffers writes. Users must call Close to guarantee all -// data has been forwarded to the underlying io.Writer. They may also call -// Flush zero or more times before calling Close. -func NewBufferedWriter(w io.Writer) *Writer { - return &Writer{ - w: w, - ibuf: make([]byte, 0, maxBlockSize), - obuf: make([]byte, obufLen), - } -} - -// Writer is an io.Writer that can write Snappy-compressed bytes. -type Writer struct { - w io.Writer - err error - - // ibuf is a buffer for the incoming (uncompressed) bytes. - // - // Its use is optional. For backwards compatibility, Writers created by the - // NewWriter function have ibuf == nil, do not buffer incoming bytes, and - // therefore do not need to be Flush'ed or Close'd. - ibuf []byte - - // obuf is a buffer for the outgoing (compressed) bytes. - obuf []byte - - // wroteStreamHeader is whether we have written the stream header. - wroteStreamHeader bool -} - -// Reset discards the writer's state and switches the Snappy writer to write to -// w. This permits reusing a Writer rather than allocating a new one. -func (w *Writer) Reset(writer io.Writer) { - w.w = writer - w.err = nil - if w.ibuf != nil { - w.ibuf = w.ibuf[:0] - } - w.wroteStreamHeader = false -} - -// Write satisfies the io.Writer interface. -func (w *Writer) Write(p []byte) (nRet int, errRet error) { - if w.ibuf == nil { - // Do not buffer incoming bytes. This does not perform or compress well - // if the caller of Writer.Write writes many small slices. This - // behavior is therefore deprecated, but still supported for backwards - // compatibility with code that doesn't explicitly Flush or Close. - return w.write(p) - } - - // The remainder of this method is based on bufio.Writer.Write from the - // standard library. - - for len(p) > (cap(w.ibuf)-len(w.ibuf)) && w.err == nil { - var n int - if len(w.ibuf) == 0 { - // Large write, empty buffer. - // Write directly from p to avoid copy. - n, _ = w.write(p) - } else { - n = copy(w.ibuf[len(w.ibuf):cap(w.ibuf)], p) - w.ibuf = w.ibuf[:len(w.ibuf)+n] - w.Flush() - } - nRet += n - p = p[n:] - } - if w.err != nil { - return nRet, w.err - } - n := copy(w.ibuf[len(w.ibuf):cap(w.ibuf)], p) - w.ibuf = w.ibuf[:len(w.ibuf)+n] - nRet += n - return nRet, nil -} - -func (w *Writer) write(p []byte) (nRet int, errRet error) { - if w.err != nil { - return 0, w.err - } - for len(p) > 0 { - obufStart := len(magicChunk) - if !w.wroteStreamHeader { - w.wroteStreamHeader = true - copy(w.obuf, magicChunk) - obufStart = 0 - } - - var uncompressed []byte - if len(p) > maxBlockSize { - uncompressed, p = p[:maxBlockSize], p[maxBlockSize:] - } else { - uncompressed, p = p, nil - } - checksum := crc(uncompressed) - - // Compress the buffer, discarding the result if the improvement - // isn't at least 12.5%. - compressed := Encode(w.obuf[obufHeaderLen:], uncompressed) - chunkType := uint8(chunkTypeCompressedData) - chunkLen := 4 + len(compressed) - obufEnd := obufHeaderLen + len(compressed) - if len(compressed) >= len(uncompressed)-len(uncompressed)/8 { - chunkType = chunkTypeUncompressedData - chunkLen = 4 + len(uncompressed) - obufEnd = obufHeaderLen - } - - // Fill in the per-chunk header that comes before the body. - w.obuf[len(magicChunk)+0] = chunkType - w.obuf[len(magicChunk)+1] = uint8(chunkLen >> 0) - w.obuf[len(magicChunk)+2] = uint8(chunkLen >> 8) - w.obuf[len(magicChunk)+3] = uint8(chunkLen >> 16) - w.obuf[len(magicChunk)+4] = uint8(checksum >> 0) - w.obuf[len(magicChunk)+5] = uint8(checksum >> 8) - w.obuf[len(magicChunk)+6] = uint8(checksum >> 16) - w.obuf[len(magicChunk)+7] = uint8(checksum >> 24) - - if _, err := w.w.Write(w.obuf[obufStart:obufEnd]); err != nil { - w.err = err - return nRet, err - } - if chunkType == chunkTypeUncompressedData { - if _, err := w.w.Write(uncompressed); err != nil { - w.err = err - return nRet, err - } - } - nRet += len(uncompressed) - } - return nRet, nil -} - -// Flush flushes the Writer to its underlying io.Writer. -func (w *Writer) Flush() error { - if w.err != nil { - return w.err - } - if len(w.ibuf) == 0 { - return nil - } - w.write(w.ibuf) - w.ibuf = w.ibuf[:0] - return w.err -} - -// Close calls Flush and then closes the Writer. -func (w *Writer) Close() error { - w.Flush() - ret := w.err - if w.err == nil { - w.err = errClosed - } - return ret -} diff --git a/vendor/github.com/golang/snappy/encode_amd64.go b/vendor/github.com/golang/snappy/encode_amd64.go deleted file mode 100644 index 150d91b..0000000 --- a/vendor/github.com/golang/snappy/encode_amd64.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2016 The Snappy-Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build !appengine -// +build gc -// +build !noasm - -package snappy - -// emitLiteral has the same semantics as in encode_other.go. -// -//go:noescape -func emitLiteral(dst, lit []byte) int - -// emitCopy has the same semantics as in encode_other.go. -// -//go:noescape -func emitCopy(dst []byte, offset, length int) int - -// extendMatch has the same semantics as in encode_other.go. -// -//go:noescape -func extendMatch(src []byte, i, j int) int - -// encodeBlock has the same semantics as in encode_other.go. -// -//go:noescape -func encodeBlock(dst, src []byte) (d int) diff --git a/vendor/github.com/golang/snappy/encode_amd64.s b/vendor/github.com/golang/snappy/encode_amd64.s deleted file mode 100644 index adfd979..0000000 --- a/vendor/github.com/golang/snappy/encode_amd64.s +++ /dev/null @@ -1,730 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build !appengine -// +build gc -// +build !noasm - -#include "textflag.h" - -// The XXX lines assemble on Go 1.4, 1.5 and 1.7, but not 1.6, due to a -// Go toolchain regression. See https://github.com/golang/go/issues/15426 and -// https://github.com/golang/snappy/issues/29 -// -// As a workaround, the package was built with a known good assembler, and -// those instructions were disassembled by "objdump -d" to yield the -// 4e 0f b7 7c 5c 78 movzwq 0x78(%rsp,%r11,2),%r15 -// style comments, in AT&T asm syntax. Note that rsp here is a physical -// register, not Go/asm's SP pseudo-register (see https://golang.org/doc/asm). -// The instructions were then encoded as "BYTE $0x.." sequences, which assemble -// fine on Go 1.6. - -// The asm code generally follows the pure Go code in encode_other.go, except -// where marked with a "!!!". - -// ---------------------------------------------------------------------------- - -// func emitLiteral(dst, lit []byte) int -// -// All local variables fit into registers. The register allocation: -// - AX len(lit) -// - BX n -// - DX return value -// - DI &dst[i] -// - R10 &lit[0] -// -// The 24 bytes of stack space is to call runtime·memmove. -// -// The unusual register allocation of local variables, such as R10 for the -// source pointer, matches the allocation used at the call site in encodeBlock, -// which makes it easier to manually inline this function. -TEXT ·emitLiteral(SB), NOSPLIT, $24-56 - MOVQ dst_base+0(FP), DI - MOVQ lit_base+24(FP), R10 - MOVQ lit_len+32(FP), AX - MOVQ AX, DX - MOVL AX, BX - SUBL $1, BX - - CMPL BX, $60 - JLT oneByte - CMPL BX, $256 - JLT twoBytes - -threeBytes: - MOVB $0xf4, 0(DI) - MOVW BX, 1(DI) - ADDQ $3, DI - ADDQ $3, DX - JMP memmove - -twoBytes: - MOVB $0xf0, 0(DI) - MOVB BX, 1(DI) - ADDQ $2, DI - ADDQ $2, DX - JMP memmove - -oneByte: - SHLB $2, BX - MOVB BX, 0(DI) - ADDQ $1, DI - ADDQ $1, DX - -memmove: - MOVQ DX, ret+48(FP) - - // copy(dst[i:], lit) - // - // This means calling runtime·memmove(&dst[i], &lit[0], len(lit)), so we push - // DI, R10 and AX as arguments. - MOVQ DI, 0(SP) - MOVQ R10, 8(SP) - MOVQ AX, 16(SP) - CALL runtime·memmove(SB) - RET - -// ---------------------------------------------------------------------------- - -// func emitCopy(dst []byte, offset, length int) int -// -// All local variables fit into registers. The register allocation: -// - AX length -// - SI &dst[0] -// - DI &dst[i] -// - R11 offset -// -// The unusual register allocation of local variables, such as R11 for the -// offset, matches the allocation used at the call site in encodeBlock, which -// makes it easier to manually inline this function. -TEXT ·emitCopy(SB), NOSPLIT, $0-48 - MOVQ dst_base+0(FP), DI - MOVQ DI, SI - MOVQ offset+24(FP), R11 - MOVQ length+32(FP), AX - -loop0: - // for length >= 68 { etc } - CMPL AX, $68 - JLT step1 - - // Emit a length 64 copy, encoded as 3 bytes. - MOVB $0xfe, 0(DI) - MOVW R11, 1(DI) - ADDQ $3, DI - SUBL $64, AX - JMP loop0 - -step1: - // if length > 64 { etc } - CMPL AX, $64 - JLE step2 - - // Emit a length 60 copy, encoded as 3 bytes. - MOVB $0xee, 0(DI) - MOVW R11, 1(DI) - ADDQ $3, DI - SUBL $60, AX - -step2: - // if length >= 12 || offset >= 2048 { goto step3 } - CMPL AX, $12 - JGE step3 - CMPL R11, $2048 - JGE step3 - - // Emit the remaining copy, encoded as 2 bytes. - MOVB R11, 1(DI) - SHRL $8, R11 - SHLB $5, R11 - SUBB $4, AX - SHLB $2, AX - ORB AX, R11 - ORB $1, R11 - MOVB R11, 0(DI) - ADDQ $2, DI - - // Return the number of bytes written. - SUBQ SI, DI - MOVQ DI, ret+40(FP) - RET - -step3: - // Emit the remaining copy, encoded as 3 bytes. - SUBL $1, AX - SHLB $2, AX - ORB $2, AX - MOVB AX, 0(DI) - MOVW R11, 1(DI) - ADDQ $3, DI - - // Return the number of bytes written. - SUBQ SI, DI - MOVQ DI, ret+40(FP) - RET - -// ---------------------------------------------------------------------------- - -// func extendMatch(src []byte, i, j int) int -// -// All local variables fit into registers. The register allocation: -// - DX &src[0] -// - SI &src[j] -// - R13 &src[len(src) - 8] -// - R14 &src[len(src)] -// - R15 &src[i] -// -// The unusual register allocation of local variables, such as R15 for a source -// pointer, matches the allocation used at the call site in encodeBlock, which -// makes it easier to manually inline this function. -TEXT ·extendMatch(SB), NOSPLIT, $0-48 - MOVQ src_base+0(FP), DX - MOVQ src_len+8(FP), R14 - MOVQ i+24(FP), R15 - MOVQ j+32(FP), SI - ADDQ DX, R14 - ADDQ DX, R15 - ADDQ DX, SI - MOVQ R14, R13 - SUBQ $8, R13 - -cmp8: - // As long as we are 8 or more bytes before the end of src, we can load and - // compare 8 bytes at a time. If those 8 bytes are equal, repeat. - CMPQ SI, R13 - JA cmp1 - MOVQ (R15), AX - MOVQ (SI), BX - CMPQ AX, BX - JNE bsf - ADDQ $8, R15 - ADDQ $8, SI - JMP cmp8 - -bsf: - // If those 8 bytes were not equal, XOR the two 8 byte values, and return - // the index of the first byte that differs. The BSF instruction finds the - // least significant 1 bit, the amd64 architecture is little-endian, and - // the shift by 3 converts a bit index to a byte index. - XORQ AX, BX - BSFQ BX, BX - SHRQ $3, BX - ADDQ BX, SI - - // Convert from &src[ret] to ret. - SUBQ DX, SI - MOVQ SI, ret+40(FP) - RET - -cmp1: - // In src's tail, compare 1 byte at a time. - CMPQ SI, R14 - JAE extendMatchEnd - MOVB (R15), AX - MOVB (SI), BX - CMPB AX, BX - JNE extendMatchEnd - ADDQ $1, R15 - ADDQ $1, SI - JMP cmp1 - -extendMatchEnd: - // Convert from &src[ret] to ret. - SUBQ DX, SI - MOVQ SI, ret+40(FP) - RET - -// ---------------------------------------------------------------------------- - -// func encodeBlock(dst, src []byte) (d int) -// -// All local variables fit into registers, other than "var table". The register -// allocation: -// - AX . . -// - BX . . -// - CX 56 shift (note that amd64 shifts by non-immediates must use CX). -// - DX 64 &src[0], tableSize -// - SI 72 &src[s] -// - DI 80 &dst[d] -// - R9 88 sLimit -// - R10 . &src[nextEmit] -// - R11 96 prevHash, currHash, nextHash, offset -// - R12 104 &src[base], skip -// - R13 . &src[nextS], &src[len(src) - 8] -// - R14 . len(src), bytesBetweenHashLookups, &src[len(src)], x -// - R15 112 candidate -// -// The second column (56, 64, etc) is the stack offset to spill the registers -// when calling other functions. We could pack this slightly tighter, but it's -// simpler to have a dedicated spill map independent of the function called. -// -// "var table [maxTableSize]uint16" takes up 32768 bytes of stack space. An -// extra 56 bytes, to call other functions, and an extra 64 bytes, to spill -// local variables (registers) during calls gives 32768 + 56 + 64 = 32888. -TEXT ·encodeBlock(SB), 0, $32888-56 - MOVQ dst_base+0(FP), DI - MOVQ src_base+24(FP), SI - MOVQ src_len+32(FP), R14 - - // shift, tableSize := uint32(32-8), 1<<8 - MOVQ $24, CX - MOVQ $256, DX - -calcShift: - // for ; tableSize < maxTableSize && tableSize < len(src); tableSize *= 2 { - // shift-- - // } - CMPQ DX, $16384 - JGE varTable - CMPQ DX, R14 - JGE varTable - SUBQ $1, CX - SHLQ $1, DX - JMP calcShift - -varTable: - // var table [maxTableSize]uint16 - // - // In the asm code, unlike the Go code, we can zero-initialize only the - // first tableSize elements. Each uint16 element is 2 bytes and each MOVOU - // writes 16 bytes, so we can do only tableSize/8 writes instead of the - // 2048 writes that would zero-initialize all of table's 32768 bytes. - SHRQ $3, DX - LEAQ table-32768(SP), BX - PXOR X0, X0 - -memclr: - MOVOU X0, 0(BX) - ADDQ $16, BX - SUBQ $1, DX - JNZ memclr - - // !!! DX = &src[0] - MOVQ SI, DX - - // sLimit := len(src) - inputMargin - MOVQ R14, R9 - SUBQ $15, R9 - - // !!! Pre-emptively spill CX, DX and R9 to the stack. Their values don't - // change for the rest of the function. - MOVQ CX, 56(SP) - MOVQ DX, 64(SP) - MOVQ R9, 88(SP) - - // nextEmit := 0 - MOVQ DX, R10 - - // s := 1 - ADDQ $1, SI - - // nextHash := hash(load32(src, s), shift) - MOVL 0(SI), R11 - IMULL $0x1e35a7bd, R11 - SHRL CX, R11 - -outer: - // for { etc } - - // skip := 32 - MOVQ $32, R12 - - // nextS := s - MOVQ SI, R13 - - // candidate := 0 - MOVQ $0, R15 - -inner0: - // for { etc } - - // s := nextS - MOVQ R13, SI - - // bytesBetweenHashLookups := skip >> 5 - MOVQ R12, R14 - SHRQ $5, R14 - - // nextS = s + bytesBetweenHashLookups - ADDQ R14, R13 - - // skip += bytesBetweenHashLookups - ADDQ R14, R12 - - // if nextS > sLimit { goto emitRemainder } - MOVQ R13, AX - SUBQ DX, AX - CMPQ AX, R9 - JA emitRemainder - - // candidate = int(table[nextHash]) - // XXX: MOVWQZX table-32768(SP)(R11*2), R15 - // XXX: 4e 0f b7 7c 5c 78 movzwq 0x78(%rsp,%r11,2),%r15 - BYTE $0x4e - BYTE $0x0f - BYTE $0xb7 - BYTE $0x7c - BYTE $0x5c - BYTE $0x78 - - // table[nextHash] = uint16(s) - MOVQ SI, AX - SUBQ DX, AX - - // XXX: MOVW AX, table-32768(SP)(R11*2) - // XXX: 66 42 89 44 5c 78 mov %ax,0x78(%rsp,%r11,2) - BYTE $0x66 - BYTE $0x42 - BYTE $0x89 - BYTE $0x44 - BYTE $0x5c - BYTE $0x78 - - // nextHash = hash(load32(src, nextS), shift) - MOVL 0(R13), R11 - IMULL $0x1e35a7bd, R11 - SHRL CX, R11 - - // if load32(src, s) != load32(src, candidate) { continue } break - MOVL 0(SI), AX - MOVL (DX)(R15*1), BX - CMPL AX, BX - JNE inner0 - -fourByteMatch: - // As per the encode_other.go code: - // - // A 4-byte match has been found. We'll later see etc. - - // !!! Jump to a fast path for short (<= 16 byte) literals. See the comment - // on inputMargin in encode.go. - MOVQ SI, AX - SUBQ R10, AX - CMPQ AX, $16 - JLE emitLiteralFastPath - - // ---------------------------------------- - // Begin inline of the emitLiteral call. - // - // d += emitLiteral(dst[d:], src[nextEmit:s]) - - MOVL AX, BX - SUBL $1, BX - - CMPL BX, $60 - JLT inlineEmitLiteralOneByte - CMPL BX, $256 - JLT inlineEmitLiteralTwoBytes - -inlineEmitLiteralThreeBytes: - MOVB $0xf4, 0(DI) - MOVW BX, 1(DI) - ADDQ $3, DI - JMP inlineEmitLiteralMemmove - -inlineEmitLiteralTwoBytes: - MOVB $0xf0, 0(DI) - MOVB BX, 1(DI) - ADDQ $2, DI - JMP inlineEmitLiteralMemmove - -inlineEmitLiteralOneByte: - SHLB $2, BX - MOVB BX, 0(DI) - ADDQ $1, DI - -inlineEmitLiteralMemmove: - // Spill local variables (registers) onto the stack; call; unspill. - // - // copy(dst[i:], lit) - // - // This means calling runtime·memmove(&dst[i], &lit[0], len(lit)), so we push - // DI, R10 and AX as arguments. - MOVQ DI, 0(SP) - MOVQ R10, 8(SP) - MOVQ AX, 16(SP) - ADDQ AX, DI // Finish the "d +=" part of "d += emitLiteral(etc)". - MOVQ SI, 72(SP) - MOVQ DI, 80(SP) - MOVQ R15, 112(SP) - CALL runtime·memmove(SB) - MOVQ 56(SP), CX - MOVQ 64(SP), DX - MOVQ 72(SP), SI - MOVQ 80(SP), DI - MOVQ 88(SP), R9 - MOVQ 112(SP), R15 - JMP inner1 - -inlineEmitLiteralEnd: - // End inline of the emitLiteral call. - // ---------------------------------------- - -emitLiteralFastPath: - // !!! Emit the 1-byte encoding "uint8(len(lit)-1)<<2". - MOVB AX, BX - SUBB $1, BX - SHLB $2, BX - MOVB BX, (DI) - ADDQ $1, DI - - // !!! Implement the copy from lit to dst as a 16-byte load and store. - // (Encode's documentation says that dst and src must not overlap.) - // - // This always copies 16 bytes, instead of only len(lit) bytes, but that's - // OK. Subsequent iterations will fix up the overrun. - // - // Note that on amd64, it is legal and cheap to issue unaligned 8-byte or - // 16-byte loads and stores. This technique probably wouldn't be as - // effective on architectures that are fussier about alignment. - MOVOU 0(R10), X0 - MOVOU X0, 0(DI) - ADDQ AX, DI - -inner1: - // for { etc } - - // base := s - MOVQ SI, R12 - - // !!! offset := base - candidate - MOVQ R12, R11 - SUBQ R15, R11 - SUBQ DX, R11 - - // ---------------------------------------- - // Begin inline of the extendMatch call. - // - // s = extendMatch(src, candidate+4, s+4) - - // !!! R14 = &src[len(src)] - MOVQ src_len+32(FP), R14 - ADDQ DX, R14 - - // !!! R13 = &src[len(src) - 8] - MOVQ R14, R13 - SUBQ $8, R13 - - // !!! R15 = &src[candidate + 4] - ADDQ $4, R15 - ADDQ DX, R15 - - // !!! s += 4 - ADDQ $4, SI - -inlineExtendMatchCmp8: - // As long as we are 8 or more bytes before the end of src, we can load and - // compare 8 bytes at a time. If those 8 bytes are equal, repeat. - CMPQ SI, R13 - JA inlineExtendMatchCmp1 - MOVQ (R15), AX - MOVQ (SI), BX - CMPQ AX, BX - JNE inlineExtendMatchBSF - ADDQ $8, R15 - ADDQ $8, SI - JMP inlineExtendMatchCmp8 - -inlineExtendMatchBSF: - // If those 8 bytes were not equal, XOR the two 8 byte values, and return - // the index of the first byte that differs. The BSF instruction finds the - // least significant 1 bit, the amd64 architecture is little-endian, and - // the shift by 3 converts a bit index to a byte index. - XORQ AX, BX - BSFQ BX, BX - SHRQ $3, BX - ADDQ BX, SI - JMP inlineExtendMatchEnd - -inlineExtendMatchCmp1: - // In src's tail, compare 1 byte at a time. - CMPQ SI, R14 - JAE inlineExtendMatchEnd - MOVB (R15), AX - MOVB (SI), BX - CMPB AX, BX - JNE inlineExtendMatchEnd - ADDQ $1, R15 - ADDQ $1, SI - JMP inlineExtendMatchCmp1 - -inlineExtendMatchEnd: - // End inline of the extendMatch call. - // ---------------------------------------- - - // ---------------------------------------- - // Begin inline of the emitCopy call. - // - // d += emitCopy(dst[d:], base-candidate, s-base) - - // !!! length := s - base - MOVQ SI, AX - SUBQ R12, AX - -inlineEmitCopyLoop0: - // for length >= 68 { etc } - CMPL AX, $68 - JLT inlineEmitCopyStep1 - - // Emit a length 64 copy, encoded as 3 bytes. - MOVB $0xfe, 0(DI) - MOVW R11, 1(DI) - ADDQ $3, DI - SUBL $64, AX - JMP inlineEmitCopyLoop0 - -inlineEmitCopyStep1: - // if length > 64 { etc } - CMPL AX, $64 - JLE inlineEmitCopyStep2 - - // Emit a length 60 copy, encoded as 3 bytes. - MOVB $0xee, 0(DI) - MOVW R11, 1(DI) - ADDQ $3, DI - SUBL $60, AX - -inlineEmitCopyStep2: - // if length >= 12 || offset >= 2048 { goto inlineEmitCopyStep3 } - CMPL AX, $12 - JGE inlineEmitCopyStep3 - CMPL R11, $2048 - JGE inlineEmitCopyStep3 - - // Emit the remaining copy, encoded as 2 bytes. - MOVB R11, 1(DI) - SHRL $8, R11 - SHLB $5, R11 - SUBB $4, AX - SHLB $2, AX - ORB AX, R11 - ORB $1, R11 - MOVB R11, 0(DI) - ADDQ $2, DI - JMP inlineEmitCopyEnd - -inlineEmitCopyStep3: - // Emit the remaining copy, encoded as 3 bytes. - SUBL $1, AX - SHLB $2, AX - ORB $2, AX - MOVB AX, 0(DI) - MOVW R11, 1(DI) - ADDQ $3, DI - -inlineEmitCopyEnd: - // End inline of the emitCopy call. - // ---------------------------------------- - - // nextEmit = s - MOVQ SI, R10 - - // if s >= sLimit { goto emitRemainder } - MOVQ SI, AX - SUBQ DX, AX - CMPQ AX, R9 - JAE emitRemainder - - // As per the encode_other.go code: - // - // We could immediately etc. - - // x := load64(src, s-1) - MOVQ -1(SI), R14 - - // prevHash := hash(uint32(x>>0), shift) - MOVL R14, R11 - IMULL $0x1e35a7bd, R11 - SHRL CX, R11 - - // table[prevHash] = uint16(s-1) - MOVQ SI, AX - SUBQ DX, AX - SUBQ $1, AX - - // XXX: MOVW AX, table-32768(SP)(R11*2) - // XXX: 66 42 89 44 5c 78 mov %ax,0x78(%rsp,%r11,2) - BYTE $0x66 - BYTE $0x42 - BYTE $0x89 - BYTE $0x44 - BYTE $0x5c - BYTE $0x78 - - // currHash := hash(uint32(x>>8), shift) - SHRQ $8, R14 - MOVL R14, R11 - IMULL $0x1e35a7bd, R11 - SHRL CX, R11 - - // candidate = int(table[currHash]) - // XXX: MOVWQZX table-32768(SP)(R11*2), R15 - // XXX: 4e 0f b7 7c 5c 78 movzwq 0x78(%rsp,%r11,2),%r15 - BYTE $0x4e - BYTE $0x0f - BYTE $0xb7 - BYTE $0x7c - BYTE $0x5c - BYTE $0x78 - - // table[currHash] = uint16(s) - ADDQ $1, AX - - // XXX: MOVW AX, table-32768(SP)(R11*2) - // XXX: 66 42 89 44 5c 78 mov %ax,0x78(%rsp,%r11,2) - BYTE $0x66 - BYTE $0x42 - BYTE $0x89 - BYTE $0x44 - BYTE $0x5c - BYTE $0x78 - - // if uint32(x>>8) == load32(src, candidate) { continue } - MOVL (DX)(R15*1), BX - CMPL R14, BX - JEQ inner1 - - // nextHash = hash(uint32(x>>16), shift) - SHRQ $8, R14 - MOVL R14, R11 - IMULL $0x1e35a7bd, R11 - SHRL CX, R11 - - // s++ - ADDQ $1, SI - - // break out of the inner1 for loop, i.e. continue the outer loop. - JMP outer - -emitRemainder: - // if nextEmit < len(src) { etc } - MOVQ src_len+32(FP), AX - ADDQ DX, AX - CMPQ R10, AX - JEQ encodeBlockEnd - - // d += emitLiteral(dst[d:], src[nextEmit:]) - // - // Push args. - MOVQ DI, 0(SP) - MOVQ $0, 8(SP) // Unnecessary, as the callee ignores it, but conservative. - MOVQ $0, 16(SP) // Unnecessary, as the callee ignores it, but conservative. - MOVQ R10, 24(SP) - SUBQ R10, AX - MOVQ AX, 32(SP) - MOVQ AX, 40(SP) // Unnecessary, as the callee ignores it, but conservative. - - // Spill local variables (registers) onto the stack; call; unspill. - MOVQ DI, 80(SP) - CALL ·emitLiteral(SB) - MOVQ 80(SP), DI - - // Finish the "d +=" part of "d += emitLiteral(etc)". - ADDQ 48(SP), DI - -encodeBlockEnd: - MOVQ dst_base+0(FP), AX - SUBQ AX, DI - MOVQ DI, d+48(FP) - RET diff --git a/vendor/github.com/golang/snappy/encode_other.go b/vendor/github.com/golang/snappy/encode_other.go deleted file mode 100644 index dbcae90..0000000 --- a/vendor/github.com/golang/snappy/encode_other.go +++ /dev/null @@ -1,238 +0,0 @@ -// Copyright 2016 The Snappy-Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build !amd64 appengine !gc noasm - -package snappy - -func load32(b []byte, i int) uint32 { - b = b[i : i+4 : len(b)] // Help the compiler eliminate bounds checks on the next line. - return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 -} - -func load64(b []byte, i int) uint64 { - b = b[i : i+8 : len(b)] // Help the compiler eliminate bounds checks on the next line. - return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | - uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 -} - -// emitLiteral writes a literal chunk and returns the number of bytes written. -// -// It assumes that: -// dst is long enough to hold the encoded bytes -// 1 <= len(lit) && len(lit) <= 65536 -func emitLiteral(dst, lit []byte) int { - i, n := 0, uint(len(lit)-1) - switch { - case n < 60: - dst[0] = uint8(n)<<2 | tagLiteral - i = 1 - case n < 1<<8: - dst[0] = 60<<2 | tagLiteral - dst[1] = uint8(n) - i = 2 - default: - dst[0] = 61<<2 | tagLiteral - dst[1] = uint8(n) - dst[2] = uint8(n >> 8) - i = 3 - } - return i + copy(dst[i:], lit) -} - -// emitCopy writes a copy chunk and returns the number of bytes written. -// -// It assumes that: -// dst is long enough to hold the encoded bytes -// 1 <= offset && offset <= 65535 -// 4 <= length && length <= 65535 -func emitCopy(dst []byte, offset, length int) int { - i := 0 - // The maximum length for a single tagCopy1 or tagCopy2 op is 64 bytes. The - // threshold for this loop is a little higher (at 68 = 64 + 4), and the - // length emitted down below is is a little lower (at 60 = 64 - 4), because - // it's shorter to encode a length 67 copy as a length 60 tagCopy2 followed - // by a length 7 tagCopy1 (which encodes as 3+2 bytes) than to encode it as - // a length 64 tagCopy2 followed by a length 3 tagCopy2 (which encodes as - // 3+3 bytes). The magic 4 in the 64±4 is because the minimum length for a - // tagCopy1 op is 4 bytes, which is why a length 3 copy has to be an - // encodes-as-3-bytes tagCopy2 instead of an encodes-as-2-bytes tagCopy1. - for length >= 68 { - // Emit a length 64 copy, encoded as 3 bytes. - dst[i+0] = 63<<2 | tagCopy2 - dst[i+1] = uint8(offset) - dst[i+2] = uint8(offset >> 8) - i += 3 - length -= 64 - } - if length > 64 { - // Emit a length 60 copy, encoded as 3 bytes. - dst[i+0] = 59<<2 | tagCopy2 - dst[i+1] = uint8(offset) - dst[i+2] = uint8(offset >> 8) - i += 3 - length -= 60 - } - if length >= 12 || offset >= 2048 { - // Emit the remaining copy, encoded as 3 bytes. - dst[i+0] = uint8(length-1)<<2 | tagCopy2 - dst[i+1] = uint8(offset) - dst[i+2] = uint8(offset >> 8) - return i + 3 - } - // Emit the remaining copy, encoded as 2 bytes. - dst[i+0] = uint8(offset>>8)<<5 | uint8(length-4)<<2 | tagCopy1 - dst[i+1] = uint8(offset) - return i + 2 -} - -// extendMatch returns the largest k such that k <= len(src) and that -// src[i:i+k-j] and src[j:k] have the same contents. -// -// It assumes that: -// 0 <= i && i < j && j <= len(src) -func extendMatch(src []byte, i, j int) int { - for ; j < len(src) && src[i] == src[j]; i, j = i+1, j+1 { - } - return j -} - -func hash(u, shift uint32) uint32 { - return (u * 0x1e35a7bd) >> shift -} - -// encodeBlock encodes a non-empty src to a guaranteed-large-enough dst. It -// assumes that the varint-encoded length of the decompressed bytes has already -// been written. -// -// It also assumes that: -// len(dst) >= MaxEncodedLen(len(src)) && -// minNonLiteralBlockSize <= len(src) && len(src) <= maxBlockSize -func encodeBlock(dst, src []byte) (d int) { - // Initialize the hash table. Its size ranges from 1<<8 to 1<<14 inclusive. - // The table element type is uint16, as s < sLimit and sLimit < len(src) - // and len(src) <= maxBlockSize and maxBlockSize == 65536. - const ( - maxTableSize = 1 << 14 - // tableMask is redundant, but helps the compiler eliminate bounds - // checks. - tableMask = maxTableSize - 1 - ) - shift := uint32(32 - 8) - for tableSize := 1 << 8; tableSize < maxTableSize && tableSize < len(src); tableSize *= 2 { - shift-- - } - // In Go, all array elements are zero-initialized, so there is no advantage - // to a smaller tableSize per se. However, it matches the C++ algorithm, - // and in the asm versions of this code, we can get away with zeroing only - // the first tableSize elements. - var table [maxTableSize]uint16 - - // sLimit is when to stop looking for offset/length copies. The inputMargin - // lets us use a fast path for emitLiteral in the main loop, while we are - // looking for copies. - sLimit := len(src) - inputMargin - - // nextEmit is where in src the next emitLiteral should start from. - nextEmit := 0 - - // The encoded form must start with a literal, as there are no previous - // bytes to copy, so we start looking for hash matches at s == 1. - s := 1 - nextHash := hash(load32(src, s), shift) - - for { - // Copied from the C++ snappy implementation: - // - // Heuristic match skipping: If 32 bytes are scanned with no matches - // found, start looking only at every other byte. If 32 more bytes are - // scanned (or skipped), look at every third byte, etc.. When a match - // is found, immediately go back to looking at every byte. This is a - // small loss (~5% performance, ~0.1% density) for compressible data - // due to more bookkeeping, but for non-compressible data (such as - // JPEG) it's a huge win since the compressor quickly "realizes" the - // data is incompressible and doesn't bother looking for matches - // everywhere. - // - // The "skip" variable keeps track of how many bytes there are since - // the last match; dividing it by 32 (ie. right-shifting by five) gives - // the number of bytes to move ahead for each iteration. - skip := 32 - - nextS := s - candidate := 0 - for { - s = nextS - bytesBetweenHashLookups := skip >> 5 - nextS = s + bytesBetweenHashLookups - skip += bytesBetweenHashLookups - if nextS > sLimit { - goto emitRemainder - } - candidate = int(table[nextHash&tableMask]) - table[nextHash&tableMask] = uint16(s) - nextHash = hash(load32(src, nextS), shift) - if load32(src, s) == load32(src, candidate) { - break - } - } - - // A 4-byte match has been found. We'll later see if more than 4 bytes - // match. But, prior to the match, src[nextEmit:s] are unmatched. Emit - // them as literal bytes. - d += emitLiteral(dst[d:], src[nextEmit:s]) - - // Call emitCopy, and then see if another emitCopy could be our next - // move. Repeat until we find no match for the input immediately after - // what was consumed by the last emitCopy call. - // - // If we exit this loop normally then we need to call emitLiteral next, - // though we don't yet know how big the literal will be. We handle that - // by proceeding to the next iteration of the main loop. We also can - // exit this loop via goto if we get close to exhausting the input. - for { - // Invariant: we have a 4-byte match at s, and no need to emit any - // literal bytes prior to s. - base := s - - // Extend the 4-byte match as long as possible. - // - // This is an inlined version of: - // s = extendMatch(src, candidate+4, s+4) - s += 4 - for i := candidate + 4; s < len(src) && src[i] == src[s]; i, s = i+1, s+1 { - } - - d += emitCopy(dst[d:], base-candidate, s-base) - nextEmit = s - if s >= sLimit { - goto emitRemainder - } - - // We could immediately start working at s now, but to improve - // compression we first update the hash table at s-1 and at s. If - // another emitCopy is not our next move, also calculate nextHash - // at s+1. At least on GOARCH=amd64, these three hash calculations - // are faster as one load64 call (with some shifts) instead of - // three load32 calls. - x := load64(src, s-1) - prevHash := hash(uint32(x>>0), shift) - table[prevHash&tableMask] = uint16(s - 1) - currHash := hash(uint32(x>>8), shift) - candidate = int(table[currHash&tableMask]) - table[currHash&tableMask] = uint16(s) - if uint32(x>>8) != load32(src, candidate) { - nextHash = hash(uint32(x>>16), shift) - s++ - break - } - } - } - -emitRemainder: - if nextEmit < len(src) { - d += emitLiteral(dst[d:], src[nextEmit:]) - } - return d -} diff --git a/vendor/github.com/golang/snappy/snappy.go b/vendor/github.com/golang/snappy/snappy.go deleted file mode 100644 index ece692e..0000000 --- a/vendor/github.com/golang/snappy/snappy.go +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2011 The Snappy-Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package snappy implements the Snappy compression format. It aims for very -// high speeds and reasonable compression. -// -// There are actually two Snappy formats: block and stream. They are related, -// but different: trying to decompress block-compressed data as a Snappy stream -// will fail, and vice versa. The block format is the Decode and Encode -// functions and the stream format is the Reader and Writer types. -// -// The block format, the more common case, is used when the complete size (the -// number of bytes) of the original data is known upfront, at the time -// compression starts. The stream format, also known as the framing format, is -// for when that isn't always true. -// -// The canonical, C++ implementation is at https://github.com/google/snappy and -// it only implements the block format. -package snappy // import "github.com/golang/snappy" - -import ( - "hash/crc32" -) - -/* -Each encoded block begins with the varint-encoded length of the decoded data, -followed by a sequence of chunks. Chunks begin and end on byte boundaries. The -first byte of each chunk is broken into its 2 least and 6 most significant bits -called l and m: l ranges in [0, 4) and m ranges in [0, 64). l is the chunk tag. -Zero means a literal tag. All other values mean a copy tag. - -For literal tags: - - If m < 60, the next 1 + m bytes are literal bytes. - - Otherwise, let n be the little-endian unsigned integer denoted by the next - m - 59 bytes. The next 1 + n bytes after that are literal bytes. - -For copy tags, length bytes are copied from offset bytes ago, in the style of -Lempel-Ziv compression algorithms. In particular: - - For l == 1, the offset ranges in [0, 1<<11) and the length in [4, 12). - The length is 4 + the low 3 bits of m. The high 3 bits of m form bits 8-10 - of the offset. The next byte is bits 0-7 of the offset. - - For l == 2, the offset ranges in [0, 1<<16) and the length in [1, 65). - The length is 1 + m. The offset is the little-endian unsigned integer - denoted by the next 2 bytes. - - For l == 3, this tag is a legacy format that is no longer issued by most - encoders. Nonetheless, the offset ranges in [0, 1<<32) and the length in - [1, 65). The length is 1 + m. The offset is the little-endian unsigned - integer denoted by the next 4 bytes. -*/ -const ( - tagLiteral = 0x00 - tagCopy1 = 0x01 - tagCopy2 = 0x02 - tagCopy4 = 0x03 -) - -const ( - checksumSize = 4 - chunkHeaderSize = 4 - magicChunk = "\xff\x06\x00\x00" + magicBody - magicBody = "sNaPpY" - - // maxBlockSize is the maximum size of the input to encodeBlock. It is not - // part of the wire format per se, but some parts of the encoder assume - // that an offset fits into a uint16. - // - // Also, for the framing format (Writer type instead of Encode function), - // https://github.com/google/snappy/blob/master/framing_format.txt says - // that "the uncompressed data in a chunk must be no longer than 65536 - // bytes". - maxBlockSize = 65536 - - // maxEncodedLenOfMaxBlockSize equals MaxEncodedLen(maxBlockSize), but is - // hard coded to be a const instead of a variable, so that obufLen can also - // be a const. Their equivalence is confirmed by - // TestMaxEncodedLenOfMaxBlockSize. - maxEncodedLenOfMaxBlockSize = 76490 - - obufHeaderLen = len(magicChunk) + checksumSize + chunkHeaderSize - obufLen = obufHeaderLen + maxEncodedLenOfMaxBlockSize -) - -const ( - chunkTypeCompressedData = 0x00 - chunkTypeUncompressedData = 0x01 - chunkTypePadding = 0xfe - chunkTypeStreamIdentifier = 0xff -) - -var crcTable = crc32.MakeTable(crc32.Castagnoli) - -// crc implements the checksum specified in section 3 of -// https://github.com/google/snappy/blob/master/framing_format.txt -func crc(b []byte) uint32 { - c := crc32.Update(0, crcTable, b) - return uint32(c>>15|c<<17) + 0xa282ead8 -} diff --git a/vendor/github.com/google/btree/LICENSE b/vendor/github.com/google/btree/LICENSE deleted file mode 100644 index d645695..0000000 --- a/vendor/github.com/google/btree/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/google/btree/btree.go b/vendor/github.com/google/btree/btree.go deleted file mode 100644 index 7e4551d..0000000 --- a/vendor/github.com/google/btree/btree.go +++ /dev/null @@ -1,881 +0,0 @@ -// Copyright 2014 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package btree implements in-memory B-Trees of arbitrary degree. -// -// btree implements an in-memory B-Tree for use as an ordered data structure. -// It is not meant for persistent storage solutions. -// -// It has a flatter structure than an equivalent red-black or other binary tree, -// which in some cases yields better memory usage and/or performance. -// See some discussion on the matter here: -// http://google-opensource.blogspot.com/2013/01/c-containers-that-save-memory-and-time.html -// Note, though, that this project is in no way related to the C++ B-Tree -// implementation written about there. -// -// Within this tree, each node contains a slice of items and a (possibly nil) -// slice of children. For basic numeric values or raw structs, this can cause -// efficiency differences when compared to equivalent C++ template code that -// stores values in arrays within the node: -// * Due to the overhead of storing values as interfaces (each -// value needs to be stored as the value itself, then 2 words for the -// interface pointing to that value and its type), resulting in higher -// memory use. -// * Since interfaces can point to values anywhere in memory, values are -// most likely not stored in contiguous blocks, resulting in a higher -// number of cache misses. -// These issues don't tend to matter, though, when working with strings or other -// heap-allocated structures, since C++-equivalent structures also must store -// pointers and also distribute their values across the heap. -// -// This implementation is designed to be a drop-in replacement to gollrb.LLRB -// trees, (http://github.com/petar/gollrb), an excellent and probably the most -// widely used ordered tree implementation in the Go ecosystem currently. -// Its functions, therefore, exactly mirror those of -// llrb.LLRB where possible. Unlike gollrb, though, we currently don't -// support storing multiple equivalent values. -package btree - -import ( - "fmt" - "io" - "sort" - "strings" - "sync" -) - -// Item represents a single object in the tree. -type Item interface { - // Less tests whether the current item is less than the given argument. - // - // This must provide a strict weak ordering. - // If !a.Less(b) && !b.Less(a), we treat this to mean a == b (i.e. we can only - // hold one of either a or b in the tree). - Less(than Item) bool -} - -const ( - DefaultFreeListSize = 32 -) - -var ( - nilItems = make(items, 16) - nilChildren = make(children, 16) -) - -// FreeList represents a free list of btree nodes. By default each -// BTree has its own FreeList, but multiple BTrees can share the same -// FreeList. -// Two Btrees using the same freelist are safe for concurrent write access. -type FreeList struct { - mu sync.Mutex - freelist []*node -} - -// NewFreeList creates a new free list. -// size is the maximum size of the returned free list. -func NewFreeList(size int) *FreeList { - return &FreeList{freelist: make([]*node, 0, size)} -} - -func (f *FreeList) newNode() (n *node) { - f.mu.Lock() - index := len(f.freelist) - 1 - if index < 0 { - f.mu.Unlock() - return new(node) - } - n = f.freelist[index] - f.freelist[index] = nil - f.freelist = f.freelist[:index] - f.mu.Unlock() - return -} - -// freeNode adds the given node to the list, returning true if it was added -// and false if it was discarded. -func (f *FreeList) freeNode(n *node) (out bool) { - f.mu.Lock() - if len(f.freelist) < cap(f.freelist) { - f.freelist = append(f.freelist, n) - out = true - } - f.mu.Unlock() - return -} - -// ItemIterator allows callers of Ascend* to iterate in-order over portions of -// the tree. When this function returns false, iteration will stop and the -// associated Ascend* function will immediately return. -type ItemIterator func(i Item) bool - -// New creates a new B-Tree with the given degree. -// -// New(2), for example, will create a 2-3-4 tree (each node contains 1-3 items -// and 2-4 children). -func New(degree int) *BTree { - return NewWithFreeList(degree, NewFreeList(DefaultFreeListSize)) -} - -// NewWithFreeList creates a new B-Tree that uses the given node free list. -func NewWithFreeList(degree int, f *FreeList) *BTree { - if degree <= 1 { - panic("bad degree") - } - return &BTree{ - degree: degree, - cow: ©OnWriteContext{freelist: f}, - } -} - -// items stores items in a node. -type items []Item - -// insertAt inserts a value into the given index, pushing all subsequent values -// forward. -func (s *items) insertAt(index int, item Item) { - *s = append(*s, nil) - if index < len(*s) { - copy((*s)[index+1:], (*s)[index:]) - } - (*s)[index] = item -} - -// removeAt removes a value at a given index, pulling all subsequent values -// back. -func (s *items) removeAt(index int) Item { - item := (*s)[index] - copy((*s)[index:], (*s)[index+1:]) - (*s)[len(*s)-1] = nil - *s = (*s)[:len(*s)-1] - return item -} - -// pop removes and returns the last element in the list. -func (s *items) pop() (out Item) { - index := len(*s) - 1 - out = (*s)[index] - (*s)[index] = nil - *s = (*s)[:index] - return -} - -// truncate truncates this instance at index so that it contains only the -// first index items. index must be less than or equal to length. -func (s *items) truncate(index int) { - var toClear items - *s, toClear = (*s)[:index], (*s)[index:] - for len(toClear) > 0 { - toClear = toClear[copy(toClear, nilItems):] - } -} - -// find returns the index where the given item should be inserted into this -// list. 'found' is true if the item already exists in the list at the given -// index. -func (s items) find(item Item) (index int, found bool) { - i := sort.Search(len(s), func(i int) bool { - return item.Less(s[i]) - }) - if i > 0 && !s[i-1].Less(item) { - return i - 1, true - } - return i, false -} - -// children stores child nodes in a node. -type children []*node - -// insertAt inserts a value into the given index, pushing all subsequent values -// forward. -func (s *children) insertAt(index int, n *node) { - *s = append(*s, nil) - if index < len(*s) { - copy((*s)[index+1:], (*s)[index:]) - } - (*s)[index] = n -} - -// removeAt removes a value at a given index, pulling all subsequent values -// back. -func (s *children) removeAt(index int) *node { - n := (*s)[index] - copy((*s)[index:], (*s)[index+1:]) - (*s)[len(*s)-1] = nil - *s = (*s)[:len(*s)-1] - return n -} - -// pop removes and returns the last element in the list. -func (s *children) pop() (out *node) { - index := len(*s) - 1 - out = (*s)[index] - (*s)[index] = nil - *s = (*s)[:index] - return -} - -// truncate truncates this instance at index so that it contains only the -// first index children. index must be less than or equal to length. -func (s *children) truncate(index int) { - var toClear children - *s, toClear = (*s)[:index], (*s)[index:] - for len(toClear) > 0 { - toClear = toClear[copy(toClear, nilChildren):] - } -} - -// node is an internal node in a tree. -// -// It must at all times maintain the invariant that either -// * len(children) == 0, len(items) unconstrained -// * len(children) == len(items) + 1 -type node struct { - items items - children children - cow *copyOnWriteContext -} - -func (n *node) mutableFor(cow *copyOnWriteContext) *node { - if n.cow == cow { - return n - } - out := cow.newNode() - if cap(out.items) >= len(n.items) { - out.items = out.items[:len(n.items)] - } else { - out.items = make(items, len(n.items), cap(n.items)) - } - copy(out.items, n.items) - // Copy children - if cap(out.children) >= len(n.children) { - out.children = out.children[:len(n.children)] - } else { - out.children = make(children, len(n.children), cap(n.children)) - } - copy(out.children, n.children) - return out -} - -func (n *node) mutableChild(i int) *node { - c := n.children[i].mutableFor(n.cow) - n.children[i] = c - return c -} - -// split splits the given node at the given index. The current node shrinks, -// and this function returns the item that existed at that index and a new node -// containing all items/children after it. -func (n *node) split(i int) (Item, *node) { - item := n.items[i] - next := n.cow.newNode() - next.items = append(next.items, n.items[i+1:]...) - n.items.truncate(i) - if len(n.children) > 0 { - next.children = append(next.children, n.children[i+1:]...) - n.children.truncate(i + 1) - } - return item, next -} - -// maybeSplitChild checks if a child should be split, and if so splits it. -// Returns whether or not a split occurred. -func (n *node) maybeSplitChild(i, maxItems int) bool { - if len(n.children[i].items) < maxItems { - return false - } - first := n.mutableChild(i) - item, second := first.split(maxItems / 2) - n.items.insertAt(i, item) - n.children.insertAt(i+1, second) - return true -} - -// insert inserts an item into the subtree rooted at this node, making sure -// no nodes in the subtree exceed maxItems items. Should an equivalent item be -// be found/replaced by insert, it will be returned. -func (n *node) insert(item Item, maxItems int) Item { - i, found := n.items.find(item) - if found { - out := n.items[i] - n.items[i] = item - return out - } - if len(n.children) == 0 { - n.items.insertAt(i, item) - return nil - } - if n.maybeSplitChild(i, maxItems) { - inTree := n.items[i] - switch { - case item.Less(inTree): - // no change, we want first split node - case inTree.Less(item): - i++ // we want second split node - default: - out := n.items[i] - n.items[i] = item - return out - } - } - return n.mutableChild(i).insert(item, maxItems) -} - -// get finds the given key in the subtree and returns it. -func (n *node) get(key Item) Item { - i, found := n.items.find(key) - if found { - return n.items[i] - } else if len(n.children) > 0 { - return n.children[i].get(key) - } - return nil -} - -// min returns the first item in the subtree. -func min(n *node) Item { - if n == nil { - return nil - } - for len(n.children) > 0 { - n = n.children[0] - } - if len(n.items) == 0 { - return nil - } - return n.items[0] -} - -// max returns the last item in the subtree. -func max(n *node) Item { - if n == nil { - return nil - } - for len(n.children) > 0 { - n = n.children[len(n.children)-1] - } - if len(n.items) == 0 { - return nil - } - return n.items[len(n.items)-1] -} - -// toRemove details what item to remove in a node.remove call. -type toRemove int - -const ( - removeItem toRemove = iota // removes the given item - removeMin // removes smallest item in the subtree - removeMax // removes largest item in the subtree -) - -// remove removes an item from the subtree rooted at this node. -func (n *node) remove(item Item, minItems int, typ toRemove) Item { - var i int - var found bool - switch typ { - case removeMax: - if len(n.children) == 0 { - return n.items.pop() - } - i = len(n.items) - case removeMin: - if len(n.children) == 0 { - return n.items.removeAt(0) - } - i = 0 - case removeItem: - i, found = n.items.find(item) - if len(n.children) == 0 { - if found { - return n.items.removeAt(i) - } - return nil - } - default: - panic("invalid type") - } - // If we get to here, we have children. - if len(n.children[i].items) <= minItems { - return n.growChildAndRemove(i, item, minItems, typ) - } - child := n.mutableChild(i) - // Either we had enough items to begin with, or we've done some - // merging/stealing, because we've got enough now and we're ready to return - // stuff. - if found { - // The item exists at index 'i', and the child we've selected can give us a - // predecessor, since if we've gotten here it's got > minItems items in it. - out := n.items[i] - // We use our special-case 'remove' call with typ=maxItem to pull the - // predecessor of item i (the rightmost leaf of our immediate left child) - // and set it into where we pulled the item from. - n.items[i] = child.remove(nil, minItems, removeMax) - return out - } - // Final recursive call. Once we're here, we know that the item isn't in this - // node and that the child is big enough to remove from. - return child.remove(item, minItems, typ) -} - -// growChildAndRemove grows child 'i' to make sure it's possible to remove an -// item from it while keeping it at minItems, then calls remove to actually -// remove it. -// -// Most documentation says we have to do two sets of special casing: -// 1) item is in this node -// 2) item is in child -// In both cases, we need to handle the two subcases: -// A) node has enough values that it can spare one -// B) node doesn't have enough values -// For the latter, we have to check: -// a) left sibling has node to spare -// b) right sibling has node to spare -// c) we must merge -// To simplify our code here, we handle cases #1 and #2 the same: -// If a node doesn't have enough items, we make sure it does (using a,b,c). -// We then simply redo our remove call, and the second time (regardless of -// whether we're in case 1 or 2), we'll have enough items and can guarantee -// that we hit case A. -func (n *node) growChildAndRemove(i int, item Item, minItems int, typ toRemove) Item { - if i > 0 && len(n.children[i-1].items) > minItems { - // Steal from left child - child := n.mutableChild(i) - stealFrom := n.mutableChild(i - 1) - stolenItem := stealFrom.items.pop() - child.items.insertAt(0, n.items[i-1]) - n.items[i-1] = stolenItem - if len(stealFrom.children) > 0 { - child.children.insertAt(0, stealFrom.children.pop()) - } - } else if i < len(n.items) && len(n.children[i+1].items) > minItems { - // steal from right child - child := n.mutableChild(i) - stealFrom := n.mutableChild(i + 1) - stolenItem := stealFrom.items.removeAt(0) - child.items = append(child.items, n.items[i]) - n.items[i] = stolenItem - if len(stealFrom.children) > 0 { - child.children = append(child.children, stealFrom.children.removeAt(0)) - } - } else { - if i >= len(n.items) { - i-- - } - child := n.mutableChild(i) - // merge with right child - mergeItem := n.items.removeAt(i) - mergeChild := n.children.removeAt(i + 1) - child.items = append(child.items, mergeItem) - child.items = append(child.items, mergeChild.items...) - child.children = append(child.children, mergeChild.children...) - n.cow.freeNode(mergeChild) - } - return n.remove(item, minItems, typ) -} - -type direction int - -const ( - descend = direction(-1) - ascend = direction(+1) -) - -// iterate provides a simple method for iterating over elements in the tree. -// -// When ascending, the 'start' should be less than 'stop' and when descending, -// the 'start' should be greater than 'stop'. Setting 'includeStart' to true -// will force the iterator to include the first item when it equals 'start', -// thus creating a "greaterOrEqual" or "lessThanEqual" rather than just a -// "greaterThan" or "lessThan" queries. -func (n *node) iterate(dir direction, start, stop Item, includeStart bool, hit bool, iter ItemIterator) (bool, bool) { - var ok bool - switch dir { - case ascend: - for i := 0; i < len(n.items); i++ { - if start != nil && n.items[i].Less(start) { - continue - } - if len(n.children) > 0 { - if hit, ok = n.children[i].iterate(dir, start, stop, includeStart, hit, iter); !ok { - return hit, false - } - } - if !includeStart && !hit && start != nil && !start.Less(n.items[i]) { - hit = true - continue - } - hit = true - if stop != nil && !n.items[i].Less(stop) { - return hit, false - } - if !iter(n.items[i]) { - return hit, false - } - } - if len(n.children) > 0 { - if hit, ok = n.children[len(n.children)-1].iterate(dir, start, stop, includeStart, hit, iter); !ok { - return hit, false - } - } - case descend: - for i := len(n.items) - 1; i >= 0; i-- { - if start != nil && !n.items[i].Less(start) { - if !includeStart || hit || start.Less(n.items[i]) { - continue - } - } - if len(n.children) > 0 { - if hit, ok = n.children[i+1].iterate(dir, start, stop, includeStart, hit, iter); !ok { - return hit, false - } - } - if stop != nil && !stop.Less(n.items[i]) { - return hit, false // continue - } - hit = true - if !iter(n.items[i]) { - return hit, false - } - } - if len(n.children) > 0 { - if hit, ok = n.children[0].iterate(dir, start, stop, includeStart, hit, iter); !ok { - return hit, false - } - } - } - return hit, true -} - -// Used for testing/debugging purposes. -func (n *node) print(w io.Writer, level int) { - fmt.Fprintf(w, "%sNODE:%v\n", strings.Repeat(" ", level), n.items) - for _, c := range n.children { - c.print(w, level+1) - } -} - -// BTree is an implementation of a B-Tree. -// -// BTree stores Item instances in an ordered structure, allowing easy insertion, -// removal, and iteration. -// -// Write operations are not safe for concurrent mutation by multiple -// goroutines, but Read operations are. -type BTree struct { - degree int - length int - root *node - cow *copyOnWriteContext -} - -// copyOnWriteContext pointers determine node ownership... a tree with a write -// context equivalent to a node's write context is allowed to modify that node. -// A tree whose write context does not match a node's is not allowed to modify -// it, and must create a new, writable copy (IE: it's a Clone). -// -// When doing any write operation, we maintain the invariant that the current -// node's context is equal to the context of the tree that requested the write. -// We do this by, before we descend into any node, creating a copy with the -// correct context if the contexts don't match. -// -// Since the node we're currently visiting on any write has the requesting -// tree's context, that node is modifiable in place. Children of that node may -// not share context, but before we descend into them, we'll make a mutable -// copy. -type copyOnWriteContext struct { - freelist *FreeList -} - -// Clone clones the btree, lazily. Clone should not be called concurrently, -// but the original tree (t) and the new tree (t2) can be used concurrently -// once the Clone call completes. -// -// The internal tree structure of b is marked read-only and shared between t and -// t2. Writes to both t and t2 use copy-on-write logic, creating new nodes -// whenever one of b's original nodes would have been modified. Read operations -// should have no performance degredation. Write operations for both t and t2 -// will initially experience minor slow-downs caused by additional allocs and -// copies due to the aforementioned copy-on-write logic, but should converge to -// the original performance characteristics of the original tree. -func (t *BTree) Clone() (t2 *BTree) { - // Create two entirely new copy-on-write contexts. - // This operation effectively creates three trees: - // the original, shared nodes (old b.cow) - // the new b.cow nodes - // the new out.cow nodes - cow1, cow2 := *t.cow, *t.cow - out := *t - t.cow = &cow1 - out.cow = &cow2 - return &out -} - -// maxItems returns the max number of items to allow per node. -func (t *BTree) maxItems() int { - return t.degree*2 - 1 -} - -// minItems returns the min number of items to allow per node (ignored for the -// root node). -func (t *BTree) minItems() int { - return t.degree - 1 -} - -func (c *copyOnWriteContext) newNode() (n *node) { - n = c.freelist.newNode() - n.cow = c - return -} - -type freeType int - -const ( - ftFreelistFull freeType = iota // node was freed (available for GC, not stored in freelist) - ftStored // node was stored in the freelist for later use - ftNotOwned // node was ignored by COW, since it's owned by another one -) - -// freeNode frees a node within a given COW context, if it's owned by that -// context. It returns what happened to the node (see freeType const -// documentation). -func (c *copyOnWriteContext) freeNode(n *node) freeType { - if n.cow == c { - // clear to allow GC - n.items.truncate(0) - n.children.truncate(0) - n.cow = nil - if c.freelist.freeNode(n) { - return ftStored - } else { - return ftFreelistFull - } - } else { - return ftNotOwned - } -} - -// ReplaceOrInsert adds the given item to the tree. If an item in the tree -// already equals the given one, it is removed from the tree and returned. -// Otherwise, nil is returned. -// -// nil cannot be added to the tree (will panic). -func (t *BTree) ReplaceOrInsert(item Item) Item { - if item == nil { - panic("nil item being added to BTree") - } - if t.root == nil { - t.root = t.cow.newNode() - t.root.items = append(t.root.items, item) - t.length++ - return nil - } else { - t.root = t.root.mutableFor(t.cow) - if len(t.root.items) >= t.maxItems() { - item2, second := t.root.split(t.maxItems() / 2) - oldroot := t.root - t.root = t.cow.newNode() - t.root.items = append(t.root.items, item2) - t.root.children = append(t.root.children, oldroot, second) - } - } - out := t.root.insert(item, t.maxItems()) - if out == nil { - t.length++ - } - return out -} - -// Delete removes an item equal to the passed in item from the tree, returning -// it. If no such item exists, returns nil. -func (t *BTree) Delete(item Item) Item { - return t.deleteItem(item, removeItem) -} - -// DeleteMin removes the smallest item in the tree and returns it. -// If no such item exists, returns nil. -func (t *BTree) DeleteMin() Item { - return t.deleteItem(nil, removeMin) -} - -// DeleteMax removes the largest item in the tree and returns it. -// If no such item exists, returns nil. -func (t *BTree) DeleteMax() Item { - return t.deleteItem(nil, removeMax) -} - -func (t *BTree) deleteItem(item Item, typ toRemove) Item { - if t.root == nil || len(t.root.items) == 0 { - return nil - } - t.root = t.root.mutableFor(t.cow) - out := t.root.remove(item, t.minItems(), typ) - if len(t.root.items) == 0 && len(t.root.children) > 0 { - oldroot := t.root - t.root = t.root.children[0] - t.cow.freeNode(oldroot) - } - if out != nil { - t.length-- - } - return out -} - -// AscendRange calls the iterator for every value in the tree within the range -// [greaterOrEqual, lessThan), until iterator returns false. -func (t *BTree) AscendRange(greaterOrEqual, lessThan Item, iterator ItemIterator) { - if t.root == nil { - return - } - t.root.iterate(ascend, greaterOrEqual, lessThan, true, false, iterator) -} - -// AscendLessThan calls the iterator for every value in the tree within the range -// [first, pivot), until iterator returns false. -func (t *BTree) AscendLessThan(pivot Item, iterator ItemIterator) { - if t.root == nil { - return - } - t.root.iterate(ascend, nil, pivot, false, false, iterator) -} - -// AscendGreaterOrEqual calls the iterator for every value in the tree within -// the range [pivot, last], until iterator returns false. -func (t *BTree) AscendGreaterOrEqual(pivot Item, iterator ItemIterator) { - if t.root == nil { - return - } - t.root.iterate(ascend, pivot, nil, true, false, iterator) -} - -// Ascend calls the iterator for every value in the tree within the range -// [first, last], until iterator returns false. -func (t *BTree) Ascend(iterator ItemIterator) { - if t.root == nil { - return - } - t.root.iterate(ascend, nil, nil, false, false, iterator) -} - -// DescendRange calls the iterator for every value in the tree within the range -// [lessOrEqual, greaterThan), until iterator returns false. -func (t *BTree) DescendRange(lessOrEqual, greaterThan Item, iterator ItemIterator) { - if t.root == nil { - return - } - t.root.iterate(descend, lessOrEqual, greaterThan, true, false, iterator) -} - -// DescendLessOrEqual calls the iterator for every value in the tree within the range -// [pivot, first], until iterator returns false. -func (t *BTree) DescendLessOrEqual(pivot Item, iterator ItemIterator) { - if t.root == nil { - return - } - t.root.iterate(descend, pivot, nil, true, false, iterator) -} - -// DescendGreaterThan calls the iterator for every value in the tree within -// the range (pivot, last], until iterator returns false. -func (t *BTree) DescendGreaterThan(pivot Item, iterator ItemIterator) { - if t.root == nil { - return - } - t.root.iterate(descend, nil, pivot, false, false, iterator) -} - -// Descend calls the iterator for every value in the tree within the range -// [last, first], until iterator returns false. -func (t *BTree) Descend(iterator ItemIterator) { - if t.root == nil { - return - } - t.root.iterate(descend, nil, nil, false, false, iterator) -} - -// Get looks for the key item in the tree, returning it. It returns nil if -// unable to find that item. -func (t *BTree) Get(key Item) Item { - if t.root == nil { - return nil - } - return t.root.get(key) -} - -// Min returns the smallest item in the tree, or nil if the tree is empty. -func (t *BTree) Min() Item { - return min(t.root) -} - -// Max returns the largest item in the tree, or nil if the tree is empty. -func (t *BTree) Max() Item { - return max(t.root) -} - -// Has returns true if the given key is in the tree. -func (t *BTree) Has(key Item) bool { - return t.Get(key) != nil -} - -// Len returns the number of items currently in the tree. -func (t *BTree) Len() int { - return t.length -} - -// Clear removes all items from the btree. If addNodesToFreelist is true, -// t's nodes are added to its freelist as part of this call, until the freelist -// is full. Otherwise, the root node is simply dereferenced and the subtree -// left to Go's normal GC processes. -// -// This can be much faster -// than calling Delete on all elements, because that requires finding/removing -// each element in the tree and updating the tree accordingly. It also is -// somewhat faster than creating a new tree to replace the old one, because -// nodes from the old tree are reclaimed into the freelist for use by the new -// one, instead of being lost to the garbage collector. -// -// This call takes: -// O(1): when addNodesToFreelist is false, this is a single operation. -// O(1): when the freelist is already full, it breaks out immediately -// O(freelist size): when the freelist is empty and the nodes are all owned -// by this tree, nodes are added to the freelist until full. -// O(tree size): when all nodes are owned by another tree, all nodes are -// iterated over looking for nodes to add to the freelist, and due to -// ownership, none are. -func (t *BTree) Clear(addNodesToFreelist bool) { - if t.root != nil && addNodesToFreelist { - t.root.reset(t.cow) - } - t.root, t.length = nil, 0 -} - -// reset returns a subtree to the freelist. It breaks out immediately if the -// freelist is full, since the only benefit of iterating is to fill that -// freelist up. Returns true if parent reset call should continue. -func (n *node) reset(c *copyOnWriteContext) bool { - for _, child := range n.children { - if !child.reset(c) { - return false - } - } - return c.freeNode(n) != ftFreelistFull -} - -// Int implements the Item interface for integers. -type Int int - -// Less returns true if int(a) < int(b). -func (a Int) Less(b Item) bool { - return a < b.(Int) -} diff --git a/vendor/github.com/google/btree/btree_mem.go b/vendor/github.com/google/btree/btree_mem.go deleted file mode 100644 index cb95b7f..0000000 --- a/vendor/github.com/google/btree/btree_mem.go +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2014 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// +build ignore - -// This binary compares memory usage between btree and gollrb. -package main - -import ( - "flag" - "fmt" - "math/rand" - "runtime" - "time" - - "github.com/google/btree" - "github.com/petar/GoLLRB/llrb" -) - -var ( - size = flag.Int("size", 1000000, "size of the tree to build") - degree = flag.Int("degree", 8, "degree of btree") - gollrb = flag.Bool("llrb", false, "use llrb instead of btree") -) - -func main() { - flag.Parse() - vals := rand.Perm(*size) - var t, v interface{} - v = vals - var stats runtime.MemStats - for i := 0; i < 10; i++ { - runtime.GC() - } - fmt.Println("-------- BEFORE ----------") - runtime.ReadMemStats(&stats) - fmt.Printf("%+v\n", stats) - start := time.Now() - if *gollrb { - tr := llrb.New() - for _, v := range vals { - tr.ReplaceOrInsert(llrb.Int(v)) - } - t = tr // keep it around - } else { - tr := btree.New(*degree) - for _, v := range vals { - tr.ReplaceOrInsert(btree.Int(v)) - } - t = tr // keep it around - } - fmt.Printf("%v inserts in %v\n", *size, time.Since(start)) - fmt.Println("-------- AFTER ----------") - runtime.ReadMemStats(&stats) - fmt.Printf("%+v\n", stats) - for i := 0; i < 10; i++ { - runtime.GC() - } - fmt.Println("-------- AFTER GC ----------") - runtime.ReadMemStats(&stats) - fmt.Printf("%+v\n", stats) - if t == v { - fmt.Println("to make sure vals and tree aren't GC'd") - } -} diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/LICENSE b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/LICENSE deleted file mode 100644 index b2b0650..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/auth/README.md b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/auth/README.md deleted file mode 120000 index 71bfc07..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/auth/README.md +++ /dev/null @@ -1 +0,0 @@ -DOC.md \ No newline at end of file diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/chain.go b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/chain.go deleted file mode 100644 index 45a2f5f..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/chain.go +++ /dev/null @@ -1,183 +0,0 @@ -// Copyright 2016 Michal Witkowski. All Rights Reserved. -// See LICENSE for licensing terms. - -// gRPC Server Interceptor chaining middleware. - -package grpc_middleware - -import ( - "golang.org/x/net/context" - "google.golang.org/grpc" -) - -// ChainUnaryServer creates a single interceptor out of a chain of many interceptors. -// -// Execution is done in left-to-right order, including passing of context. -// For example ChainUnaryServer(one, two, three) will execute one before two before three, and three -// will see context changes of one and two. -func ChainUnaryServer(interceptors ...grpc.UnaryServerInterceptor) grpc.UnaryServerInterceptor { - n := len(interceptors) - - if n > 1 { - lastI := n - 1 - return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { - var ( - chainHandler grpc.UnaryHandler - curI int - ) - - chainHandler = func(currentCtx context.Context, currentReq interface{}) (interface{}, error) { - if curI == lastI { - return handler(currentCtx, currentReq) - } - curI++ - resp, err := interceptors[curI](currentCtx, currentReq, info, chainHandler) - curI-- - return resp, err - } - - return interceptors[0](ctx, req, info, chainHandler) - } - } - - if n == 1 { - return interceptors[0] - } - - // n == 0; Dummy interceptor maintained for backward compatibility to avoid returning nil. - return func(ctx context.Context, req interface{}, _ *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { - return handler(ctx, req) - } -} - -// ChainStreamServer creates a single interceptor out of a chain of many interceptors. -// -// Execution is done in left-to-right order, including passing of context. -// For example ChainUnaryServer(one, two, three) will execute one before two before three. -// If you want to pass context between interceptors, use WrapServerStream. -func ChainStreamServer(interceptors ...grpc.StreamServerInterceptor) grpc.StreamServerInterceptor { - n := len(interceptors) - - if n > 1 { - lastI := n - 1 - return func(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { - var ( - chainHandler grpc.StreamHandler - curI int - ) - - chainHandler = func(currentSrv interface{}, currentStream grpc.ServerStream) error { - if curI == lastI { - return handler(currentSrv, currentStream) - } - curI++ - err := interceptors[curI](currentSrv, currentStream, info, chainHandler) - curI-- - return err - } - - return interceptors[0](srv, stream, info, chainHandler) - } - } - - if n == 1 { - return interceptors[0] - } - - // n == 0; Dummy interceptor maintained for backward compatibility to avoid returning nil. - return func(srv interface{}, stream grpc.ServerStream, _ *grpc.StreamServerInfo, handler grpc.StreamHandler) error { - return handler(srv, stream) - } -} - -// ChainUnaryClient creates a single interceptor out of a chain of many interceptors. -// -// Execution is done in left-to-right order, including passing of context. -// For example ChainUnaryClient(one, two, three) will execute one before two before three. -func ChainUnaryClient(interceptors ...grpc.UnaryClientInterceptor) grpc.UnaryClientInterceptor { - n := len(interceptors) - - if n > 1 { - lastI := n - 1 - return func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error { - var ( - chainHandler grpc.UnaryInvoker - curI int - ) - - chainHandler = func(currentCtx context.Context, currentMethod string, currentReq, currentRepl interface{}, currentConn *grpc.ClientConn, currentOpts ...grpc.CallOption) error { - if curI == lastI { - return invoker(currentCtx, currentMethod, currentReq, currentRepl, currentConn, currentOpts...) - } - curI++ - err := interceptors[curI](currentCtx, currentMethod, currentReq, currentRepl, currentConn, chainHandler, currentOpts...) - curI-- - return err - } - - return interceptors[0](ctx, method, req, reply, cc, chainHandler, opts...) - } - } - - if n == 1 { - return interceptors[0] - } - - // n == 0; Dummy interceptor maintained for backward compatibility to avoid returning nil. - return func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error { - return invoker(ctx, method, req, reply, cc, opts...) - } -} - -// ChainStreamClient creates a single interceptor out of a chain of many interceptors. -// -// Execution is done in left-to-right order, including passing of context. -// For example ChainStreamClient(one, two, three) will execute one before two before three. -func ChainStreamClient(interceptors ...grpc.StreamClientInterceptor) grpc.StreamClientInterceptor { - n := len(interceptors) - - if n > 1 { - lastI := n - 1 - return func(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error) { - var ( - chainHandler grpc.Streamer - curI int - ) - - chainHandler = func(currentCtx context.Context, currentDesc *grpc.StreamDesc, currentConn *grpc.ClientConn, currentMethod string, currentOpts ...grpc.CallOption) (grpc.ClientStream, error) { - if curI == lastI { - return streamer(currentCtx, currentDesc, currentConn, currentMethod, currentOpts...) - } - curI++ - stream, err := interceptors[curI](currentCtx, currentDesc, currentConn, currentMethod, chainHandler, currentOpts...) - curI-- - return stream, err - } - - return interceptors[0](ctx, desc, cc, method, chainHandler, opts...) - } - } - - if n == 1 { - return interceptors[0] - } - - // n == 0; Dummy interceptor maintained for backward compatibility to avoid returning nil. - return func(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error) { - return streamer(ctx, desc, cc, method, opts...) - } -} - -// Chain creates a single interceptor out of a chain of many interceptors. -// -// WithUnaryServerChain is a grpc.Server config option that accepts multiple unary interceptors. -// Basically syntactic sugar. -func WithUnaryServerChain(interceptors ...grpc.UnaryServerInterceptor) grpc.ServerOption { - return grpc.UnaryInterceptor(ChainUnaryServer(interceptors...)) -} - -// WithStreamServerChain is a grpc.Server config option that accepts multiple stream interceptors. -// Basically syntactic sugar. -func WithStreamServerChain(interceptors ...grpc.StreamServerInterceptor) grpc.ServerOption { - return grpc.StreamInterceptor(ChainStreamServer(interceptors...)) -} diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/doc.go b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/doc.go deleted file mode 100644 index 7168950..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/doc.go +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2016 Michal Witkowski. All Rights Reserved. -// See LICENSE for licensing terms. - -/* -`grpc_middleware` is a collection of gRPC middleware packages: interceptors, helpers and tools. - -Middleware - -gRPC is a fantastic RPC middleware, which sees a lot of adoption in the Golang world. However, the -upstream gRPC codebase is relatively bare bones. - -This package, and most of its child packages provides commonly needed middleware for gRPC: -client-side interceptors for retires, server-side interceptors for input validation and auth, -functions for chaining said interceptors, metadata convenience methods and more. - -Chaining - -By default, gRPC doesn't allow one to have more than one interceptor either on the client nor on -the server side. `grpc_middleware` provides convenient chaining methods - -Simple way of turning a multiple interceptors into a single interceptor. Here's an example for -server chaining: - - myServer := grpc.NewServer( - grpc.StreamInterceptor(grpc_middleware.ChainStreamServer(loggingStream, monitoringStream, authStream)), - grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer(loggingUnary, monitoringUnary, authUnary), - ) - -These interceptors will be executed from left to right: logging, monitoring and auth. - -Here's an example for client side chaining: - - clientConn, err = grpc.Dial( - address, - grpc.WithUnaryInterceptor(grpc_middleware.ChainUnaryClient(monitoringClientUnary, retryUnary)), - grpc.WithStreamInterceptor(grpc_middleware.ChainStreamClient(monitoringClientStream, retryStream)), - ) - client = pb_testproto.NewTestServiceClient(clientConn) - resp, err := client.PingEmpty(s.ctx, &myservice.Request{Msg: "hello"}) - -These interceptors will be executed from left to right: monitoring and then retry logic. - -The retry interceptor will call every interceptor that follows it whenever when a retry happens. - -Writing Your Own - -Implementing your own interceptor is pretty trivial: there are interfaces for that. But the interesting -bit exposing common data to handlers (and other middleware), similarly to HTTP Middleware design. -For example, you may want to pass the identity of the caller from the auth interceptor all the way -to the handling function. - -For example, a client side interceptor example for auth looks like: - - func FakeAuthUnaryInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { - newCtx := context.WithValue(ctx, "user_id", "john@example.com") - return handler(newCtx, req) - } - -Unfortunately, it's not as easy for streaming RPCs. These have the `context.Context` embedded within -the `grpc.ServerStream` object. To pass values through context, a wrapper (`WrappedServerStream`) is -needed. For example: - - func FakeAuthStreamingInterceptor(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { - newStream := grpc_middleware.WrapServerStream(stream) - newStream.WrappedContext = context.WithValue(ctx, "user_id", "john@example.com") - return handler(srv, stream) - } -*/ -package grpc_middleware diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/logging/README.md b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/logging/README.md deleted file mode 120000 index 71bfc07..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/logging/README.md +++ /dev/null @@ -1 +0,0 @@ -DOC.md \ No newline at end of file diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/README.md b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/README.md deleted file mode 120000 index 71bfc07..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/README.md +++ /dev/null @@ -1 +0,0 @@ -DOC.md \ No newline at end of file diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/README.md b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/README.md deleted file mode 120000 index 71bfc07..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/README.md +++ /dev/null @@ -1 +0,0 @@ -DOC.md \ No newline at end of file diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/recovery/README.md b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/recovery/README.md deleted file mode 120000 index 71bfc07..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/recovery/README.md +++ /dev/null @@ -1 +0,0 @@ -DOC.md \ No newline at end of file diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/retry/README.md b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/retry/README.md deleted file mode 120000 index 71bfc07..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/retry/README.md +++ /dev/null @@ -1 +0,0 @@ -DOC.md \ No newline at end of file diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tags/README.md b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tags/README.md deleted file mode 120000 index 71bfc07..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tags/README.md +++ /dev/null @@ -1 +0,0 @@ -DOC.md \ No newline at end of file diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tags/context.go b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tags/context.go deleted file mode 100644 index 583025c..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tags/context.go +++ /dev/null @@ -1,78 +0,0 @@ -package grpc_ctxtags - -import ( - "context" -) - -type ctxMarker struct{} - -var ( - // ctxMarkerKey is the Context value marker used by *all* logging middleware. - // The logging middleware object must interf - ctxMarkerKey = &ctxMarker{} - // NoopTags is a trivial, minimum overhead implementation of Tags for which all operations are no-ops. - NoopTags = &noopTags{} -) - -// Tags is the interface used for storing request tags between Context calls. -// The default implementation is *not* thread safe, and should be handled only in the context of the request. -type Tags interface { - // Set sets the given key in the metadata tags. - Set(key string, value interface{}) Tags - // Has checks if the given key exists. - Has(key string) bool - // Values returns a map of key to values. - // Do not modify the underlying map, please use Set instead. - Values() map[string]interface{} -} - -type mapTags struct { - values map[string]interface{} -} - -func (t *mapTags) Set(key string, value interface{}) Tags { - t.values[key] = value - return t -} - -func (t *mapTags) Has(key string) bool { - _, ok := t.values[key] - return ok -} - -func (t *mapTags) Values() map[string]interface{} { - return t.values -} - -type noopTags struct{} - -func (t *noopTags) Set(key string, value interface{}) Tags { - return t -} - -func (t *noopTags) Has(key string) bool { - return false -} - -func (t *noopTags) Values() map[string]interface{} { - return nil -} - -// Extracts returns a pre-existing Tags object in the Context. -// If the context wasn't set in a tag interceptor, a no-op Tag storage is returned that will *not* be propagated in context. -func Extract(ctx context.Context) Tags { - t, ok := ctx.Value(ctxMarkerKey).(Tags) - if !ok { - return NoopTags - } - - return t -} - -func setInContext(ctx context.Context, tags Tags) context.Context { - return context.WithValue(ctx, ctxMarkerKey, tags) -} - -func newTags() Tags { - return &mapTags{values: make(map[string]interface{})} -} diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tags/doc.go b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tags/doc.go deleted file mode 100644 index 960638d..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tags/doc.go +++ /dev/null @@ -1,22 +0,0 @@ -/* -`grpc_ctxtags` adds a Tag object to the context that can be used by other middleware to add context about a request. - -Request Context Tags - -Tags describe information about the request, and can be set and used by other middleware, or handlers. Tags are used -for logging and tracing of requests. Tags are populated both upwards, *and* downwards in the interceptor-handler stack. - -You can automatically extract tags (in `grpc.request.`) from request payloads. - -For unary and server-streaming methods, pass in the `WithFieldExtractor` option. For client-streams and bidirectional-streams, you can -use `WithFieldExtractorForInitialReq` which will extract the tags from the first message passed from client to server. -Note the tags will not be modified for subsequent requests, so this option only makes sense when the initial message -establishes the meta-data for the stream. - -If a user doesn't use the interceptors that initialize the `Tags` object, all operations following from an `Extract(ctx)` -will be no-ops. This is to ensure that code doesn't panic if the interceptors weren't used. - -Tags fields are typed, and shallow and should follow the OpenTracing semantics convention: -https://github.com/opentracing/specification/blob/master/semantic_conventions.md -*/ -package grpc_ctxtags diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tags/fieldextractor.go b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tags/fieldextractor.go deleted file mode 100644 index 549ff48..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tags/fieldextractor.go +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2017 Michal Witkowski. All Rights Reserved. -// See LICENSE for licensing terms. - -package grpc_ctxtags - -import ( - "reflect" -) - -// RequestFieldExtractorFunc is a user-provided function that extracts field information from a gRPC request. -// It is called from tags middleware on arrival of unary request or a server-stream request. -// Keys and values will be added to the context tags of the request. If there are no fields, you should return a nil. -type RequestFieldExtractorFunc func(fullMethod string, req interface{}) map[string]interface{} - -type requestFieldsExtractor interface { - // ExtractRequestFields is a method declared on a Protobuf message that extracts fields from the interface. - // The values from the extracted fields should be set in the appendToMap, in order to avoid allocations. - ExtractRequestFields(appendToMap map[string]interface{}) -} - -// CodeGenRequestFieldExtractor is a function that relies on code-generated functions that export log fields from requests. -// These are usually coming from a protoc-plugin that generates additional information based on custom field options. -func CodeGenRequestFieldExtractor(fullMethod string, req interface{}) map[string]interface{} { - if ext, ok := req.(requestFieldsExtractor); ok { - retMap := make(map[string]interface{}) - ext.ExtractRequestFields(retMap) - if len(retMap) == 0 { - return nil - } - return retMap - } - return nil -} - -// TagBasedRequestFieldExtractor is a function that relies on Go struct tags to export log fields from requests. -// These are usually coming from a protoc-plugin, such as Gogo protobuf. -// -// message Metadata { -// repeated string tags = 1 [ (gogoproto.moretags) = "log_field:\"meta_tags\"" ]; -// } -// -// The tagName is configurable using the tagName variable. Here it would be "log_field". -func TagBasedRequestFieldExtractor(tagName string) RequestFieldExtractorFunc { - return func(fullMethod string, req interface{}) map[string]interface{} { - retMap := make(map[string]interface{}) - reflectMessageTags(req, retMap, tagName) - if len(retMap) == 0 { - return nil - } - return retMap - } -} - -func reflectMessageTags(msg interface{}, existingMap map[string]interface{}, tagName string) { - v := reflect.ValueOf(msg) - // Only deal with pointers to structs. - if v.Kind() != reflect.Ptr || v.Elem().Kind() != reflect.Struct { - return - } - // Deref the pointer get to the struct. - v = v.Elem() - t := v.Type() - for i := 0; i < v.NumField(); i++ { - field := v.Field(i) - kind := field.Kind() - // Only recurse down direct pointers, which should only be to nested structs. - if kind == reflect.Ptr { - reflectMessageTags(field.Interface(), existingMap, tagName) - } - // In case of arrays/splices (repeated fields) go down to the concrete type. - if kind == reflect.Array || kind == reflect.Slice { - if field.Len() == 0 { - continue - } - kind = field.Index(0).Kind() - } - // Only be interested in - if (kind >= reflect.Bool && kind <= reflect.Float64) || kind == reflect.String { - if tag := t.Field(i).Tag.Get(tagName); tag != "" { - existingMap[tag] = field.Interface() - } - } - } - return -} diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tags/interceptors.go b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tags/interceptors.go deleted file mode 100644 index 038afd2..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tags/interceptors.go +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2017 Michal Witkowski. All Rights Reserved. -// See LICENSE for licensing terms. - -package grpc_ctxtags - -import ( - "github.com/grpc-ecosystem/go-grpc-middleware" - "golang.org/x/net/context" - "google.golang.org/grpc" - "google.golang.org/grpc/peer" -) - -// UnaryServerInterceptor returns a new unary server interceptors that sets the values for request tags. -func UnaryServerInterceptor(opts ...Option) grpc.UnaryServerInterceptor { - o := evaluateOptions(opts) - return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { - newCtx := newTagsForCtx(ctx) - if o.requestFieldsFunc != nil { - setRequestFieldTags(newCtx, o.requestFieldsFunc, info.FullMethod, req) - } - return handler(newCtx, req) - } -} - -// StreamServerInterceptor returns a new streaming server interceptor that sets the values for request tags. -func StreamServerInterceptor(opts ...Option) grpc.StreamServerInterceptor { - o := evaluateOptions(opts) - return func(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { - newCtx := newTagsForCtx(stream.Context()) - if o.requestFieldsFunc == nil { - // Short-circuit, don't do the expensive bit of allocating a wrappedStream. - wrappedStream := grpc_middleware.WrapServerStream(stream) - wrappedStream.WrappedContext = newCtx - return handler(srv, wrappedStream) - } - wrapped := &wrappedStream{stream, info, o, newCtx, true} - err := handler(srv, wrapped) - return err - } -} - -// wrappedStream is a thin wrapper around grpc.ServerStream that allows modifying context and extracts log fields from the initial message. -type wrappedStream struct { - grpc.ServerStream - info *grpc.StreamServerInfo - opts *options - // WrappedContext is the wrapper's own Context. You can assign it. - WrappedContext context.Context - initial bool -} - -// Context returns the wrapper's WrappedContext, overwriting the nested grpc.ServerStream.Context() -func (w *wrappedStream) Context() context.Context { - return w.WrappedContext -} - -func (w *wrappedStream) RecvMsg(m interface{}) error { - err := w.ServerStream.RecvMsg(m) - // We only do log fields extraction on the single-request of a server-side stream. - if !w.info.IsClientStream || w.opts.requestFieldsFromInitial && w.initial { - w.initial = false - - setRequestFieldTags(w.Context(), w.opts.requestFieldsFunc, w.info.FullMethod, m) - } - return err -} - -func newTagsForCtx(ctx context.Context) context.Context { - t := newTags() - if peer, ok := peer.FromContext(ctx); ok { - t.Set("peer.address", peer.Addr.String()) - } - return setInContext(ctx, t) -} - -func setRequestFieldTags(ctx context.Context, f RequestFieldExtractorFunc, fullMethodName string, req interface{}) { - if valMap := f(fullMethodName, req); valMap != nil { - t := Extract(ctx) - for k, v := range valMap { - t.Set("grpc.request."+k, v) - } - } -} diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tags/options.go b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tags/options.go deleted file mode 100644 index 952775f..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tags/options.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2017 Michal Witkowski. All Rights Reserved. -// See LICENSE for licensing terms. - -package grpc_ctxtags - -var ( - defaultOptions = &options{ - requestFieldsFunc: nil, - } -) - -type options struct { - requestFieldsFunc RequestFieldExtractorFunc - requestFieldsFromInitial bool -} - -func evaluateOptions(opts []Option) *options { - optCopy := &options{} - *optCopy = *defaultOptions - for _, o := range opts { - o(optCopy) - } - return optCopy -} - -type Option func(*options) - -// WithFieldExtractor customizes the function for extracting log fields from protobuf messages, for -// unary and server-streamed methods only. -func WithFieldExtractor(f RequestFieldExtractorFunc) Option { - return func(o *options) { - o.requestFieldsFunc = f - } -} - -// WithFieldExtractorForInitialReq customizes the function for extracting log fields from protobuf messages, -// for all unary and streaming methods. For client-streams and bidirectional-streams, the tags will be -// extracted from the first message from the client. -func WithFieldExtractorForInitialReq(f RequestFieldExtractorFunc) Option { - return func(o *options) { - o.requestFieldsFunc = f - o.requestFieldsFromInitial = true - } -} diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/README.md b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/README.md deleted file mode 120000 index 71bfc07..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/README.md +++ /dev/null @@ -1 +0,0 @@ -DOC.md \ No newline at end of file diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/client_interceptors.go b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/client_interceptors.go deleted file mode 100644 index f8fdecf..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/client_interceptors.go +++ /dev/null @@ -1,142 +0,0 @@ -// Copyright 2017 Michal Witkowski. All Rights Reserved. -// See LICENSE for licensing terms. - -package grpc_opentracing - -import ( - "io" - "sync" - - "github.com/grpc-ecosystem/go-grpc-middleware/util/metautils" - opentracing "github.com/opentracing/opentracing-go" - "github.com/opentracing/opentracing-go/ext" - "github.com/opentracing/opentracing-go/log" - "golang.org/x/net/context" - "google.golang.org/grpc" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" -) - -// UnaryClientInterceptor returns a new unary client interceptor for OpenTracing. -func UnaryClientInterceptor(opts ...Option) grpc.UnaryClientInterceptor { - o := evaluateOptions(opts) - return func(parentCtx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error { - if o.filterOutFunc != nil && !o.filterOutFunc(parentCtx, method) { - return invoker(parentCtx, method, req, reply, cc, opts...) - } - newCtx, clientSpan := newClientSpanFromContext(parentCtx, o.tracer, method) - err := invoker(newCtx, method, req, reply, cc, opts...) - finishClientSpan(clientSpan, err) - return err - } -} - -// StreamClientInterceptor returns a new streaming client interceptor for OpenTracing. -func StreamClientInterceptor(opts ...Option) grpc.StreamClientInterceptor { - o := evaluateOptions(opts) - return func(parentCtx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error) { - if o.filterOutFunc != nil && !o.filterOutFunc(parentCtx, method) { - return streamer(parentCtx, desc, cc, method, opts...) - } - newCtx, clientSpan := newClientSpanFromContext(parentCtx, o.tracer, method) - clientStream, err := streamer(newCtx, desc, cc, method, opts...) - if err != nil { - finishClientSpan(clientSpan, err) - return nil, err - } - return &tracedClientStream{ClientStream: clientStream, clientSpan: clientSpan}, nil - } -} - -// type serverStreamingRetryingStream is the implementation of grpc.ClientStream that acts as a -// proxy to the underlying call. If any of the RecvMsg() calls fail, it will try to reestablish -// a new ClientStream according to the retry policy. -type tracedClientStream struct { - grpc.ClientStream - mu sync.Mutex - alreadyFinished bool - clientSpan opentracing.Span -} - -func (s *tracedClientStream) Header() (metadata.MD, error) { - h, err := s.ClientStream.Header() - if err != nil { - s.finishClientSpan(err) - } - return h, err -} - -func (s *tracedClientStream) SendMsg(m interface{}) error { - err := s.ClientStream.SendMsg(m) - if err != nil { - s.finishClientSpan(err) - } - return err -} - -func (s *tracedClientStream) CloseSend() error { - err := s.ClientStream.CloseSend() - if err != nil { - s.finishClientSpan(err) - } - return err -} - -func (s *tracedClientStream) RecvMsg(m interface{}) error { - err := s.ClientStream.RecvMsg(m) - if err != nil { - s.finishClientSpan(err) - } - return err -} - -func (s *tracedClientStream) finishClientSpan(err error) { - s.mu.Lock() - defer s.mu.Unlock() - if !s.alreadyFinished { - finishClientSpan(s.clientSpan, err) - s.alreadyFinished = true - } -} - -// ClientAddContextTags returns a context with specified opentracing tags, which -// are used by UnaryClientInterceptor/StreamClientInterceptor when creating a -// new span. -func ClientAddContextTags(ctx context.Context, tags opentracing.Tags) context.Context { - return context.WithValue(ctx, clientSpanTagKey{}, tags) -} - -type clientSpanTagKey struct{} - -func newClientSpanFromContext(ctx context.Context, tracer opentracing.Tracer, fullMethodName string) (context.Context, opentracing.Span) { - var parentSpanCtx opentracing.SpanContext - if parent := opentracing.SpanFromContext(ctx); parent != nil { - parentSpanCtx = parent.Context() - } - opts := []opentracing.StartSpanOption{ - opentracing.ChildOf(parentSpanCtx), - ext.SpanKindRPCClient, - grpcTag, - } - if tagx := ctx.Value(clientSpanTagKey{}); tagx != nil { - if opt, ok := tagx.(opentracing.StartSpanOption); ok { - opts = append(opts, opt) - } - } - clientSpan := tracer.StartSpan(fullMethodName, opts...) - // Make sure we add this to the metadata of the call, so it gets propagated: - md := metautils.ExtractOutgoing(ctx).Clone() - if err := tracer.Inject(clientSpan.Context(), opentracing.HTTPHeaders, metadataTextMap(md)); err != nil { - grpclog.Printf("grpc_opentracing: failed serializing trace information: %v", err) - } - ctxWithMetadata := md.ToOutgoing(ctx) - return opentracing.ContextWithSpan(ctxWithMetadata, clientSpan), clientSpan -} - -func finishClientSpan(clientSpan opentracing.Span, err error) { - if err != nil && err != io.EOF { - ext.Error.Set(clientSpan, true) - clientSpan.LogFields(log.String("event", "error"), log.String("message", err.Error())) - } - clientSpan.Finish() -} diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/doc.go b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/doc.go deleted file mode 100644 index 7a58efc..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/doc.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2017 Michal Witkowski. All Rights Reserved. -// See LICENSE for licensing terms. - -/* -`grpc_opentracing` adds OpenTracing - -OpenTracing Interceptors - -These are both client-side and server-side interceptors for OpenTracing. They are a provider-agnostic, with backends -such as Zipkin, or Google Stackdriver Trace. - -For a service that sends out requests and receives requests, you *need* to use both, otherwise downstream requests will -not have the appropriate requests propagated. - -All server-side spans are tagged with grpc_ctxtags information. - -For more information see: -http://opentracing.io/documentation/ -https://github.com/opentracing/specification/blob/master/semantic_conventions.md - -*/ -package grpc_opentracing diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/id_extract.go b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/id_extract.go deleted file mode 100644 index 2e0e447..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/id_extract.go +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2017 Michal Witkowski. All Rights Reserved. -// See LICENSE for licensing terms. - -package grpc_opentracing - -import ( - "strings" - - "github.com/grpc-ecosystem/go-grpc-middleware/tags" - "github.com/opentracing/opentracing-go" - "google.golang.org/grpc/grpclog" -) - -const ( - TagTraceId = "trace.traceid" - TagSpanId = "trace.spanid" -) - -// hackyInjectOpentracingIdsToTags writes the given context to the ctxtags. -// This is done in an incredibly hacky way, because the public-facing interface of opentracing doesn't give access to -// the TraceId and SpanId of the SpanContext. Only the Tracer's Inject/Extract methods know what these are. -// Most tracers have them encoded as keys with 'traceid' and 'spanid': -// https://github.com/openzipkin/zipkin-go-opentracing/blob/594640b9ef7e5c994e8d9499359d693c032d738c/propagation_ot.go#L29 -// https://github.com/opentracing/basictracer-go/blob/1b32af207119a14b1b231d451df3ed04a72efebf/propagation_ot.go#L26 -func hackyInjectOpentracingIdsToTags(span opentracing.Span, tags grpc_ctxtags.Tags) { - if err := span.Tracer().Inject(span.Context(), opentracing.HTTPHeaders, &hackyTagsCarrier{tags}); err != nil { - grpclog.Printf("grpc_opentracing: failed extracting trace info into ctx %v", err) - } -} - -// hackyTagsCarrier is a really hacky way of -type hackyTagsCarrier struct { - grpc_ctxtags.Tags -} - -func (t *hackyTagsCarrier) Set(key, val string) { - if strings.Contains(key, "traceid") || strings.Contains(strings.ToLower(key), "traceid") { - t.Tags.Set(TagTraceId, val) // this will most likely be base-16 (hex) encoded - } else if (strings.Contains(key, "spanid") && !strings.Contains(key, "parent")) || (strings.Contains(strings.ToLower(key), "spanid") && !strings.Contains(strings.ToLower(key), "parent")) { - t.Tags.Set(TagSpanId, val) // this will most likely be base-16 (hex) encoded - } -} diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/metadata.go b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/metadata.go deleted file mode 100644 index 38f251d..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/metadata.go +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2017 Michal Witkowski. All Rights Reserved. -// See LICENSE for licensing terms. - -package grpc_opentracing - -import ( - "encoding/base64" - "strings" - - "fmt" - - "google.golang.org/grpc/metadata" -) - -const ( - binHdrSuffix = "-bin" -) - -// metadataTextMap extends a metadata.MD to be an opentracing textmap -type metadataTextMap metadata.MD - -// Set is a opentracing.TextMapReader interface that extracts values. -func (m metadataTextMap) Set(key, val string) { - // gRPC allows for complex binary values to be written. - encodedKey, encodedVal := encodeKeyValue(key, val) - // The metadata object is a multimap, and previous values may exist, but for opentracing headers, we do not append - // we just override. - m[encodedKey] = []string{encodedVal} -} - -// ForeachKey is a opentracing.TextMapReader interface that extracts values. -func (m metadataTextMap) ForeachKey(callback func(key, val string) error) error { - for k, vv := range m { - for _, v := range vv { - if decodedKey, decodedVal, err := metadata.DecodeKeyValue(k, v); err == nil { - if err = callback(decodedKey, decodedVal); err != nil { - return err - } - } else { - return fmt.Errorf("failed decoding opentracing from gRPC metadata: %v", err) - } - } - } - return nil -} - -// encodeKeyValue encodes key and value qualified for transmission via gRPC. -// note: copy pasted from private values of grpc.metadata -func encodeKeyValue(k, v string) (string, string) { - k = strings.ToLower(k) - if strings.HasSuffix(k, binHdrSuffix) { - val := base64.StdEncoding.EncodeToString([]byte(v)) - v = string(val) - } - return k, v -} diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/options.go b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/options.go deleted file mode 100644 index e75102b..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/options.go +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2017 Michal Witkowski. All Rights Reserved. -// See LICENSE for licensing terms. - -package grpc_opentracing - -import ( - "context" - - "github.com/opentracing/opentracing-go" -) - -var ( - defaultOptions = &options{ - filterOutFunc: nil, - tracer: nil, - } -) - -// FilterFunc allows users to provide a function that filters out certain methods from being traced. -// -// If it returns false, the given request will not be traced. -type FilterFunc func(ctx context.Context, fullMethodName string) bool - -type options struct { - filterOutFunc FilterFunc - tracer opentracing.Tracer -} - -func evaluateOptions(opts []Option) *options { - optCopy := &options{} - *optCopy = *defaultOptions - for _, o := range opts { - o(optCopy) - } - if optCopy.tracer == nil { - optCopy.tracer = opentracing.GlobalTracer() - } - return optCopy -} - -type Option func(*options) - -// WithFilterFunc customizes the function used for deciding whether a given call is traced or not. -func WithFilterFunc(f FilterFunc) Option { - return func(o *options) { - o.filterOutFunc = f - } -} - -// WithTracer sets a custom tracer to be used for this middleware, otherwise the opentracing.GlobalTracer is used. -func WithTracer(tracer opentracing.Tracer) Option { - return func(o *options) { - o.tracer = tracer - } -} diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/server_interceptors.go b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/server_interceptors.go deleted file mode 100644 index 498e8ef..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing/server_interceptors.go +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2017 Michal Witkowski. All Rights Reserved. -// See LICENSE for licensing terms. - -package grpc_opentracing - -import ( - "github.com/grpc-ecosystem/go-grpc-middleware" - "github.com/grpc-ecosystem/go-grpc-middleware/tags" - "github.com/grpc-ecosystem/go-grpc-middleware/util/metautils" - "github.com/opentracing/opentracing-go" - "github.com/opentracing/opentracing-go/ext" - "github.com/opentracing/opentracing-go/log" - "golang.org/x/net/context" - "google.golang.org/grpc" - "google.golang.org/grpc/grpclog" -) - -var ( - grpcTag = opentracing.Tag{Key: string(ext.Component), Value: "gRPC"} -) - -// UnaryServerInterceptor returns a new unary server interceptor for OpenTracing. -func UnaryServerInterceptor(opts ...Option) grpc.UnaryServerInterceptor { - o := evaluateOptions(opts) - return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { - if o.filterOutFunc != nil && !o.filterOutFunc(ctx, info.FullMethod) { - return handler(ctx, req) - } - newCtx, serverSpan := newServerSpanFromInbound(ctx, o.tracer, info.FullMethod) - resp, err := handler(newCtx, req) - finishServerSpan(ctx, serverSpan, err) - return resp, err - } -} - -// StreamServerInterceptor returns a new streaming server interceptor for OpenTracing. -func StreamServerInterceptor(opts ...Option) grpc.StreamServerInterceptor { - o := evaluateOptions(opts) - return func(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { - if o.filterOutFunc != nil && !o.filterOutFunc(stream.Context(), info.FullMethod) { - return handler(srv, stream) - } - newCtx, serverSpan := newServerSpanFromInbound(stream.Context(), o.tracer, info.FullMethod) - wrappedStream := grpc_middleware.WrapServerStream(stream) - wrappedStream.WrappedContext = newCtx - err := handler(srv, wrappedStream) - finishServerSpan(newCtx, serverSpan, err) - return err - } -} - -func newServerSpanFromInbound(ctx context.Context, tracer opentracing.Tracer, fullMethodName string) (context.Context, opentracing.Span) { - md := metautils.ExtractIncoming(ctx) - parentSpanContext, err := tracer.Extract(opentracing.HTTPHeaders, metadataTextMap(md)) - if err != nil && err != opentracing.ErrSpanContextNotFound { - grpclog.Printf("grpc_opentracing: failed parsing trace information: %v", err) - } - - serverSpan := tracer.StartSpan( - fullMethodName, - // this is magical, it attaches the new span to the parent parentSpanContext, and creates an unparented one if empty. - ext.RPCServerOption(parentSpanContext), - grpcTag, - ) - hackyInjectOpentracingIdsToTags(serverSpan, grpc_ctxtags.Extract(ctx)) - return opentracing.ContextWithSpan(ctx, serverSpan), serverSpan -} - -func finishServerSpan(ctx context.Context, serverSpan opentracing.Span, err error) { - // Log context information - tags := grpc_ctxtags.Extract(ctx) - for k, v := range tags.Values() { - // Don't tag errors, log them instead. - if vErr, ok := v.(error); ok { - serverSpan.LogKV(k, vErr.Error()) - - } else { - serverSpan.SetTag(k, v) - } - } - if err != nil { - ext.Error.Set(serverSpan, true) - serverSpan.LogFields(log.String("event", "error"), log.String("message", err.Error())) - } - serverSpan.Finish() -} diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/util/metautils/README.md b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/util/metautils/README.md deleted file mode 120000 index 71bfc07..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/util/metautils/README.md +++ /dev/null @@ -1 +0,0 @@ -DOC.md \ No newline at end of file diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/util/metautils/doc.go b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/util/metautils/doc.go deleted file mode 100644 index 1ed9bb4..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/util/metautils/doc.go +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2016 Michal Witkowski. All Rights Reserved. -// See LICENSE for licensing terms. - -/* -Package `metautils` provides convenience functions for dealing with gRPC metadata.MD objects inside -Context handlers. - -While the upstream grpc-go package contains decent functionality (see https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md) -they are hard to use. - -The majority of functions center around the NiceMD, which is a convenience wrapper around metadata.MD. For example -the following code allows you to easily extract incoming metadata (server handler) and put it into a new client context -metadata. - - nmd := metautils.ExtractIncoming(serverCtx).Clone(":authorization", ":custom") - clientCtx := nmd.Set("x-client-header", "2").Set("x-another", "3").ToOutgoing(ctx) -*/ - -package metautils diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/util/metautils/nicemd.go b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/util/metautils/nicemd.go deleted file mode 100644 index a277bee..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/util/metautils/nicemd.go +++ /dev/null @@ -1,126 +0,0 @@ -// Copyright 2016 Michal Witkowski. All Rights Reserved. -// See LICENSE for licensing terms. - -package metautils - -import ( - "strings" - - "golang.org/x/net/context" - "google.golang.org/grpc/metadata" -) - -// NiceMD is a convenience wrapper definiting extra functions on the metadata. -type NiceMD metadata.MD - -// ExtractIncoming extracts an inbound metadata from the server-side context. -// -// This function always returns a NiceMD wrapper of the metadata.MD, in case the context doesn't have metadata it returns -// a new empty NiceMD. -func ExtractIncoming(ctx context.Context) NiceMD { - md, ok := metadata.FromIncomingContext(ctx) - if !ok { - return NiceMD(metadata.Pairs()) - } - return NiceMD(md) -} - -// ExtractOutgoing extracts an outbound metadata from the client-side context. -// -// This function always returns a NiceMD wrapper of the metadata.MD, in case the context doesn't have metadata it returns -// a new empty NiceMD. -func ExtractOutgoing(ctx context.Context) NiceMD { - md, ok := metadata.FromOutgoingContext(ctx) - if !ok { - return NiceMD(metadata.Pairs()) - } - return NiceMD(md) -} - -// Clone performs a *deep* copy of the metadata.MD. -// -// You can specify the lower-case copiedKeys to only copy certain whitelisted keys. If no keys are explicitly whitelisted -// all keys get copied. -func (m NiceMD) Clone(copiedKeys ...string) NiceMD { - newMd := NiceMD(metadata.Pairs()) - for k, vv := range m { - found := false - if len(copiedKeys) == 0 { - found = true - } else { - for _, allowedKey := range copiedKeys { - if strings.ToLower(allowedKey) == strings.ToLower(k) { - found = true - break - } - } - } - if !found { - continue - } - newMd[k] = make([]string, len(vv)) - copy(newMd[k], vv) - } - return NiceMD(newMd) -} - -// ToOutgoing sets the given NiceMD as a client-side context for dispatching. -func (m NiceMD) ToOutgoing(ctx context.Context) context.Context { - return metadata.NewOutgoingContext(ctx, metadata.MD(m)) -} - -// ToIncoming sets the given NiceMD as a server-side context for dispatching. -// -// This is mostly useful in ServerInterceptors.. -func (m NiceMD) ToIncoming(ctx context.Context) context.Context { - return metadata.NewIncomingContext(ctx, metadata.MD(m)) -} - -// Get retrieves a single value from the metadata. -// -// It works analogously to http.Header.Get, returning the first value if there are many set. If the value is not set, -// an empty string is returned. -// -// The function is binary-key safe. -func (m NiceMD) Get(key string) string { - k, _ := encodeKeyValue(key, "") - vv, ok := m[k] - if !ok { - return "" - } - return vv[0] -} - -// Del retrieves a single value from the metadata. -// -// It works analogously to http.Header.Del, deleting all values if they exist. -// -// The function is binary-key safe. - -func (m NiceMD) Del(key string) NiceMD { - k, _ := encodeKeyValue(key, "") - delete(m, k) - return m -} - -// Set sets the given value in a metadata. -// -// It works analogously to http.Header.Set, overwriting all previous metadata values. -// -// The function is binary-key safe. -func (m NiceMD) Set(key string, value string) NiceMD { - k, v := encodeKeyValue(key, value) - m[k] = []string{v} - return m -} - -// Add retrieves a single value from the metadata. -// -// It works analogously to http.Header.Add, as it appends to any existing values associated with key. -// -// The function is binary-key safe. -func (m NiceMD) Add(key string, value string) NiceMD { - k, v := encodeKeyValue(key, value) - m[k] = append(m[k], v) - return m -} diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/util/metautils/single_key.go b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/util/metautils/single_key.go deleted file mode 100644 index 8a53871..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/util/metautils/single_key.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2016 Michal Witkowski. All Rights Reserved. -// See LICENSE for licensing terms. - -package metautils - -import ( - "encoding/base64" - "strings" -) - -const ( - binHdrSuffix = "-bin" -) - -func encodeKeyValue(k, v string) (string, string) { - k = strings.ToLower(k) - if strings.HasSuffix(k, binHdrSuffix) { - val := base64.StdEncoding.EncodeToString([]byte(v)) - v = string(val) - } - return k, v -} diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/wrappers.go b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/wrappers.go deleted file mode 100644 index 597b862..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/wrappers.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2016 Michal Witkowski. All Rights Reserved. -// See LICENSE for licensing terms. - -package grpc_middleware - -import ( - "golang.org/x/net/context" - "google.golang.org/grpc" -) - -// WrappedServerStream is a thin wrapper around grpc.ServerStream that allows modifying context. -type WrappedServerStream struct { - grpc.ServerStream - // WrappedContext is the wrapper's own Context. You can assign it. - WrappedContext context.Context -} - -// Context returns the wrapper's WrappedContext, overwriting the nested grpc.ServerStream.Context() -func (w *WrappedServerStream) Context() context.Context { - return w.WrappedContext -} - -// WrapServerStream returns a ServerStream that has the ability to overwrite context. -func WrapServerStream(stream grpc.ServerStream) *WrappedServerStream { - if existing, ok := stream.(*WrappedServerStream); ok { - return existing - } - return &WrappedServerStream{ServerStream: stream, WrappedContext: stream.Context()} -} diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/LICENSE b/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/LICENSE deleted file mode 100644 index b2b0650..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/client.go b/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/client.go deleted file mode 100644 index 751a4c7..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/client.go +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2016 Michal Witkowski. All Rights Reserved. -// See LICENSE for licensing terms. - -// gRPC Prometheus monitoring interceptors for client-side gRPC. - -package grpc_prometheus - -import ( - prom "github.com/prometheus/client_golang/prometheus" -) - -var ( - // DefaultClientMetrics is the default instance of ClientMetrics. It is - // intended to be used in conjunction the default Prometheus metrics - // registry. - DefaultClientMetrics = NewClientMetrics() - - // UnaryClientInterceptor is a gRPC client-side interceptor that provides Prometheus monitoring for Unary RPCs. - UnaryClientInterceptor = DefaultClientMetrics.UnaryClientInterceptor() - - // StreamClientInterceptor is a gRPC client-side interceptor that provides Prometheus monitoring for Streaming RPCs. - StreamClientInterceptor = DefaultClientMetrics.StreamClientInterceptor() -) - -func init() { - prom.MustRegister(DefaultClientMetrics.clientStartedCounter) - prom.MustRegister(DefaultClientMetrics.clientHandledCounter) - prom.MustRegister(DefaultClientMetrics.clientStreamMsgReceived) - prom.MustRegister(DefaultClientMetrics.clientStreamMsgSent) -} - -// EnableClientHandlingTimeHistogram turns on recording of handling time of -// RPCs. Histogram metrics can be very expensive for Prometheus to retain and -// query. This function acts on the DefaultClientMetrics variable and the -// default Prometheus metrics registry. -func EnableClientHandlingTimeHistogram(opts ...HistogramOption) { - DefaultClientMetrics.EnableClientHandlingTimeHistogram(opts...) - prom.Register(DefaultClientMetrics.clientHandledHistogram) -} diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/client_metrics.go b/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/client_metrics.go deleted file mode 100644 index 9b476f9..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/client_metrics.go +++ /dev/null @@ -1,170 +0,0 @@ -package grpc_prometheus - -import ( - "io" - - prom "github.com/prometheus/client_golang/prometheus" - "golang.org/x/net/context" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" -) - -// ClientMetrics represents a collection of metrics to be registered on a -// Prometheus metrics registry for a gRPC client. -type ClientMetrics struct { - clientStartedCounter *prom.CounterVec - clientHandledCounter *prom.CounterVec - clientStreamMsgReceived *prom.CounterVec - clientStreamMsgSent *prom.CounterVec - clientHandledHistogramEnabled bool - clientHandledHistogramOpts prom.HistogramOpts - clientHandledHistogram *prom.HistogramVec -} - -// NewClientMetrics returns a ClientMetrics object. Use a new instance of -// ClientMetrics when not using the default Prometheus metrics registry, for -// example when wanting to control which metrics are added to a registry as -// opposed to automatically adding metrics via init functions. -func NewClientMetrics(counterOpts ...CounterOption) *ClientMetrics { - opts := counterOptions(counterOpts) - return &ClientMetrics{ - clientStartedCounter: prom.NewCounterVec( - opts.apply(prom.CounterOpts{ - Name: "grpc_client_started_total", - Help: "Total number of RPCs started on the client.", - }), []string{"grpc_type", "grpc_service", "grpc_method"}), - - clientHandledCounter: prom.NewCounterVec( - opts.apply(prom.CounterOpts{ - Name: "grpc_client_handled_total", - Help: "Total number of RPCs completed by the client, regardless of success or failure.", - }), []string{"grpc_type", "grpc_service", "grpc_method", "grpc_code"}), - - clientStreamMsgReceived: prom.NewCounterVec( - opts.apply(prom.CounterOpts{ - Name: "grpc_client_msg_received_total", - Help: "Total number of RPC stream messages received by the client.", - }), []string{"grpc_type", "grpc_service", "grpc_method"}), - - clientStreamMsgSent: prom.NewCounterVec( - opts.apply(prom.CounterOpts{ - Name: "grpc_client_msg_sent_total", - Help: "Total number of gRPC stream messages sent by the client.", - }), []string{"grpc_type", "grpc_service", "grpc_method"}), - - clientHandledHistogramEnabled: false, - clientHandledHistogramOpts: prom.HistogramOpts{ - Name: "grpc_client_handling_seconds", - Help: "Histogram of response latency (seconds) of the gRPC until it is finished by the application.", - Buckets: prom.DefBuckets, - }, - clientHandledHistogram: nil, - } -} - -// Describe sends the super-set of all possible descriptors of metrics -// collected by this Collector to the provided channel and returns once -// the last descriptor has been sent. -func (m *ClientMetrics) Describe(ch chan<- *prom.Desc) { - m.clientStartedCounter.Describe(ch) - m.clientHandledCounter.Describe(ch) - m.clientStreamMsgReceived.Describe(ch) - m.clientStreamMsgSent.Describe(ch) - if m.clientHandledHistogramEnabled { - m.clientHandledHistogram.Describe(ch) - } -} - -// Collect is called by the Prometheus registry when collecting -// metrics. The implementation sends each collected metric via the -// provided channel and returns once the last metric has been sent. -func (m *ClientMetrics) Collect(ch chan<- prom.Metric) { - m.clientStartedCounter.Collect(ch) - m.clientHandledCounter.Collect(ch) - m.clientStreamMsgReceived.Collect(ch) - m.clientStreamMsgSent.Collect(ch) - if m.clientHandledHistogramEnabled { - m.clientHandledHistogram.Collect(ch) - } -} - -// EnableClientHandlingTimeHistogram turns on recording of handling time of RPCs. -// Histogram metrics can be very expensive for Prometheus to retain and query. -func (m *ClientMetrics) EnableClientHandlingTimeHistogram(opts ...HistogramOption) { - for _, o := range opts { - o(&m.clientHandledHistogramOpts) - } - if !m.clientHandledHistogramEnabled { - m.clientHandledHistogram = prom.NewHistogramVec( - m.clientHandledHistogramOpts, - []string{"grpc_type", "grpc_service", "grpc_method"}, - ) - } - m.clientHandledHistogramEnabled = true -} - -// UnaryClientInterceptor is a gRPC client-side interceptor that provides Prometheus monitoring for Unary RPCs. -func (m *ClientMetrics) UnaryClientInterceptor() func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error { - return func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error { - monitor := newClientReporter(m, Unary, method) - monitor.SentMessage() - err := invoker(ctx, method, req, reply, cc, opts...) - if err != nil { - monitor.ReceivedMessage() - } - st, _ := status.FromError(err) - monitor.Handled(st.Code()) - return err - } -} - -// StreamClientInterceptor is a gRPC client-side interceptor that provides Prometheus monitoring for Streaming RPCs. -func (m *ClientMetrics) StreamClientInterceptor() func(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error) { - return func(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error) { - monitor := newClientReporter(m, clientStreamType(desc), method) - clientStream, err := streamer(ctx, desc, cc, method, opts...) - if err != nil { - st, _ := status.FromError(err) - monitor.Handled(st.Code()) - return nil, err - } - return &monitoredClientStream{clientStream, monitor}, nil - } -} - -func clientStreamType(desc *grpc.StreamDesc) grpcType { - if desc.ClientStreams && !desc.ServerStreams { - return ClientStream - } else if !desc.ClientStreams && desc.ServerStreams { - return ServerStream - } - return BidiStream -} - -// monitoredClientStream wraps grpc.ClientStream allowing each Sent/Recv of message to increment counters. -type monitoredClientStream struct { - grpc.ClientStream - monitor *clientReporter -} - -func (s *monitoredClientStream) SendMsg(m interface{}) error { - err := s.ClientStream.SendMsg(m) - if err == nil { - s.monitor.SentMessage() - } - return err -} - -func (s *monitoredClientStream) RecvMsg(m interface{}) error { - err := s.ClientStream.RecvMsg(m) - if err == nil { - s.monitor.ReceivedMessage() - } else if err == io.EOF { - s.monitor.Handled(codes.OK) - } else { - st, _ := status.FromError(err) - s.monitor.Handled(st.Code()) - } - return err -} diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/client_reporter.go b/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/client_reporter.go deleted file mode 100644 index cbf1532..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/client_reporter.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2016 Michal Witkowski. All Rights Reserved. -// See LICENSE for licensing terms. - -package grpc_prometheus - -import ( - "time" - - "google.golang.org/grpc/codes" -) - -type clientReporter struct { - metrics *ClientMetrics - rpcType grpcType - serviceName string - methodName string - startTime time.Time -} - -func newClientReporter(m *ClientMetrics, rpcType grpcType, fullMethod string) *clientReporter { - r := &clientReporter{ - metrics: m, - rpcType: rpcType, - } - if r.metrics.clientHandledHistogramEnabled { - r.startTime = time.Now() - } - r.serviceName, r.methodName = splitMethodName(fullMethod) - r.metrics.clientStartedCounter.WithLabelValues(string(r.rpcType), r.serviceName, r.methodName).Inc() - return r -} - -func (r *clientReporter) ReceivedMessage() { - r.metrics.clientStreamMsgReceived.WithLabelValues(string(r.rpcType), r.serviceName, r.methodName).Inc() -} - -func (r *clientReporter) SentMessage() { - r.metrics.clientStreamMsgSent.WithLabelValues(string(r.rpcType), r.serviceName, r.methodName).Inc() -} - -func (r *clientReporter) Handled(code codes.Code) { - r.metrics.clientHandledCounter.WithLabelValues(string(r.rpcType), r.serviceName, r.methodName, code.String()).Inc() - if r.metrics.clientHandledHistogramEnabled { - r.metrics.clientHandledHistogram.WithLabelValues(string(r.rpcType), r.serviceName, r.methodName).Observe(time.Since(r.startTime).Seconds()) - } -} diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/metric_options.go b/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/metric_options.go deleted file mode 100644 index 9d51aec..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/metric_options.go +++ /dev/null @@ -1,41 +0,0 @@ -package grpc_prometheus - -import ( - prom "github.com/prometheus/client_golang/prometheus" -) - -// A CounterOption lets you add options to Counter metrics using With* funcs. -type CounterOption func(*prom.CounterOpts) - -type counterOptions []CounterOption - -func (co counterOptions) apply(o prom.CounterOpts) prom.CounterOpts { - for _, f := range co { - f(&o) - } - return o -} - -// WithConstLabels allows you to add ConstLabels to Counter metrics. -func WithConstLabels(labels prom.Labels) CounterOption { - return func(o *prom.CounterOpts) { - o.ConstLabels = labels - } -} - -// A HistogramOption lets you add options to Histogram metrics using With* -// funcs. -type HistogramOption func(*prom.HistogramOpts) - -// WithHistogramBuckets allows you to specify custom bucket ranges for histograms if EnableHandlingTimeHistogram is on. -func WithHistogramBuckets(buckets []float64) HistogramOption { - return func(o *prom.HistogramOpts) { o.Buckets = buckets } -} - -// WithHistogramConstLabels allows you to add custom ConstLabels to -// histograms metrics. -func WithHistogramConstLabels(labels prom.Labels) HistogramOption { - return func(o *prom.HistogramOpts) { - o.ConstLabels = labels - } -} diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/server.go b/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/server.go deleted file mode 100644 index 322f990..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/server.go +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2016 Michal Witkowski. All Rights Reserved. -// See LICENSE for licensing terms. - -// gRPC Prometheus monitoring interceptors for server-side gRPC. - -package grpc_prometheus - -import ( - prom "github.com/prometheus/client_golang/prometheus" - "google.golang.org/grpc" -) - -var ( - // DefaultServerMetrics is the default instance of ServerMetrics. It is - // intended to be used in conjunction the default Prometheus metrics - // registry. - DefaultServerMetrics = NewServerMetrics() - - // UnaryServerInterceptor is a gRPC server-side interceptor that provides Prometheus monitoring for Unary RPCs. - UnaryServerInterceptor = DefaultServerMetrics.UnaryServerInterceptor() - - // StreamServerInterceptor is a gRPC server-side interceptor that provides Prometheus monitoring for Streaming RPCs. - StreamServerInterceptor = DefaultServerMetrics.StreamServerInterceptor() -) - -func init() { - prom.MustRegister(DefaultServerMetrics.serverStartedCounter) - prom.MustRegister(DefaultServerMetrics.serverHandledCounter) - prom.MustRegister(DefaultServerMetrics.serverStreamMsgReceived) - prom.MustRegister(DefaultServerMetrics.serverStreamMsgSent) -} - -// Register takes a gRPC server and pre-initializes all counters to 0. This -// allows for easier monitoring in Prometheus (no missing metrics), and should -// be called *after* all services have been registered with the server. This -// function acts on the DefaultServerMetrics variable. -func Register(server *grpc.Server) { - DefaultServerMetrics.InitializeMetrics(server) -} - -// EnableHandlingTimeHistogram turns on recording of handling time -// of RPCs. Histogram metrics can be very expensive for Prometheus -// to retain and query. This function acts on the DefaultServerMetrics -// variable and the default Prometheus metrics registry. -func EnableHandlingTimeHistogram(opts ...HistogramOption) { - DefaultServerMetrics.EnableHandlingTimeHistogram(opts...) - prom.Register(DefaultServerMetrics.serverHandledHistogram) -} diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/server_metrics.go b/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/server_metrics.go deleted file mode 100644 index 5b1467e..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/server_metrics.go +++ /dev/null @@ -1,185 +0,0 @@ -package grpc_prometheus - -import ( - prom "github.com/prometheus/client_golang/prometheus" - "golang.org/x/net/context" - "google.golang.org/grpc" - "google.golang.org/grpc/status" -) - -// ServerMetrics represents a collection of metrics to be registered on a -// Prometheus metrics registry for a gRPC server. -type ServerMetrics struct { - serverStartedCounter *prom.CounterVec - serverHandledCounter *prom.CounterVec - serverStreamMsgReceived *prom.CounterVec - serverStreamMsgSent *prom.CounterVec - serverHandledHistogramEnabled bool - serverHandledHistogramOpts prom.HistogramOpts - serverHandledHistogram *prom.HistogramVec -} - -// NewServerMetrics returns a ServerMetrics object. Use a new instance of -// ServerMetrics when not using the default Prometheus metrics registry, for -// example when wanting to control which metrics are added to a registry as -// opposed to automatically adding metrics via init functions. -func NewServerMetrics(counterOpts ...CounterOption) *ServerMetrics { - opts := counterOptions(counterOpts) - return &ServerMetrics{ - serverStartedCounter: prom.NewCounterVec( - opts.apply(prom.CounterOpts{ - Name: "grpc_server_started_total", - Help: "Total number of RPCs started on the server.", - }), []string{"grpc_type", "grpc_service", "grpc_method"}), - serverHandledCounter: prom.NewCounterVec( - opts.apply(prom.CounterOpts{ - Name: "grpc_server_handled_total", - Help: "Total number of RPCs completed on the server, regardless of success or failure.", - }), []string{"grpc_type", "grpc_service", "grpc_method", "grpc_code"}), - serverStreamMsgReceived: prom.NewCounterVec( - opts.apply(prom.CounterOpts{ - Name: "grpc_server_msg_received_total", - Help: "Total number of RPC stream messages received on the server.", - }), []string{"grpc_type", "grpc_service", "grpc_method"}), - serverStreamMsgSent: prom.NewCounterVec( - opts.apply(prom.CounterOpts{ - Name: "grpc_server_msg_sent_total", - Help: "Total number of gRPC stream messages sent by the server.", - }), []string{"grpc_type", "grpc_service", "grpc_method"}), - serverHandledHistogramEnabled: false, - serverHandledHistogramOpts: prom.HistogramOpts{ - Name: "grpc_server_handling_seconds", - Help: "Histogram of response latency (seconds) of gRPC that had been application-level handled by the server.", - Buckets: prom.DefBuckets, - }, - serverHandledHistogram: nil, - } -} - -// EnableHandlingTimeHistogram enables histograms being registered when -// registering the ServerMetrics on a Prometheus registry. Histograms can be -// expensive on Prometheus servers. It takes options to configure histogram -// options such as the defined buckets. -func (m *ServerMetrics) EnableHandlingTimeHistogram(opts ...HistogramOption) { - for _, o := range opts { - o(&m.serverHandledHistogramOpts) - } - if !m.serverHandledHistogramEnabled { - m.serverHandledHistogram = prom.NewHistogramVec( - m.serverHandledHistogramOpts, - []string{"grpc_type", "grpc_service", "grpc_method"}, - ) - } - m.serverHandledHistogramEnabled = true -} - -// Describe sends the super-set of all possible descriptors of metrics -// collected by this Collector to the provided channel and returns once -// the last descriptor has been sent. -func (m *ServerMetrics) Describe(ch chan<- *prom.Desc) { - m.serverStartedCounter.Describe(ch) - m.serverHandledCounter.Describe(ch) - m.serverStreamMsgReceived.Describe(ch) - m.serverStreamMsgSent.Describe(ch) - if m.serverHandledHistogramEnabled { - m.serverHandledHistogram.Describe(ch) - } -} - -// Collect is called by the Prometheus registry when collecting -// metrics. The implementation sends each collected metric via the -// provided channel and returns once the last metric has been sent. -func (m *ServerMetrics) Collect(ch chan<- prom.Metric) { - m.serverStartedCounter.Collect(ch) - m.serverHandledCounter.Collect(ch) - m.serverStreamMsgReceived.Collect(ch) - m.serverStreamMsgSent.Collect(ch) - if m.serverHandledHistogramEnabled { - m.serverHandledHistogram.Collect(ch) - } -} - -// UnaryServerInterceptor is a gRPC server-side interceptor that provides Prometheus monitoring for Unary RPCs. -func (m *ServerMetrics) UnaryServerInterceptor() func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { - return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { - monitor := newServerReporter(m, Unary, info.FullMethod) - monitor.ReceivedMessage() - resp, err := handler(ctx, req) - st, _ := status.FromError(err) - monitor.Handled(st.Code()) - if err == nil { - monitor.SentMessage() - } - return resp, err - } -} - -// StreamServerInterceptor is a gRPC server-side interceptor that provides Prometheus monitoring for Streaming RPCs. -func (m *ServerMetrics) StreamServerInterceptor() func(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { - return func(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { - monitor := newServerReporter(m, streamRPCType(info), info.FullMethod) - err := handler(srv, &monitoredServerStream{ss, monitor}) - st, _ := status.FromError(err) - monitor.Handled(st.Code()) - return err - } -} - -// InitializeMetrics initializes all metrics, with their appropriate null -// value, for all gRPC methods registered on a gRPC server. This is useful, to -// ensure that all metrics exist when collecting and querying. -func (m *ServerMetrics) InitializeMetrics(server *grpc.Server) { - serviceInfo := server.GetServiceInfo() - for serviceName, info := range serviceInfo { - for _, mInfo := range info.Methods { - preRegisterMethod(m, serviceName, &mInfo) - } - } -} - -func streamRPCType(info *grpc.StreamServerInfo) grpcType { - if info.IsClientStream && !info.IsServerStream { - return ClientStream - } else if !info.IsClientStream && info.IsServerStream { - return ServerStream - } - return BidiStream -} - -// monitoredStream wraps grpc.ServerStream allowing each Sent/Recv of message to increment counters. -type monitoredServerStream struct { - grpc.ServerStream - monitor *serverReporter -} - -func (s *monitoredServerStream) SendMsg(m interface{}) error { - err := s.ServerStream.SendMsg(m) - if err == nil { - s.monitor.SentMessage() - } - return err -} - -func (s *monitoredServerStream) RecvMsg(m interface{}) error { - err := s.ServerStream.RecvMsg(m) - if err == nil { - s.monitor.ReceivedMessage() - } - return err -} - -// preRegisterMethod is invoked on Register of a Server, allowing all gRPC services labels to be pre-populated. -func preRegisterMethod(metrics *ServerMetrics, serviceName string, mInfo *grpc.MethodInfo) { - methodName := mInfo.Name - methodType := string(typeFromMethodInfo(mInfo)) - // These are just references (no increments), as just referencing will create the labels but not set values. - metrics.serverStartedCounter.GetMetricWithLabelValues(methodType, serviceName, methodName) - metrics.serverStreamMsgReceived.GetMetricWithLabelValues(methodType, serviceName, methodName) - metrics.serverStreamMsgSent.GetMetricWithLabelValues(methodType, serviceName, methodName) - if metrics.serverHandledHistogramEnabled { - metrics.serverHandledHistogram.GetMetricWithLabelValues(methodType, serviceName, methodName) - } - for _, code := range allCodes { - metrics.serverHandledCounter.GetMetricWithLabelValues(methodType, serviceName, methodName, code.String()) - } -} diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/server_reporter.go b/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/server_reporter.go deleted file mode 100644 index aa9db54..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/server_reporter.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2016 Michal Witkowski. All Rights Reserved. -// See LICENSE for licensing terms. - -package grpc_prometheus - -import ( - "time" - - "google.golang.org/grpc/codes" -) - -type serverReporter struct { - metrics *ServerMetrics - rpcType grpcType - serviceName string - methodName string - startTime time.Time -} - -func newServerReporter(m *ServerMetrics, rpcType grpcType, fullMethod string) *serverReporter { - r := &serverReporter{ - metrics: m, - rpcType: rpcType, - } - if r.metrics.serverHandledHistogramEnabled { - r.startTime = time.Now() - } - r.serviceName, r.methodName = splitMethodName(fullMethod) - r.metrics.serverStartedCounter.WithLabelValues(string(r.rpcType), r.serviceName, r.methodName).Inc() - return r -} - -func (r *serverReporter) ReceivedMessage() { - r.metrics.serverStreamMsgReceived.WithLabelValues(string(r.rpcType), r.serviceName, r.methodName).Inc() -} - -func (r *serverReporter) SentMessage() { - r.metrics.serverStreamMsgSent.WithLabelValues(string(r.rpcType), r.serviceName, r.methodName).Inc() -} - -func (r *serverReporter) Handled(code codes.Code) { - r.metrics.serverHandledCounter.WithLabelValues(string(r.rpcType), r.serviceName, r.methodName, code.String()).Inc() - if r.metrics.serverHandledHistogramEnabled { - r.metrics.serverHandledHistogram.WithLabelValues(string(r.rpcType), r.serviceName, r.methodName).Observe(time.Since(r.startTime).Seconds()) - } -} diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/util.go b/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/util.go deleted file mode 100644 index 7987de3..0000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/util.go +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2016 Michal Witkowski. All Rights Reserved. -// See LICENSE for licensing terms. - -package grpc_prometheus - -import ( - "strings" - - "google.golang.org/grpc" - "google.golang.org/grpc/codes" -) - -type grpcType string - -const ( - Unary grpcType = "unary" - ClientStream grpcType = "client_stream" - ServerStream grpcType = "server_stream" - BidiStream grpcType = "bidi_stream" -) - -var ( - allCodes = []codes.Code{ - codes.OK, codes.Canceled, codes.Unknown, codes.InvalidArgument, codes.DeadlineExceeded, codes.NotFound, - codes.AlreadyExists, codes.PermissionDenied, codes.Unauthenticated, codes.ResourceExhausted, - codes.FailedPrecondition, codes.Aborted, codes.OutOfRange, codes.Unimplemented, codes.Internal, - codes.Unavailable, codes.DataLoss, - } -) - -func splitMethodName(fullMethodName string) (string, string) { - fullMethodName = strings.TrimPrefix(fullMethodName, "/") // remove leading slash - if i := strings.Index(fullMethodName, "/"); i >= 0 { - return fullMethodName[:i], fullMethodName[i+1:] - } - return "unknown", "unknown" -} - -func typeFromMethodInfo(mInfo *grpc.MethodInfo) grpcType { - if !mInfo.IsClientStream && !mInfo.IsServerStream { - return Unary - } - if mInfo.IsClientStream && !mInfo.IsServerStream { - return ClientStream - } - if !mInfo.IsClientStream && mInfo.IsServerStream { - return ServerStream - } - return BidiStream -} diff --git a/vendor/github.com/juju/errors/LICENSE b/vendor/github.com/juju/errors/LICENSE deleted file mode 100644 index ade9307..0000000 --- a/vendor/github.com/juju/errors/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ -All files in this repository are licensed as follows. If you contribute -to this repository, it is assumed that you license your contribution -under the same license unless you state otherwise. - -All files Copyright (C) 2015 Canonical Ltd. unless otherwise specified in the file. - -This software is licensed under the LGPLv3, included below. - -As a special exception to the GNU Lesser General Public License version 3 -("LGPL3"), the copyright holders of this Library give you permission to -convey to a third party a Combined Work that links statically or dynamically -to this Library without providing any Minimal Corresponding Source or -Minimal Application Code as set out in 4d or providing the installation -information set out in section 4e, provided that you comply with the other -provisions of LGPL3 and provided that you meet, for the Application the -terms and conditions of the license(s) which apply to the Application. - -Except as stated in this special exception, the provisions of LGPL3 will -continue to comply in full to this Library. If you modify this Library, you -may apply this exception to your version of this Library, but you are not -obliged to do so. If you do not wish to do so, delete this exception -statement from your version. This exception does not (and cannot) modify any -license terms which apply to the Application, with which you must still -comply. - - - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. diff --git a/vendor/github.com/juju/errors/doc.go b/vendor/github.com/juju/errors/doc.go deleted file mode 100644 index 35b119a..0000000 --- a/vendor/github.com/juju/errors/doc.go +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2013, 2014 Canonical Ltd. -// Licensed under the LGPLv3, see LICENCE file for details. - -/* -[godoc-link-here] - -The juju/errors provides an easy way to annotate errors without losing the -orginal error context. - -The exported `New` and `Errorf` functions are designed to replace the -`errors.New` and `fmt.Errorf` functions respectively. The same underlying -error is there, but the package also records the location at which the error -was created. - -A primary use case for this library is to add extra context any time an -error is returned from a function. - - if err := SomeFunc(); err != nil { - return err - } - -This instead becomes: - - if err := SomeFunc(); err != nil { - return errors.Trace(err) - } - -which just records the file and line number of the Trace call, or - - if err := SomeFunc(); err != nil { - return errors.Annotate(err, "more context") - } - -which also adds an annotation to the error. - -When you want to check to see if an error is of a particular type, a helper -function is normally exported by the package that returned the error, like the -`os` package does. The underlying cause of the error is available using the -`Cause` function. - - os.IsNotExist(errors.Cause(err)) - -The result of the `Error()` call on an annotated error is the annotations joined -with colons, then the result of the `Error()` method for the underlying error -that was the cause. - - err := errors.Errorf("original") - err = errors.Annotatef(err, "context") - err = errors.Annotatef(err, "more context") - err.Error() -> "more context: context: original" - -Obviously recording the file, line and functions is not very useful if you -cannot get them back out again. - - errors.ErrorStack(err) - -will return something like: - - first error - github.com/juju/errors/annotation_test.go:193: - github.com/juju/errors/annotation_test.go:194: annotation - github.com/juju/errors/annotation_test.go:195: - github.com/juju/errors/annotation_test.go:196: more context - github.com/juju/errors/annotation_test.go:197: - -The first error was generated by an external system, so there was no location -associated. The second, fourth, and last lines were generated with Trace calls, -and the other two through Annotate. - -Sometimes when responding to an error you want to return a more specific error -for the situation. - - if err := FindField(field); err != nil { - return errors.Wrap(err, errors.NotFoundf(field)) - } - -This returns an error where the complete error stack is still available, and -`errors.Cause()` will return the `NotFound` error. - -*/ -package errors diff --git a/vendor/github.com/juju/errors/error.go b/vendor/github.com/juju/errors/error.go deleted file mode 100644 index b7df735..0000000 --- a/vendor/github.com/juju/errors/error.go +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright 2014 Canonical Ltd. -// Licensed under the LGPLv3, see LICENCE file for details. - -package errors - -import ( - "fmt" - "reflect" - "runtime" -) - -// Err holds a description of an error along with information about -// where the error was created. -// -// It may be embedded in custom error types to add extra information that -// this errors package can understand. -type Err struct { - // message holds an annotation of the error. - message string - - // cause holds the cause of the error as returned - // by the Cause method. - cause error - - // previous holds the previous error in the error stack, if any. - previous error - - // file and line hold the source code location where the error was - // created. - file string - line int -} - -// NewErr is used to return an Err for the purpose of embedding in other -// structures. The location is not specified, and needs to be set with a call -// to SetLocation. -// -// For example: -// type FooError struct { -// errors.Err -// code int -// } -// -// func NewFooError(code int) error { -// err := &FooError{errors.NewErr("foo"), code} -// err.SetLocation(1) -// return err -// } -func NewErr(format string, args ...interface{}) Err { - return Err{ - message: fmt.Sprintf(format, args...), - } -} - -// NewErrWithCause is used to return an Err with case by other error for the purpose of embedding in other -// structures. The location is not specified, and needs to be set with a call -// to SetLocation. -// -// For example: -// type FooError struct { -// errors.Err -// code int -// } -// -// func (e *FooError) Annotate(format string, args ...interface{}) error { -// err := &FooError{errors.NewErrWithCause(e.Err, format, args...), e.code} -// err.SetLocation(1) -// return err -// }) -func NewErrWithCause(other error, format string, args ...interface{}) Err { - return Err{ - message: fmt.Sprintf(format, args...), - cause: Cause(other), - previous: other, - } -} - -// Location is the file and line of where the error was most recently -// created or annotated. -func (e *Err) Location() (filename string, line int) { - return e.file, e.line -} - -// Underlying returns the previous error in the error stack, if any. A client -// should not ever really call this method. It is used to build the error -// stack and should not be introspected by client calls. Or more -// specifically, clients should not depend on anything but the `Cause` of an -// error. -func (e *Err) Underlying() error { - return e.previous -} - -// The Cause of an error is the most recent error in the error stack that -// meets one of these criteria: the original error that was raised; the new -// error that was passed into the Wrap function; the most recently masked -// error; or nil if the error itself is considered the Cause. Normally this -// method is not invoked directly, but instead through the Cause stand alone -// function. -func (e *Err) Cause() error { - return e.cause -} - -// Message returns the message stored with the most recent location. This is -// the empty string if the most recent call was Trace, or the message stored -// with Annotate or Mask. -func (e *Err) Message() string { - return e.message -} - -// Error implements error.Error. -func (e *Err) Error() string { - // We want to walk up the stack of errors showing the annotations - // as long as the cause is the same. - err := e.previous - if !sameError(Cause(err), e.cause) && e.cause != nil { - err = e.cause - } - switch { - case err == nil: - return e.message - case e.message == "": - return err.Error() - } - return fmt.Sprintf("%s: %v", e.message, err) -} - -// Format implements fmt.Formatter -// When printing errors with %+v it also prints the stack trace. -// %#v unsurprisingly will print the real underlying type. -func (e *Err) Format(s fmt.State, verb rune) { - switch verb { - case 'v': - switch { - case s.Flag('+'): - fmt.Fprintf(s, "%s", ErrorStack(e)) - return - case s.Flag('#'): - // avoid infinite recursion by wrapping e into a type - // that doesn't implement Formatter. - fmt.Fprintf(s, "%#v", (*unformatter)(e)) - return - } - fallthrough - case 's': - fmt.Fprintf(s, "%s", e.Error()) - } -} - -// helper for Format -type unformatter Err - -func (unformatter) Format() { /* break the fmt.Formatter interface */ } - -// SetLocation records the source location of the error at callDepth stack -// frames above the call. -func (e *Err) SetLocation(callDepth int) { - _, file, line, _ := runtime.Caller(callDepth + 1) - e.file = trimGoPath(file) - e.line = line -} - -// StackTrace returns one string for each location recorded in the stack of -// errors. The first value is the originating error, with a line for each -// other annotation or tracing of the error. -func (e *Err) StackTrace() []string { - return errorStack(e) -} - -// Ideally we'd have a way to check identity, but deep equals will do. -func sameError(e1, e2 error) bool { - return reflect.DeepEqual(e1, e2) -} diff --git a/vendor/github.com/juju/errors/errortypes.go b/vendor/github.com/juju/errors/errortypes.go deleted file mode 100644 index 9b731c4..0000000 --- a/vendor/github.com/juju/errors/errortypes.go +++ /dev/null @@ -1,309 +0,0 @@ -// Copyright 2014 Canonical Ltd. -// Licensed under the LGPLv3, see LICENCE file for details. - -package errors - -import ( - "fmt" -) - -// wrap is a helper to construct an *wrapper. -func wrap(err error, format, suffix string, args ...interface{}) Err { - newErr := Err{ - message: fmt.Sprintf(format+suffix, args...), - previous: err, - } - newErr.SetLocation(2) - return newErr -} - -// notFound represents an error when something has not been found. -type notFound struct { - Err -} - -// NotFoundf returns an error which satisfies IsNotFound(). -func NotFoundf(format string, args ...interface{}) error { - return ¬Found{wrap(nil, format, " not found", args...)} -} - -// NewNotFound returns an error which wraps err that satisfies -// IsNotFound(). -func NewNotFound(err error, msg string) error { - return ¬Found{wrap(err, msg, "")} -} - -// IsNotFound reports whether err was created with NotFoundf() or -// NewNotFound(). -func IsNotFound(err error) bool { - err = Cause(err) - _, ok := err.(*notFound) - return ok -} - -// userNotFound represents an error when an inexistent user is looked up. -type userNotFound struct { - Err -} - -// UserNotFoundf returns an error which satisfies IsUserNotFound(). -func UserNotFoundf(format string, args ...interface{}) error { - return &userNotFound{wrap(nil, format, " user not found", args...)} -} - -// NewUserNotFound returns an error which wraps err and satisfies -// IsUserNotFound(). -func NewUserNotFound(err error, msg string) error { - return &userNotFound{wrap(err, msg, "")} -} - -// IsUserNotFound reports whether err was created with UserNotFoundf() or -// NewUserNotFound(). -func IsUserNotFound(err error) bool { - err = Cause(err) - _, ok := err.(*userNotFound) - return ok -} - -// unauthorized represents an error when an operation is unauthorized. -type unauthorized struct { - Err -} - -// Unauthorizedf returns an error which satisfies IsUnauthorized(). -func Unauthorizedf(format string, args ...interface{}) error { - return &unauthorized{wrap(nil, format, "", args...)} -} - -// NewUnauthorized returns an error which wraps err and satisfies -// IsUnauthorized(). -func NewUnauthorized(err error, msg string) error { - return &unauthorized{wrap(err, msg, "")} -} - -// IsUnauthorized reports whether err was created with Unauthorizedf() or -// NewUnauthorized(). -func IsUnauthorized(err error) bool { - err = Cause(err) - _, ok := err.(*unauthorized) - return ok -} - -// notImplemented represents an error when something is not -// implemented. -type notImplemented struct { - Err -} - -// NotImplementedf returns an error which satisfies IsNotImplemented(). -func NotImplementedf(format string, args ...interface{}) error { - return ¬Implemented{wrap(nil, format, " not implemented", args...)} -} - -// NewNotImplemented returns an error which wraps err and satisfies -// IsNotImplemented(). -func NewNotImplemented(err error, msg string) error { - return ¬Implemented{wrap(err, msg, "")} -} - -// IsNotImplemented reports whether err was created with -// NotImplementedf() or NewNotImplemented(). -func IsNotImplemented(err error) bool { - err = Cause(err) - _, ok := err.(*notImplemented) - return ok -} - -// alreadyExists represents and error when something already exists. -type alreadyExists struct { - Err -} - -// AlreadyExistsf returns an error which satisfies IsAlreadyExists(). -func AlreadyExistsf(format string, args ...interface{}) error { - return &alreadyExists{wrap(nil, format, " already exists", args...)} -} - -// NewAlreadyExists returns an error which wraps err and satisfies -// IsAlreadyExists(). -func NewAlreadyExists(err error, msg string) error { - return &alreadyExists{wrap(err, msg, "")} -} - -// IsAlreadyExists reports whether the error was created with -// AlreadyExistsf() or NewAlreadyExists(). -func IsAlreadyExists(err error) bool { - err = Cause(err) - _, ok := err.(*alreadyExists) - return ok -} - -// notSupported represents an error when something is not supported. -type notSupported struct { - Err -} - -// NotSupportedf returns an error which satisfies IsNotSupported(). -func NotSupportedf(format string, args ...interface{}) error { - return ¬Supported{wrap(nil, format, " not supported", args...)} -} - -// NewNotSupported returns an error which wraps err and satisfies -// IsNotSupported(). -func NewNotSupported(err error, msg string) error { - return ¬Supported{wrap(err, msg, "")} -} - -// IsNotSupported reports whether the error was created with -// NotSupportedf() or NewNotSupported(). -func IsNotSupported(err error) bool { - err = Cause(err) - _, ok := err.(*notSupported) - return ok -} - -// notValid represents an error when something is not valid. -type notValid struct { - Err -} - -// NotValidf returns an error which satisfies IsNotValid(). -func NotValidf(format string, args ...interface{}) error { - return ¬Valid{wrap(nil, format, " not valid", args...)} -} - -// NewNotValid returns an error which wraps err and satisfies IsNotValid(). -func NewNotValid(err error, msg string) error { - return ¬Valid{wrap(err, msg, "")} -} - -// IsNotValid reports whether the error was created with NotValidf() or -// NewNotValid(). -func IsNotValid(err error) bool { - err = Cause(err) - _, ok := err.(*notValid) - return ok -} - -// notProvisioned represents an error when something is not yet provisioned. -type notProvisioned struct { - Err -} - -// NotProvisionedf returns an error which satisfies IsNotProvisioned(). -func NotProvisionedf(format string, args ...interface{}) error { - return ¬Provisioned{wrap(nil, format, " not provisioned", args...)} -} - -// NewNotProvisioned returns an error which wraps err that satisfies -// IsNotProvisioned(). -func NewNotProvisioned(err error, msg string) error { - return ¬Provisioned{wrap(err, msg, "")} -} - -// IsNotProvisioned reports whether err was created with NotProvisionedf() or -// NewNotProvisioned(). -func IsNotProvisioned(err error) bool { - err = Cause(err) - _, ok := err.(*notProvisioned) - return ok -} - -// notAssigned represents an error when something is not yet assigned to -// something else. -type notAssigned struct { - Err -} - -// NotAssignedf returns an error which satisfies IsNotAssigned(). -func NotAssignedf(format string, args ...interface{}) error { - return ¬Assigned{wrap(nil, format, " not assigned", args...)} -} - -// NewNotAssigned returns an error which wraps err that satisfies -// IsNotAssigned(). -func NewNotAssigned(err error, msg string) error { - return ¬Assigned{wrap(err, msg, "")} -} - -// IsNotAssigned reports whether err was created with NotAssignedf() or -// NewNotAssigned(). -func IsNotAssigned(err error) bool { - err = Cause(err) - _, ok := err.(*notAssigned) - return ok -} - -// badRequest represents an error when a request has bad parameters. -type badRequest struct { - Err -} - -// BadRequestf returns an error which satisfies IsBadRequest(). -func BadRequestf(format string, args ...interface{}) error { - return &badRequest{wrap(nil, format, "", args...)} -} - -// NewBadRequest returns an error which wraps err that satisfies -// IsBadRequest(). -func NewBadRequest(err error, msg string) error { - return &badRequest{wrap(err, msg, "")} -} - -// IsBadRequest reports whether err was created with BadRequestf() or -// NewBadRequest(). -func IsBadRequest(err error) bool { - err = Cause(err) - _, ok := err.(*badRequest) - return ok -} - -// methodNotAllowed represents an error when an HTTP request -// is made with an inappropriate method. -type methodNotAllowed struct { - Err -} - -// MethodNotAllowedf returns an error which satisfies IsMethodNotAllowed(). -func MethodNotAllowedf(format string, args ...interface{}) error { - return &methodNotAllowed{wrap(nil, format, "", args...)} -} - -// NewMethodNotAllowed returns an error which wraps err that satisfies -// IsMethodNotAllowed(). -func NewMethodNotAllowed(err error, msg string) error { - return &methodNotAllowed{wrap(err, msg, "")} -} - -// IsMethodNotAllowed reports whether err was created with MethodNotAllowedf() or -// NewMethodNotAllowed(). -func IsMethodNotAllowed(err error) bool { - err = Cause(err) - _, ok := err.(*methodNotAllowed) - return ok -} - -// forbidden represents an error when a request cannot be completed because of -// missing privileges -type forbidden struct { - Err -} - -// Forbiddenf returns an error which satistifes IsForbidden() -func Forbiddenf(format string, args ...interface{}) error { - return &forbidden{wrap(nil, format, "", args...)} -} - -// NewForbidden returns an error which wraps err that satisfies -// IsForbidden(). -func NewForbidden(err error, msg string) error { - return &forbidden{wrap(err, msg, "")} -} - -// IsForbidden reports whether err was created with Forbiddenf() or -// NewForbidden(). -func IsForbidden(err error) bool { - err = Cause(err) - _, ok := err.(*forbidden) - return ok -} diff --git a/vendor/github.com/juju/errors/functions.go b/vendor/github.com/juju/errors/functions.go deleted file mode 100644 index f86b09b..0000000 --- a/vendor/github.com/juju/errors/functions.go +++ /dev/null @@ -1,330 +0,0 @@ -// Copyright 2014 Canonical Ltd. -// Licensed under the LGPLv3, see LICENCE file for details. - -package errors - -import ( - "fmt" - "strings" -) - -// New is a drop in replacement for the standard library errors module that records -// the location that the error is created. -// -// For example: -// return errors.New("validation failed") -// -func New(message string) error { - err := &Err{message: message} - err.SetLocation(1) - return err -} - -// Errorf creates a new annotated error and records the location that the -// error is created. This should be a drop in replacement for fmt.Errorf. -// -// For example: -// return errors.Errorf("validation failed: %s", message) -// -func Errorf(format string, args ...interface{}) error { - err := &Err{message: fmt.Sprintf(format, args...)} - err.SetLocation(1) - return err -} - -// Trace adds the location of the Trace call to the stack. The Cause of the -// resulting error is the same as the error parameter. If the other error is -// nil, the result will be nil. -// -// For example: -// if err := SomeFunc(); err != nil { -// return errors.Trace(err) -// } -// -func Trace(other error) error { - if other == nil { - return nil - } - err := &Err{previous: other, cause: Cause(other)} - err.SetLocation(1) - return err -} - -// Annotate is used to add extra context to an existing error. The location of -// the Annotate call is recorded with the annotations. The file, line and -// function are also recorded. -// -// For example: -// if err := SomeFunc(); err != nil { -// return errors.Annotate(err, "failed to frombulate") -// } -// -func Annotate(other error, message string) error { - if other == nil { - return nil - } - err := &Err{ - previous: other, - cause: Cause(other), - message: message, - } - err.SetLocation(1) - return err -} - -// Annotatef is used to add extra context to an existing error. The location of -// the Annotate call is recorded with the annotations. The file, line and -// function are also recorded. -// -// For example: -// if err := SomeFunc(); err != nil { -// return errors.Annotatef(err, "failed to frombulate the %s", arg) -// } -// -func Annotatef(other error, format string, args ...interface{}) error { - if other == nil { - return nil - } - err := &Err{ - previous: other, - cause: Cause(other), - message: fmt.Sprintf(format, args...), - } - err.SetLocation(1) - return err -} - -// DeferredAnnotatef annotates the given error (when it is not nil) with the given -// format string and arguments (like fmt.Sprintf). If *err is nil, DeferredAnnotatef -// does nothing. This method is used in a defer statement in order to annotate any -// resulting error with the same message. -// -// For example: -// -// defer DeferredAnnotatef(&err, "failed to frombulate the %s", arg) -// -func DeferredAnnotatef(err *error, format string, args ...interface{}) { - if *err == nil { - return - } - newErr := &Err{ - message: fmt.Sprintf(format, args...), - cause: Cause(*err), - previous: *err, - } - newErr.SetLocation(1) - *err = newErr -} - -// Wrap changes the Cause of the error. The location of the Wrap call is also -// stored in the error stack. -// -// For example: -// if err := SomeFunc(); err != nil { -// newErr := &packageError{"more context", private_value} -// return errors.Wrap(err, newErr) -// } -// -func Wrap(other, newDescriptive error) error { - err := &Err{ - previous: other, - cause: newDescriptive, - } - err.SetLocation(1) - return err -} - -// Wrapf changes the Cause of the error, and adds an annotation. The location -// of the Wrap call is also stored in the error stack. -// -// For example: -// if err := SomeFunc(); err != nil { -// return errors.Wrapf(err, simpleErrorType, "invalid value %q", value) -// } -// -func Wrapf(other, newDescriptive error, format string, args ...interface{}) error { - err := &Err{ - message: fmt.Sprintf(format, args...), - previous: other, - cause: newDescriptive, - } - err.SetLocation(1) - return err -} - -// Mask masks the given error with the given format string and arguments (like -// fmt.Sprintf), returning a new error that maintains the error stack, but -// hides the underlying error type. The error string still contains the full -// annotations. If you want to hide the annotations, call Wrap. -func Maskf(other error, format string, args ...interface{}) error { - if other == nil { - return nil - } - err := &Err{ - message: fmt.Sprintf(format, args...), - previous: other, - } - err.SetLocation(1) - return err -} - -// Mask hides the underlying error type, and records the location of the masking. -func Mask(other error) error { - if other == nil { - return nil - } - err := &Err{ - previous: other, - } - err.SetLocation(1) - return err -} - -// Cause returns the cause of the given error. This will be either the -// original error, or the result of a Wrap or Mask call. -// -// Cause is the usual way to diagnose errors that may have been wrapped by -// the other errors functions. -func Cause(err error) error { - var diag error - if err, ok := err.(causer); ok { - diag = err.Cause() - } - if diag != nil { - return diag - } - return err -} - -type causer interface { - Cause() error -} - -type wrapper interface { - // Message returns the top level error message, - // not including the message from the Previous - // error. - Message() string - - // Underlying returns the Previous error, or nil - // if there is none. - Underlying() error -} - -type locationer interface { - Location() (string, int) -} - -var ( - _ wrapper = (*Err)(nil) - _ locationer = (*Err)(nil) - _ causer = (*Err)(nil) -) - -// Details returns information about the stack of errors wrapped by err, in -// the format: -// -// [{filename:99: error one} {otherfile:55: cause of error one}] -// -// This is a terse alternative to ErrorStack as it returns a single line. -func Details(err error) string { - if err == nil { - return "[]" - } - var s []byte - s = append(s, '[') - for { - s = append(s, '{') - if err, ok := err.(locationer); ok { - file, line := err.Location() - if file != "" { - s = append(s, fmt.Sprintf("%s:%d", file, line)...) - s = append(s, ": "...) - } - } - if cerr, ok := err.(wrapper); ok { - s = append(s, cerr.Message()...) - err = cerr.Underlying() - } else { - s = append(s, err.Error()...) - err = nil - } - s = append(s, '}') - if err == nil { - break - } - s = append(s, ' ') - } - s = append(s, ']') - return string(s) -} - -// ErrorStack returns a string representation of the annotated error. If the -// error passed as the parameter is not an annotated error, the result is -// simply the result of the Error() method on that error. -// -// If the error is an annotated error, a multi-line string is returned where -// each line represents one entry in the annotation stack. The full filename -// from the call stack is used in the output. -// -// first error -// github.com/juju/errors/annotation_test.go:193: -// github.com/juju/errors/annotation_test.go:194: annotation -// github.com/juju/errors/annotation_test.go:195: -// github.com/juju/errors/annotation_test.go:196: more context -// github.com/juju/errors/annotation_test.go:197: -func ErrorStack(err error) string { - return strings.Join(errorStack(err), "\n") -} - -func errorStack(err error) []string { - if err == nil { - return nil - } - - // We want the first error first - var lines []string - for { - var buff []byte - if err, ok := err.(locationer); ok { - file, line := err.Location() - // Strip off the leading GOPATH/src path elements. - file = trimGoPath(file) - if file != "" { - buff = append(buff, fmt.Sprintf("%s:%d", file, line)...) - buff = append(buff, ": "...) - } - } - if cerr, ok := err.(wrapper); ok { - message := cerr.Message() - buff = append(buff, message...) - // If there is a cause for this error, and it is different to the cause - // of the underlying error, then output the error string in the stack trace. - var cause error - if err1, ok := err.(causer); ok { - cause = err1.Cause() - } - err = cerr.Underlying() - if cause != nil && !sameError(Cause(err), cause) { - if message != "" { - buff = append(buff, ": "...) - } - buff = append(buff, cause.Error()...) - } - } else { - buff = append(buff, err.Error()...) - err = nil - } - lines = append(lines, string(buff)) - if err == nil { - break - } - } - // reverse the lines to get the original error, which was at the end of - // the list, back to the start. - var result []string - for i := len(lines); i > 0; i-- { - result = append(result, lines[i-1]) - } - return result -} diff --git a/vendor/github.com/juju/errors/path.go b/vendor/github.com/juju/errors/path.go deleted file mode 100644 index a7b726a..0000000 --- a/vendor/github.com/juju/errors/path.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2013, 2014 Canonical Ltd. -// Licensed under the LGPLv3, see LICENCE file for details. - -package errors - -import ( - "runtime" - "strings" -) - -// prefixSize is used internally to trim the user specific path from the -// front of the returned filenames from the runtime call stack. -var prefixSize int - -// goPath is the deduced path based on the location of this file as compiled. -var goPath string - -func init() { - _, file, _, ok := runtime.Caller(0) - if file == "?" { - return - } - if ok { - // We know that the end of the file should be: - // github.com/juju/errors/path.go - size := len(file) - suffix := len("github.com/juju/errors/path.go") - goPath = file[:size-suffix] - prefixSize = len(goPath) - } -} - -func trimGoPath(filename string) string { - if strings.HasPrefix(filename, goPath) { - return filename[prefixSize:] - } - return filename -} diff --git a/vendor/github.com/matttproud/golang_protobuf_extensions/LICENSE b/vendor/github.com/matttproud/golang_protobuf_extensions/LICENSE deleted file mode 100644 index 8dada3e..0000000 --- a/vendor/github.com/matttproud/golang_protobuf_extensions/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/matttproud/golang_protobuf_extensions/NOTICE b/vendor/github.com/matttproud/golang_protobuf_extensions/NOTICE deleted file mode 100644 index 5d8cb5b..0000000 --- a/vendor/github.com/matttproud/golang_protobuf_extensions/NOTICE +++ /dev/null @@ -1 +0,0 @@ -Copyright 2012 Matt T. Proud (matt.proud@gmail.com) diff --git a/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/decode.go b/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/decode.go deleted file mode 100644 index 258c063..0000000 --- a/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/decode.go +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2013 Matt T. Proud -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package pbutil - -import ( - "encoding/binary" - "errors" - "io" - - "github.com/golang/protobuf/proto" -) - -var errInvalidVarint = errors.New("invalid varint32 encountered") - -// ReadDelimited decodes a message from the provided length-delimited stream, -// where the length is encoded as 32-bit varint prefix to the message body. -// It returns the total number of bytes read and any applicable error. This is -// roughly equivalent to the companion Java API's -// MessageLite#parseDelimitedFrom. As per the reader contract, this function -// calls r.Read repeatedly as required until exactly one message including its -// prefix is read and decoded (or an error has occurred). The function never -// reads more bytes from the stream than required. The function never returns -// an error if a message has been read and decoded correctly, even if the end -// of the stream has been reached in doing so. In that case, any subsequent -// calls return (0, io.EOF). -func ReadDelimited(r io.Reader, m proto.Message) (n int, err error) { - // Per AbstractParser#parsePartialDelimitedFrom with - // CodedInputStream#readRawVarint32. - var headerBuf [binary.MaxVarintLen32]byte - var bytesRead, varIntBytes int - var messageLength uint64 - for varIntBytes == 0 { // i.e. no varint has been decoded yet. - if bytesRead >= len(headerBuf) { - return bytesRead, errInvalidVarint - } - // We have to read byte by byte here to avoid reading more bytes - // than required. Each read byte is appended to what we have - // read before. - newBytesRead, err := r.Read(headerBuf[bytesRead : bytesRead+1]) - if newBytesRead == 0 { - if err != nil { - return bytesRead, err - } - // A Reader should not return (0, nil), but if it does, - // it should be treated as no-op (according to the - // Reader contract). So let's go on... - continue - } - bytesRead += newBytesRead - // Now present everything read so far to the varint decoder and - // see if a varint can be decoded already. - messageLength, varIntBytes = proto.DecodeVarint(headerBuf[:bytesRead]) - } - - messageBuf := make([]byte, messageLength) - newBytesRead, err := io.ReadFull(r, messageBuf) - bytesRead += newBytesRead - if err != nil { - return bytesRead, err - } - - return bytesRead, proto.Unmarshal(messageBuf, m) -} diff --git a/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/doc.go b/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/doc.go deleted file mode 100644 index c318385..0000000 --- a/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/doc.go +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2013 Matt T. Proud -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package pbutil provides record length-delimited Protocol Buffer streaming. -package pbutil diff --git a/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/encode.go b/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/encode.go deleted file mode 100644 index 8fb59ad..0000000 --- a/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/encode.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2013 Matt T. Proud -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package pbutil - -import ( - "encoding/binary" - "io" - - "github.com/golang/protobuf/proto" -) - -// WriteDelimited encodes and dumps a message to the provided writer prefixed -// with a 32-bit varint indicating the length of the encoded message, producing -// a length-delimited record stream, which can be used to chain together -// encoded messages of the same type together in a file. It returns the total -// number of bytes written and any applicable error. This is roughly -// equivalent to the companion Java API's MessageLite#writeDelimitedTo. -func WriteDelimited(w io.Writer, m proto.Message) (n int, err error) { - buffer, err := proto.Marshal(m) - if err != nil { - return 0, err - } - - var buf [binary.MaxVarintLen32]byte - encodedLength := binary.PutUvarint(buf[:], uint64(len(buffer))) - - sync, err := w.Write(buf[:encodedLength]) - if err != nil { - return sync, err - } - - n, err = w.Write(buffer) - return n + sync, err -} diff --git a/vendor/github.com/opentracing/opentracing-go/LICENSE b/vendor/github.com/opentracing/opentracing-go/LICENSE deleted file mode 100644 index 148509a..0000000 --- a/vendor/github.com/opentracing/opentracing-go/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 The OpenTracing Authors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/vendor/github.com/opentracing/opentracing-go/ext/tags.go b/vendor/github.com/opentracing/opentracing-go/ext/tags.go deleted file mode 100644 index c67ab5e..0000000 --- a/vendor/github.com/opentracing/opentracing-go/ext/tags.go +++ /dev/null @@ -1,198 +0,0 @@ -package ext - -import opentracing "github.com/opentracing/opentracing-go" - -// These constants define common tag names recommended for better portability across -// tracing systems and languages/platforms. -// -// The tag names are defined as typed strings, so that in addition to the usual use -// -// span.setTag(TagName, value) -// -// they also support value type validation via this additional syntax: -// -// TagName.Set(span, value) -// -var ( - ////////////////////////////////////////////////////////////////////// - // SpanKind (client/server or producer/consumer) - ////////////////////////////////////////////////////////////////////// - - // SpanKind hints at relationship between spans, e.g. client/server - SpanKind = spanKindTagName("span.kind") - - // SpanKindRPCClient marks a span representing the client-side of an RPC - // or other remote call - SpanKindRPCClientEnum = SpanKindEnum("client") - SpanKindRPCClient = opentracing.Tag{Key: string(SpanKind), Value: SpanKindRPCClientEnum} - - // SpanKindRPCServer marks a span representing the server-side of an RPC - // or other remote call - SpanKindRPCServerEnum = SpanKindEnum("server") - SpanKindRPCServer = opentracing.Tag{Key: string(SpanKind), Value: SpanKindRPCServerEnum} - - // SpanKindProducer marks a span representing the producer-side of a - // message bus - SpanKindProducerEnum = SpanKindEnum("producer") - SpanKindProducer = opentracing.Tag{Key: string(SpanKind), Value: SpanKindProducerEnum} - - // SpanKindConsumer marks a span representing the consumer-side of a - // message bus - SpanKindConsumerEnum = SpanKindEnum("consumer") - SpanKindConsumer = opentracing.Tag{Key: string(SpanKind), Value: SpanKindConsumerEnum} - - ////////////////////////////////////////////////////////////////////// - // Component name - ////////////////////////////////////////////////////////////////////// - - // Component is a low-cardinality identifier of the module, library, - // or package that is generating a span. - Component = stringTagName("component") - - ////////////////////////////////////////////////////////////////////// - // Sampling hint - ////////////////////////////////////////////////////////////////////// - - // SamplingPriority determines the priority of sampling this Span. - SamplingPriority = uint16TagName("sampling.priority") - - ////////////////////////////////////////////////////////////////////// - // Peer tags. These tags can be emitted by either client-side of - // server-side to describe the other side/service in a peer-to-peer - // communications, like an RPC call. - ////////////////////////////////////////////////////////////////////// - - // PeerService records the service name of the peer. - PeerService = stringTagName("peer.service") - - // PeerAddress records the address name of the peer. This may be a "ip:port", - // a bare "hostname", a FQDN or even a database DSN substring - // like "mysql://username@127.0.0.1:3306/dbname" - PeerAddress = stringTagName("peer.address") - - // PeerHostname records the host name of the peer - PeerHostname = stringTagName("peer.hostname") - - // PeerHostIPv4 records IP v4 host address of the peer - PeerHostIPv4 = uint32TagName("peer.ipv4") - - // PeerHostIPv6 records IP v6 host address of the peer - PeerHostIPv6 = stringTagName("peer.ipv6") - - // PeerPort records port number of the peer - PeerPort = uint16TagName("peer.port") - - ////////////////////////////////////////////////////////////////////// - // HTTP Tags - ////////////////////////////////////////////////////////////////////// - - // HTTPUrl should be the URL of the request being handled in this segment - // of the trace, in standard URI format. The protocol is optional. - HTTPUrl = stringTagName("http.url") - - // HTTPMethod is the HTTP method of the request, and is case-insensitive. - HTTPMethod = stringTagName("http.method") - - // HTTPStatusCode is the numeric HTTP status code (200, 404, etc) of the - // HTTP response. - HTTPStatusCode = uint16TagName("http.status_code") - - ////////////////////////////////////////////////////////////////////// - // DB Tags - ////////////////////////////////////////////////////////////////////// - - // DBInstance is database instance name. - DBInstance = stringTagName("db.instance") - - // DBStatement is a database statement for the given database type. - // It can be a query or a prepared statement (i.e., before substitution). - DBStatement = stringTagName("db.statement") - - // DBType is a database type. For any SQL database, "sql". - // For others, the lower-case database category, e.g. "redis" - DBType = stringTagName("db.type") - - // DBUser is a username for accessing database. - DBUser = stringTagName("db.user") - - ////////////////////////////////////////////////////////////////////// - // Message Bus Tag - ////////////////////////////////////////////////////////////////////// - - // MessageBusDestination is an address at which messages can be exchanged - MessageBusDestination = stringTagName("message_bus.destination") - - ////////////////////////////////////////////////////////////////////// - // Error Tag - ////////////////////////////////////////////////////////////////////// - - // Error indicates that operation represented by the span resulted in an error. - Error = boolTagName("error") -) - -// --- - -// SpanKindEnum represents common span types -type SpanKindEnum string - -type spanKindTagName string - -// Set adds a string tag to the `span` -func (tag spanKindTagName) Set(span opentracing.Span, value SpanKindEnum) { - span.SetTag(string(tag), value) -} - -type rpcServerOption struct { - clientContext opentracing.SpanContext -} - -func (r rpcServerOption) Apply(o *opentracing.StartSpanOptions) { - if r.clientContext != nil { - opentracing.ChildOf(r.clientContext).Apply(o) - } - SpanKindRPCServer.Apply(o) -} - -// RPCServerOption returns a StartSpanOption appropriate for an RPC server span -// with `client` representing the metadata for the remote peer Span if available. -// In case client == nil, due to the client not being instrumented, this RPC -// server span will be a root span. -func RPCServerOption(client opentracing.SpanContext) opentracing.StartSpanOption { - return rpcServerOption{client} -} - -// --- - -type stringTagName string - -// Set adds a string tag to the `span` -func (tag stringTagName) Set(span opentracing.Span, value string) { - span.SetTag(string(tag), value) -} - -// --- - -type uint32TagName string - -// Set adds a uint32 tag to the `span` -func (tag uint32TagName) Set(span opentracing.Span, value uint32) { - span.SetTag(string(tag), value) -} - -// --- - -type uint16TagName string - -// Set adds a uint16 tag to the `span` -func (tag uint16TagName) Set(span opentracing.Span, value uint16) { - span.SetTag(string(tag), value) -} - -// --- - -type boolTagName string - -// Add adds a bool tag to the `span` -func (tag boolTagName) Set(span opentracing.Span, value bool) { - span.SetTag(string(tag), value) -} diff --git a/vendor/github.com/opentracing/opentracing-go/globaltracer.go b/vendor/github.com/opentracing/opentracing-go/globaltracer.go deleted file mode 100644 index 8c8e793..0000000 --- a/vendor/github.com/opentracing/opentracing-go/globaltracer.go +++ /dev/null @@ -1,32 +0,0 @@ -package opentracing - -var ( - globalTracer Tracer = NoopTracer{} -) - -// SetGlobalTracer sets the [singleton] opentracing.Tracer returned by -// GlobalTracer(). Those who use GlobalTracer (rather than directly manage an -// opentracing.Tracer instance) should call SetGlobalTracer as early as -// possible in main(), prior to calling the `StartSpan` global func below. -// Prior to calling `SetGlobalTracer`, any Spans started via the `StartSpan` -// (etc) globals are noops. -func SetGlobalTracer(tracer Tracer) { - globalTracer = tracer -} - -// GlobalTracer returns the global singleton `Tracer` implementation. -// Before `SetGlobalTracer()` is called, the `GlobalTracer()` is a noop -// implementation that drops all data handed to it. -func GlobalTracer() Tracer { - return globalTracer -} - -// StartSpan defers to `Tracer.StartSpan`. See `GlobalTracer()`. -func StartSpan(operationName string, opts ...StartSpanOption) Span { - return globalTracer.StartSpan(operationName, opts...) -} - -// InitGlobalTracer is deprecated. Please use SetGlobalTracer. -func InitGlobalTracer(tracer Tracer) { - SetGlobalTracer(tracer) -} diff --git a/vendor/github.com/opentracing/opentracing-go/gocontext.go b/vendor/github.com/opentracing/opentracing-go/gocontext.go deleted file mode 100644 index 222a652..0000000 --- a/vendor/github.com/opentracing/opentracing-go/gocontext.go +++ /dev/null @@ -1,57 +0,0 @@ -package opentracing - -import "golang.org/x/net/context" - -type contextKey struct{} - -var activeSpanKey = contextKey{} - -// ContextWithSpan returns a new `context.Context` that holds a reference to -// `span`'s SpanContext. -func ContextWithSpan(ctx context.Context, span Span) context.Context { - return context.WithValue(ctx, activeSpanKey, span) -} - -// SpanFromContext returns the `Span` previously associated with `ctx`, or -// `nil` if no such `Span` could be found. -// -// NOTE: context.Context != SpanContext: the former is Go's intra-process -// context propagation mechanism, and the latter houses OpenTracing's per-Span -// identity and baggage information. -func SpanFromContext(ctx context.Context) Span { - val := ctx.Value(activeSpanKey) - if sp, ok := val.(Span); ok { - return sp - } - return nil -} - -// StartSpanFromContext starts and returns a Span with `operationName`, using -// any Span found within `ctx` as a ChildOfRef. If no such parent could be -// found, StartSpanFromContext creates a root (parentless) Span. -// -// The second return value is a context.Context object built around the -// returned Span. -// -// Example usage: -// -// SomeFunction(ctx context.Context, ...) { -// sp, ctx := opentracing.StartSpanFromContext(ctx, "SomeFunction") -// defer sp.Finish() -// ... -// } -func StartSpanFromContext(ctx context.Context, operationName string, opts ...StartSpanOption) (Span, context.Context) { - return startSpanFromContextWithTracer(ctx, GlobalTracer(), operationName, opts...) -} - -// startSpanFromContextWithTracer is factored out for testing purposes. -func startSpanFromContextWithTracer(ctx context.Context, tracer Tracer, operationName string, opts ...StartSpanOption) (Span, context.Context) { - var span Span - if parentSpan := SpanFromContext(ctx); parentSpan != nil { - opts = append(opts, ChildOf(parentSpan.Context())) - span = tracer.StartSpan(operationName, opts...) - } else { - span = tracer.StartSpan(operationName, opts...) - } - return span, ContextWithSpan(ctx, span) -} diff --git a/vendor/github.com/opentracing/opentracing-go/log/field.go b/vendor/github.com/opentracing/opentracing-go/log/field.go deleted file mode 100644 index d2cd39a..0000000 --- a/vendor/github.com/opentracing/opentracing-go/log/field.go +++ /dev/null @@ -1,245 +0,0 @@ -package log - -import ( - "fmt" - "math" -) - -type fieldType int - -const ( - stringType fieldType = iota - boolType - intType - int32Type - uint32Type - int64Type - uint64Type - float32Type - float64Type - errorType - objectType - lazyLoggerType -) - -// Field instances are constructed via LogBool, LogString, and so on. -// Tracing implementations may then handle them via the Field.Marshal -// method. -// -// "heavily influenced by" (i.e., partially stolen from) -// https://github.com/uber-go/zap -type Field struct { - key string - fieldType fieldType - numericVal int64 - stringVal string - interfaceVal interface{} -} - -// String adds a string-valued key:value pair to a Span.LogFields() record -func String(key, val string) Field { - return Field{ - key: key, - fieldType: stringType, - stringVal: val, - } -} - -// Bool adds a bool-valued key:value pair to a Span.LogFields() record -func Bool(key string, val bool) Field { - var numericVal int64 - if val { - numericVal = 1 - } - return Field{ - key: key, - fieldType: boolType, - numericVal: numericVal, - } -} - -// Int adds an int-valued key:value pair to a Span.LogFields() record -func Int(key string, val int) Field { - return Field{ - key: key, - fieldType: intType, - numericVal: int64(val), - } -} - -// Int32 adds an int32-valued key:value pair to a Span.LogFields() record -func Int32(key string, val int32) Field { - return Field{ - key: key, - fieldType: int32Type, - numericVal: int64(val), - } -} - -// Int64 adds an int64-valued key:value pair to a Span.LogFields() record -func Int64(key string, val int64) Field { - return Field{ - key: key, - fieldType: int64Type, - numericVal: val, - } -} - -// Uint32 adds a uint32-valued key:value pair to a Span.LogFields() record -func Uint32(key string, val uint32) Field { - return Field{ - key: key, - fieldType: uint32Type, - numericVal: int64(val), - } -} - -// Uint64 adds a uint64-valued key:value pair to a Span.LogFields() record -func Uint64(key string, val uint64) Field { - return Field{ - key: key, - fieldType: uint64Type, - numericVal: int64(val), - } -} - -// Float32 adds a float32-valued key:value pair to a Span.LogFields() record -func Float32(key string, val float32) Field { - return Field{ - key: key, - fieldType: float32Type, - numericVal: int64(math.Float32bits(val)), - } -} - -// Float64 adds a float64-valued key:value pair to a Span.LogFields() record -func Float64(key string, val float64) Field { - return Field{ - key: key, - fieldType: float64Type, - numericVal: int64(math.Float64bits(val)), - } -} - -// Error adds an error with the key "error" to a Span.LogFields() record -func Error(err error) Field { - return Field{ - key: "error", - fieldType: errorType, - interfaceVal: err, - } -} - -// Object adds an object-valued key:value pair to a Span.LogFields() record -func Object(key string, obj interface{}) Field { - return Field{ - key: key, - fieldType: objectType, - interfaceVal: obj, - } -} - -// LazyLogger allows for user-defined, late-bound logging of arbitrary data -type LazyLogger func(fv Encoder) - -// Lazy adds a LazyLogger to a Span.LogFields() record; the tracing -// implementation will call the LazyLogger function at an indefinite time in -// the future (after Lazy() returns). -func Lazy(ll LazyLogger) Field { - return Field{ - fieldType: lazyLoggerType, - interfaceVal: ll, - } -} - -// Encoder allows access to the contents of a Field (via a call to -// Field.Marshal). -// -// Tracer implementations typically provide an implementation of Encoder; -// OpenTracing callers typically do not need to concern themselves with it. -type Encoder interface { - EmitString(key, value string) - EmitBool(key string, value bool) - EmitInt(key string, value int) - EmitInt32(key string, value int32) - EmitInt64(key string, value int64) - EmitUint32(key string, value uint32) - EmitUint64(key string, value uint64) - EmitFloat32(key string, value float32) - EmitFloat64(key string, value float64) - EmitObject(key string, value interface{}) - EmitLazyLogger(value LazyLogger) -} - -// Marshal passes a Field instance through to the appropriate -// field-type-specific method of an Encoder. -func (lf Field) Marshal(visitor Encoder) { - switch lf.fieldType { - case stringType: - visitor.EmitString(lf.key, lf.stringVal) - case boolType: - visitor.EmitBool(lf.key, lf.numericVal != 0) - case intType: - visitor.EmitInt(lf.key, int(lf.numericVal)) - case int32Type: - visitor.EmitInt32(lf.key, int32(lf.numericVal)) - case int64Type: - visitor.EmitInt64(lf.key, int64(lf.numericVal)) - case uint32Type: - visitor.EmitUint32(lf.key, uint32(lf.numericVal)) - case uint64Type: - visitor.EmitUint64(lf.key, uint64(lf.numericVal)) - case float32Type: - visitor.EmitFloat32(lf.key, math.Float32frombits(uint32(lf.numericVal))) - case float64Type: - visitor.EmitFloat64(lf.key, math.Float64frombits(uint64(lf.numericVal))) - case errorType: - if err, ok := lf.interfaceVal.(error); ok { - visitor.EmitString(lf.key, err.Error()) - } else { - visitor.EmitString(lf.key, "") - } - case objectType: - visitor.EmitObject(lf.key, lf.interfaceVal) - case lazyLoggerType: - visitor.EmitLazyLogger(lf.interfaceVal.(LazyLogger)) - } -} - -// Key returns the field's key. -func (lf Field) Key() string { - return lf.key -} - -// Value returns the field's value as interface{}. -func (lf Field) Value() interface{} { - switch lf.fieldType { - case stringType: - return lf.stringVal - case boolType: - return lf.numericVal != 0 - case intType: - return int(lf.numericVal) - case int32Type: - return int32(lf.numericVal) - case int64Type: - return int64(lf.numericVal) - case uint32Type: - return uint32(lf.numericVal) - case uint64Type: - return uint64(lf.numericVal) - case float32Type: - return math.Float32frombits(uint32(lf.numericVal)) - case float64Type: - return math.Float64frombits(uint64(lf.numericVal)) - case errorType, objectType, lazyLoggerType: - return lf.interfaceVal - default: - return nil - } -} - -// String returns a string representation of the key and value. -func (lf Field) String() string { - return fmt.Sprint(lf.key, ":", lf.Value()) -} diff --git a/vendor/github.com/opentracing/opentracing-go/log/util.go b/vendor/github.com/opentracing/opentracing-go/log/util.go deleted file mode 100644 index 3832feb..0000000 --- a/vendor/github.com/opentracing/opentracing-go/log/util.go +++ /dev/null @@ -1,54 +0,0 @@ -package log - -import "fmt" - -// InterleavedKVToFields converts keyValues a la Span.LogKV() to a Field slice -// a la Span.LogFields(). -func InterleavedKVToFields(keyValues ...interface{}) ([]Field, error) { - if len(keyValues)%2 != 0 { - return nil, fmt.Errorf("non-even keyValues len: %d", len(keyValues)) - } - fields := make([]Field, len(keyValues)/2) - for i := 0; i*2 < len(keyValues); i++ { - key, ok := keyValues[i*2].(string) - if !ok { - return nil, fmt.Errorf( - "non-string key (pair #%d): %T", - i, keyValues[i*2]) - } - switch typedVal := keyValues[i*2+1].(type) { - case bool: - fields[i] = Bool(key, typedVal) - case string: - fields[i] = String(key, typedVal) - case int: - fields[i] = Int(key, typedVal) - case int8: - fields[i] = Int32(key, int32(typedVal)) - case int16: - fields[i] = Int32(key, int32(typedVal)) - case int32: - fields[i] = Int32(key, typedVal) - case int64: - fields[i] = Int64(key, typedVal) - case uint: - fields[i] = Uint64(key, uint64(typedVal)) - case uint64: - fields[i] = Uint64(key, typedVal) - case uint8: - fields[i] = Uint32(key, uint32(typedVal)) - case uint16: - fields[i] = Uint32(key, uint32(typedVal)) - case uint32: - fields[i] = Uint32(key, typedVal) - case float32: - fields[i] = Float32(key, typedVal) - case float64: - fields[i] = Float64(key, typedVal) - default: - // When in doubt, coerce to a string - fields[i] = String(key, fmt.Sprint(typedVal)) - } - } - return fields, nil -} diff --git a/vendor/github.com/opentracing/opentracing-go/noop.go b/vendor/github.com/opentracing/opentracing-go/noop.go deleted file mode 100644 index 0d32f69..0000000 --- a/vendor/github.com/opentracing/opentracing-go/noop.go +++ /dev/null @@ -1,64 +0,0 @@ -package opentracing - -import "github.com/opentracing/opentracing-go/log" - -// A NoopTracer is a trivial, minimum overhead implementation of Tracer -// for which all operations are no-ops. -// -// The primary use of this implementation is in libraries, such as RPC -// frameworks, that make tracing an optional feature controlled by the -// end user. A no-op implementation allows said libraries to use it -// as the default Tracer and to write instrumentation that does -// not need to keep checking if the tracer instance is nil. -// -// For the same reason, the NoopTracer is the default "global" tracer -// (see GlobalTracer and SetGlobalTracer functions). -// -// WARNING: NoopTracer does not support baggage propagation. -type NoopTracer struct{} - -type noopSpan struct{} -type noopSpanContext struct{} - -var ( - defaultNoopSpanContext = noopSpanContext{} - defaultNoopSpan = noopSpan{} - defaultNoopTracer = NoopTracer{} -) - -const ( - emptyString = "" -) - -// noopSpanContext: -func (n noopSpanContext) ForeachBaggageItem(handler func(k, v string) bool) {} - -// noopSpan: -func (n noopSpan) Context() SpanContext { return defaultNoopSpanContext } -func (n noopSpan) SetBaggageItem(key, val string) Span { return defaultNoopSpan } -func (n noopSpan) BaggageItem(key string) string { return emptyString } -func (n noopSpan) SetTag(key string, value interface{}) Span { return n } -func (n noopSpan) LogFields(fields ...log.Field) {} -func (n noopSpan) LogKV(keyVals ...interface{}) {} -func (n noopSpan) Finish() {} -func (n noopSpan) FinishWithOptions(opts FinishOptions) {} -func (n noopSpan) SetOperationName(operationName string) Span { return n } -func (n noopSpan) Tracer() Tracer { return defaultNoopTracer } -func (n noopSpan) LogEvent(event string) {} -func (n noopSpan) LogEventWithPayload(event string, payload interface{}) {} -func (n noopSpan) Log(data LogData) {} - -// StartSpan belongs to the Tracer interface. -func (n NoopTracer) StartSpan(operationName string, opts ...StartSpanOption) Span { - return defaultNoopSpan -} - -// Inject belongs to the Tracer interface. -func (n NoopTracer) Inject(sp SpanContext, format interface{}, carrier interface{}) error { - return nil -} - -// Extract belongs to the Tracer interface. -func (n NoopTracer) Extract(format interface{}, carrier interface{}) (SpanContext, error) { - return nil, ErrSpanContextNotFound -} diff --git a/vendor/github.com/opentracing/opentracing-go/propagation.go b/vendor/github.com/opentracing/opentracing-go/propagation.go deleted file mode 100644 index 9583fc5..0000000 --- a/vendor/github.com/opentracing/opentracing-go/propagation.go +++ /dev/null @@ -1,176 +0,0 @@ -package opentracing - -import ( - "errors" - "net/http" -) - -/////////////////////////////////////////////////////////////////////////////// -// CORE PROPAGATION INTERFACES: -/////////////////////////////////////////////////////////////////////////////// - -var ( - // ErrUnsupportedFormat occurs when the `format` passed to Tracer.Inject() or - // Tracer.Extract() is not recognized by the Tracer implementation. - ErrUnsupportedFormat = errors.New("opentracing: Unknown or unsupported Inject/Extract format") - - // ErrSpanContextNotFound occurs when the `carrier` passed to - // Tracer.Extract() is valid and uncorrupted but has insufficient - // information to extract a SpanContext. - ErrSpanContextNotFound = errors.New("opentracing: SpanContext not found in Extract carrier") - - // ErrInvalidSpanContext errors occur when Tracer.Inject() is asked to - // operate on a SpanContext which it is not prepared to handle (for - // example, since it was created by a different tracer implementation). - ErrInvalidSpanContext = errors.New("opentracing: SpanContext type incompatible with tracer") - - // ErrInvalidCarrier errors occur when Tracer.Inject() or Tracer.Extract() - // implementations expect a different type of `carrier` than they are - // given. - ErrInvalidCarrier = errors.New("opentracing: Invalid Inject/Extract carrier") - - // ErrSpanContextCorrupted occurs when the `carrier` passed to - // Tracer.Extract() is of the expected type but is corrupted. - ErrSpanContextCorrupted = errors.New("opentracing: SpanContext data corrupted in Extract carrier") -) - -/////////////////////////////////////////////////////////////////////////////// -// BUILTIN PROPAGATION FORMATS: -/////////////////////////////////////////////////////////////////////////////// - -// BuiltinFormat is used to demarcate the values within package `opentracing` -// that are intended for use with the Tracer.Inject() and Tracer.Extract() -// methods. -type BuiltinFormat byte - -const ( - // Binary represents SpanContexts as opaque binary data. - // - // For Tracer.Inject(): the carrier must be an `io.Writer`. - // - // For Tracer.Extract(): the carrier must be an `io.Reader`. - Binary BuiltinFormat = iota - - // TextMap represents SpanContexts as key:value string pairs. - // - // Unlike HTTPHeaders, the TextMap format does not restrict the key or - // value character sets in any way. - // - // For Tracer.Inject(): the carrier must be a `TextMapWriter`. - // - // For Tracer.Extract(): the carrier must be a `TextMapReader`. - TextMap - - // HTTPHeaders represents SpanContexts as HTTP header string pairs. - // - // Unlike TextMap, the HTTPHeaders format requires that the keys and values - // be valid as HTTP headers as-is (i.e., character casing may be unstable - // and special characters are disallowed in keys, values should be - // URL-escaped, etc). - // - // For Tracer.Inject(): the carrier must be a `TextMapWriter`. - // - // For Tracer.Extract(): the carrier must be a `TextMapReader`. - // - // See HTTPHeaderCarrier for an implementation of both TextMapWriter - // and TextMapReader that defers to an http.Header instance for storage. - // For example, Inject(): - // - // carrier := opentracing.HTTPHeadersCarrier(httpReq.Header) - // err := span.Tracer().Inject( - // span, opentracing.HTTPHeaders, carrier) - // - // Or Extract(): - // - // carrier := opentracing.HTTPHeadersCarrier(httpReq.Header) - // span, err := tracer.Extract( - // opentracing.HTTPHeaders, carrier) - // - HTTPHeaders -) - -// TextMapWriter is the Inject() carrier for the TextMap builtin format. With -// it, the caller can encode a SpanContext for propagation as entries in a map -// of unicode strings. -type TextMapWriter interface { - // Set a key:value pair to the carrier. Multiple calls to Set() for the - // same key leads to undefined behavior. - // - // NOTE: The backing store for the TextMapWriter may contain data unrelated - // to SpanContext. As such, Inject() and Extract() implementations that - // call the TextMapWriter and TextMapReader interfaces must agree on a - // prefix or other convention to distinguish their own key:value pairs. - Set(key, val string) -} - -// TextMapReader is the Extract() carrier for the TextMap builtin format. With it, -// the caller can decode a propagated SpanContext as entries in a map of -// unicode strings. -type TextMapReader interface { - // ForeachKey returns TextMap contents via repeated calls to the `handler` - // function. If any call to `handler` returns a non-nil error, ForeachKey - // terminates and returns that error. - // - // NOTE: The backing store for the TextMapReader may contain data unrelated - // to SpanContext. As such, Inject() and Extract() implementations that - // call the TextMapWriter and TextMapReader interfaces must agree on a - // prefix or other convention to distinguish their own key:value pairs. - // - // The "foreach" callback pattern reduces unnecessary copying in some cases - // and also allows implementations to hold locks while the map is read. - ForeachKey(handler func(key, val string) error) error -} - -// TextMapCarrier allows the use of regular map[string]string -// as both TextMapWriter and TextMapReader. -type TextMapCarrier map[string]string - -// ForeachKey conforms to the TextMapReader interface. -func (c TextMapCarrier) ForeachKey(handler func(key, val string) error) error { - for k, v := range c { - if err := handler(k, v); err != nil { - return err - } - } - return nil -} - -// Set implements Set() of opentracing.TextMapWriter -func (c TextMapCarrier) Set(key, val string) { - c[key] = val -} - -// HTTPHeadersCarrier satisfies both TextMapWriter and TextMapReader. -// -// Example usage for server side: -// -// carrier := opentracing.HttpHeadersCarrier(httpReq.Header) -// spanContext, err := tracer.Extract(opentracing.HttpHeaders, carrier) -// -// Example usage for client side: -// -// carrier := opentracing.HTTPHeadersCarrier(httpReq.Header) -// err := tracer.Inject( -// span.Context(), -// opentracing.HttpHeaders, -// carrier) -// -type HTTPHeadersCarrier http.Header - -// Set conforms to the TextMapWriter interface. -func (c HTTPHeadersCarrier) Set(key, val string) { - h := http.Header(c) - h.Add(key, val) -} - -// ForeachKey conforms to the TextMapReader interface. -func (c HTTPHeadersCarrier) ForeachKey(handler func(key, val string) error) error { - for k, vals := range c { - for _, v := range vals { - if err := handler(k, v); err != nil { - return err - } - } - } - return nil -} diff --git a/vendor/github.com/opentracing/opentracing-go/span.go b/vendor/github.com/opentracing/opentracing-go/span.go deleted file mode 100644 index f6c3234..0000000 --- a/vendor/github.com/opentracing/opentracing-go/span.go +++ /dev/null @@ -1,185 +0,0 @@ -package opentracing - -import ( - "time" - - "github.com/opentracing/opentracing-go/log" -) - -// SpanContext represents Span state that must propagate to descendant Spans and across process -// boundaries (e.g., a tuple). -type SpanContext interface { - // ForeachBaggageItem grants access to all baggage items stored in the - // SpanContext. - // The handler function will be called for each baggage key/value pair. - // The ordering of items is not guaranteed. - // - // The bool return value indicates if the handler wants to continue iterating - // through the rest of the baggage items; for example if the handler is trying to - // find some baggage item by pattern matching the name, it can return false - // as soon as the item is found to stop further iterations. - ForeachBaggageItem(handler func(k, v string) bool) -} - -// Span represents an active, un-finished span in the OpenTracing system. -// -// Spans are created by the Tracer interface. -type Span interface { - // Sets the end timestamp and finalizes Span state. - // - // With the exception of calls to Context() (which are always allowed), - // Finish() must be the last call made to any span instance, and to do - // otherwise leads to undefined behavior. - Finish() - // FinishWithOptions is like Finish() but with explicit control over - // timestamps and log data. - FinishWithOptions(opts FinishOptions) - - // Context() yields the SpanContext for this Span. Note that the return - // value of Context() is still valid after a call to Span.Finish(), as is - // a call to Span.Context() after a call to Span.Finish(). - Context() SpanContext - - // Sets or changes the operation name. - SetOperationName(operationName string) Span - - // Adds a tag to the span. - // - // If there is a pre-existing tag set for `key`, it is overwritten. - // - // Tag values can be numeric types, strings, or bools. The behavior of - // other tag value types is undefined at the OpenTracing level. If a - // tracing system does not know how to handle a particular value type, it - // may ignore the tag, but shall not panic. - SetTag(key string, value interface{}) Span - - // LogFields is an efficient and type-checked way to record key:value - // logging data about a Span, though the programming interface is a little - // more verbose than LogKV(). Here's an example: - // - // span.LogFields( - // log.String("event", "soft error"), - // log.String("type", "cache timeout"), - // log.Int("waited.millis", 1500)) - // - // Also see Span.FinishWithOptions() and FinishOptions.BulkLogData. - LogFields(fields ...log.Field) - - // LogKV is a concise, readable way to record key:value logging data about - // a Span, though unfortunately this also makes it less efficient and less - // type-safe than LogFields(). Here's an example: - // - // span.LogKV( - // "event", "soft error", - // "type", "cache timeout", - // "waited.millis", 1500) - // - // For LogKV (as opposed to LogFields()), the parameters must appear as - // key-value pairs, like - // - // span.LogKV(key1, val1, key2, val2, key3, val3, ...) - // - // The keys must all be strings. The values may be strings, numeric types, - // bools, Go error instances, or arbitrary structs. - // - // (Note to implementors: consider the log.InterleavedKVToFields() helper) - LogKV(alternatingKeyValues ...interface{}) - - // SetBaggageItem sets a key:value pair on this Span and its SpanContext - // that also propagates to descendants of this Span. - // - // SetBaggageItem() enables powerful functionality given a full-stack - // opentracing integration (e.g., arbitrary application data from a mobile - // app can make it, transparently, all the way into the depths of a storage - // system), and with it some powerful costs: use this feature with care. - // - // IMPORTANT NOTE #1: SetBaggageItem() will only propagate baggage items to - // *future* causal descendants of the associated Span. - // - // IMPORTANT NOTE #2: Use this thoughtfully and with care. Every key and - // value is copied into every local *and remote* child of the associated - // Span, and that can add up to a lot of network and cpu overhead. - // - // Returns a reference to this Span for chaining. - SetBaggageItem(restrictedKey, value string) Span - - // Gets the value for a baggage item given its key. Returns the empty string - // if the value isn't found in this Span. - BaggageItem(restrictedKey string) string - - // Provides access to the Tracer that created this Span. - Tracer() Tracer - - // Deprecated: use LogFields or LogKV - LogEvent(event string) - // Deprecated: use LogFields or LogKV - LogEventWithPayload(event string, payload interface{}) - // Deprecated: use LogFields or LogKV - Log(data LogData) -} - -// LogRecord is data associated with a single Span log. Every LogRecord -// instance must specify at least one Field. -type LogRecord struct { - Timestamp time.Time - Fields []log.Field -} - -// FinishOptions allows Span.FinishWithOptions callers to override the finish -// timestamp and provide log data via a bulk interface. -type FinishOptions struct { - // FinishTime overrides the Span's finish time, or implicitly becomes - // time.Now() if FinishTime.IsZero(). - // - // FinishTime must resolve to a timestamp that's >= the Span's StartTime - // (per StartSpanOptions). - FinishTime time.Time - - // LogRecords allows the caller to specify the contents of many LogFields() - // calls with a single slice. May be nil. - // - // None of the LogRecord.Timestamp values may be .IsZero() (i.e., they must - // be set explicitly). Also, they must be >= the Span's start timestamp and - // <= the FinishTime (or time.Now() if FinishTime.IsZero()). Otherwise the - // behavior of FinishWithOptions() is undefined. - // - // If specified, the caller hands off ownership of LogRecords at - // FinishWithOptions() invocation time. - // - // If specified, the (deprecated) BulkLogData must be nil or empty. - LogRecords []LogRecord - - // BulkLogData is DEPRECATED. - BulkLogData []LogData -} - -// LogData is DEPRECATED -type LogData struct { - Timestamp time.Time - Event string - Payload interface{} -} - -// ToLogRecord converts a deprecated LogData to a non-deprecated LogRecord -func (ld *LogData) ToLogRecord() LogRecord { - var literalTimestamp time.Time - if ld.Timestamp.IsZero() { - literalTimestamp = time.Now() - } else { - literalTimestamp = ld.Timestamp - } - rval := LogRecord{ - Timestamp: literalTimestamp, - } - if ld.Payload == nil { - rval.Fields = []log.Field{ - log.String("event", ld.Event), - } - } else { - rval.Fields = []log.Field{ - log.String("event", ld.Event), - log.Object("payload", ld.Payload), - } - } - return rval -} diff --git a/vendor/github.com/opentracing/opentracing-go/tracer.go b/vendor/github.com/opentracing/opentracing-go/tracer.go deleted file mode 100644 index fd77c1d..0000000 --- a/vendor/github.com/opentracing/opentracing-go/tracer.go +++ /dev/null @@ -1,305 +0,0 @@ -package opentracing - -import "time" - -// Tracer is a simple, thin interface for Span creation and SpanContext -// propagation. -type Tracer interface { - - // Create, start, and return a new Span with the given `operationName` and - // incorporate the given StartSpanOption `opts`. (Note that `opts` borrows - // from the "functional options" pattern, per - // http://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis) - // - // A Span with no SpanReference options (e.g., opentracing.ChildOf() or - // opentracing.FollowsFrom()) becomes the root of its own trace. - // - // Examples: - // - // var tracer opentracing.Tracer = ... - // - // // The root-span case: - // sp := tracer.StartSpan("GetFeed") - // - // // The vanilla child span case: - // sp := tracer.StartSpan( - // "GetFeed", - // opentracing.ChildOf(parentSpan.Context())) - // - // // All the bells and whistles: - // sp := tracer.StartSpan( - // "GetFeed", - // opentracing.ChildOf(parentSpan.Context()), - // opentracing.Tag("user_agent", loggedReq.UserAgent), - // opentracing.StartTime(loggedReq.Timestamp), - // ) - // - StartSpan(operationName string, opts ...StartSpanOption) Span - - // Inject() takes the `sm` SpanContext instance and injects it for - // propagation within `carrier`. The actual type of `carrier` depends on - // the value of `format`. - // - // OpenTracing defines a common set of `format` values (see BuiltinFormat), - // and each has an expected carrier type. - // - // Other packages may declare their own `format` values, much like the keys - // used by `context.Context` (see - // https://godoc.org/golang.org/x/net/context#WithValue). - // - // Example usage (sans error handling): - // - // carrier := opentracing.HTTPHeadersCarrier(httpReq.Header) - // err := tracer.Inject( - // span.Context(), - // opentracing.HTTPHeaders, - // carrier) - // - // NOTE: All opentracing.Tracer implementations MUST support all - // BuiltinFormats. - // - // Implementations may return opentracing.ErrUnsupportedFormat if `format` - // is not supported by (or not known by) the implementation. - // - // Implementations may return opentracing.ErrInvalidCarrier or any other - // implementation-specific error if the format is supported but injection - // fails anyway. - // - // See Tracer.Extract(). - Inject(sm SpanContext, format interface{}, carrier interface{}) error - - // Extract() returns a SpanContext instance given `format` and `carrier`. - // - // OpenTracing defines a common set of `format` values (see BuiltinFormat), - // and each has an expected carrier type. - // - // Other packages may declare their own `format` values, much like the keys - // used by `context.Context` (see - // https://godoc.org/golang.org/x/net/context#WithValue). - // - // Example usage (with StartSpan): - // - // - // carrier := opentracing.HTTPHeadersCarrier(httpReq.Header) - // clientContext, err := tracer.Extract(opentracing.HTTPHeaders, carrier) - // - // // ... assuming the ultimate goal here is to resume the trace with a - // // server-side Span: - // var serverSpan opentracing.Span - // if err == nil { - // span = tracer.StartSpan( - // rpcMethodName, ext.RPCServerOption(clientContext)) - // } else { - // span = tracer.StartSpan(rpcMethodName) - // } - // - // - // NOTE: All opentracing.Tracer implementations MUST support all - // BuiltinFormats. - // - // Return values: - // - A successful Extract returns a SpanContext instance and a nil error - // - If there was simply no SpanContext to extract in `carrier`, Extract() - // returns (nil, opentracing.ErrSpanContextNotFound) - // - If `format` is unsupported or unrecognized, Extract() returns (nil, - // opentracing.ErrUnsupportedFormat) - // - If there are more fundamental problems with the `carrier` object, - // Extract() may return opentracing.ErrInvalidCarrier, - // opentracing.ErrSpanContextCorrupted, or implementation-specific - // errors. - // - // See Tracer.Inject(). - Extract(format interface{}, carrier interface{}) (SpanContext, error) -} - -// StartSpanOptions allows Tracer.StartSpan() callers and implementors a -// mechanism to override the start timestamp, specify Span References, and make -// a single Tag or multiple Tags available at Span start time. -// -// StartSpan() callers should look at the StartSpanOption interface and -// implementations available in this package. -// -// Tracer implementations can convert a slice of `StartSpanOption` instances -// into a `StartSpanOptions` struct like so: -// -// func StartSpan(opName string, opts ...opentracing.StartSpanOption) { -// sso := opentracing.StartSpanOptions{} -// for _, o := range opts { -// o.Apply(&sso) -// } -// ... -// } -// -type StartSpanOptions struct { - // Zero or more causal references to other Spans (via their SpanContext). - // If empty, start a "root" Span (i.e., start a new trace). - References []SpanReference - - // StartTime overrides the Span's start time, or implicitly becomes - // time.Now() if StartTime.IsZero(). - StartTime time.Time - - // Tags may have zero or more entries; the restrictions on map values are - // identical to those for Span.SetTag(). May be nil. - // - // If specified, the caller hands off ownership of Tags at - // StartSpan() invocation time. - Tags map[string]interface{} -} - -// StartSpanOption instances (zero or more) may be passed to Tracer.StartSpan. -// -// StartSpanOption borrows from the "functional options" pattern, per -// http://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis -type StartSpanOption interface { - Apply(*StartSpanOptions) -} - -// SpanReferenceType is an enum type describing different categories of -// relationships between two Spans. If Span-2 refers to Span-1, the -// SpanReferenceType describes Span-1 from Span-2's perspective. For example, -// ChildOfRef means that Span-1 created Span-2. -// -// NOTE: Span-1 and Span-2 do *not* necessarily depend on each other for -// completion; e.g., Span-2 may be part of a background job enqueued by Span-1, -// or Span-2 may be sitting in a distributed queue behind Span-1. -type SpanReferenceType int - -const ( - // ChildOfRef refers to a parent Span that caused *and* somehow depends - // upon the new child Span. Often (but not always), the parent Span cannot - // finish until the child Span does. - // - // An timing diagram for a ChildOfRef that's blocked on the new Span: - // - // [-Parent Span---------] - // [-Child Span----] - // - // See http://opentracing.io/spec/ - // - // See opentracing.ChildOf() - ChildOfRef SpanReferenceType = iota - - // FollowsFromRef refers to a parent Span that does not depend in any way - // on the result of the new child Span. For instance, one might use - // FollowsFromRefs to describe pipeline stages separated by queues, - // or a fire-and-forget cache insert at the tail end of a web request. - // - // A FollowsFromRef Span is part of the same logical trace as the new Span: - // i.e., the new Span is somehow caused by the work of its FollowsFromRef. - // - // All of the following could be valid timing diagrams for children that - // "FollowFrom" a parent. - // - // [-Parent Span-] [-Child Span-] - // - // - // [-Parent Span--] - // [-Child Span-] - // - // - // [-Parent Span-] - // [-Child Span-] - // - // See http://opentracing.io/spec/ - // - // See opentracing.FollowsFrom() - FollowsFromRef -) - -// SpanReference is a StartSpanOption that pairs a SpanReferenceType and a -// referenced SpanContext. See the SpanReferenceType documentation for -// supported relationships. If SpanReference is created with -// ReferencedContext==nil, it has no effect. Thus it allows for a more concise -// syntax for starting spans: -// -// sc, _ := tracer.Extract(someFormat, someCarrier) -// span := tracer.StartSpan("operation", opentracing.ChildOf(sc)) -// -// The `ChildOf(sc)` option above will not panic if sc == nil, it will just -// not add the parent span reference to the options. -type SpanReference struct { - Type SpanReferenceType - ReferencedContext SpanContext -} - -// Apply satisfies the StartSpanOption interface. -func (r SpanReference) Apply(o *StartSpanOptions) { - if r.ReferencedContext != nil { - o.References = append(o.References, r) - } -} - -// ChildOf returns a StartSpanOption pointing to a dependent parent span. -// If sc == nil, the option has no effect. -// -// See ChildOfRef, SpanReference -func ChildOf(sc SpanContext) SpanReference { - return SpanReference{ - Type: ChildOfRef, - ReferencedContext: sc, - } -} - -// FollowsFrom returns a StartSpanOption pointing to a parent Span that caused -// the child Span but does not directly depend on its result in any way. -// If sc == nil, the option has no effect. -// -// See FollowsFromRef, SpanReference -func FollowsFrom(sc SpanContext) SpanReference { - return SpanReference{ - Type: FollowsFromRef, - ReferencedContext: sc, - } -} - -// StartTime is a StartSpanOption that sets an explicit start timestamp for the -// new Span. -type StartTime time.Time - -// Apply satisfies the StartSpanOption interface. -func (t StartTime) Apply(o *StartSpanOptions) { - o.StartTime = time.Time(t) -} - -// Tags are a generic map from an arbitrary string key to an opaque value type. -// The underlying tracing system is responsible for interpreting and -// serializing the values. -type Tags map[string]interface{} - -// Apply satisfies the StartSpanOption interface. -func (t Tags) Apply(o *StartSpanOptions) { - if o.Tags == nil { - o.Tags = make(map[string]interface{}) - } - for k, v := range t { - o.Tags[k] = v - } -} - -// Tag may be passed as a StartSpanOption to add a tag to new spans, -// or its Set method may be used to apply the tag to an existing Span, -// for example: -// -// tracer.StartSpan("opName", Tag{"Key", value}) -// -// or -// -// Tag{"key", value}.Set(span) -type Tag struct { - Key string - Value interface{} -} - -// Apply satisfies the StartSpanOption interface. -func (t Tag) Apply(o *StartSpanOptions) { - if o.Tags == nil { - o.Tags = make(map[string]interface{}) - } - o.Tags[t.Key] = t.Value -} - -// Set applies the tag to an existing Span. -func (t Tag) Set(s Span) { - s.SetTag(t.Key, t.Value) -} diff --git a/vendor/github.com/petar/GoLLRB/AUTHORS b/vendor/github.com/petar/GoLLRB/AUTHORS deleted file mode 100644 index 78d1de4..0000000 --- a/vendor/github.com/petar/GoLLRB/AUTHORS +++ /dev/null @@ -1,4 +0,0 @@ -Petar Maymounkov -Vadim Vygonets -Ian Smith -Martin Bruse diff --git a/vendor/github.com/petar/GoLLRB/LICENSE b/vendor/github.com/petar/GoLLRB/LICENSE deleted file mode 100644 index b75312c..0000000 --- a/vendor/github.com/petar/GoLLRB/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2010, Petar Maymounkov -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -(*) Redistributions of source code must retain the above copyright notice, this list -of conditions and the following disclaimer. - -(*) Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -(*) Neither the name of Petar Maymounkov nor the names of its contributors may be -used to endorse or promote products derived from this software without specific -prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/petar/GoLLRB/llrb/avgvar.go b/vendor/github.com/petar/GoLLRB/llrb/avgvar.go deleted file mode 100644 index 2d7e2a3..0000000 --- a/vendor/github.com/petar/GoLLRB/llrb/avgvar.go +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2010 Petar Maymounkov. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package llrb - -import "math" - -// avgVar maintains the average and variance of a stream of numbers -// in a space-efficient manner. -type avgVar struct { - count int64 - sum, sumsq float64 -} - -func (av *avgVar) Init() { - av.count = 0 - av.sum = 0.0 - av.sumsq = 0.0 -} - -func (av *avgVar) Add(sample float64) { - av.count++ - av.sum += sample - av.sumsq += sample * sample -} - -func (av *avgVar) GetCount() int64 { return av.count } - -func (av *avgVar) GetAvg() float64 { return av.sum / float64(av.count) } - -func (av *avgVar) GetTotal() float64 { return av.sum } - -func (av *avgVar) GetVar() float64 { - a := av.GetAvg() - return av.sumsq/float64(av.count) - a*a -} - -func (av *avgVar) GetStdDev() float64 { return math.Sqrt(av.GetVar()) } diff --git a/vendor/github.com/petar/GoLLRB/llrb/iterator.go b/vendor/github.com/petar/GoLLRB/llrb/iterator.go deleted file mode 100644 index ee7b27f..0000000 --- a/vendor/github.com/petar/GoLLRB/llrb/iterator.go +++ /dev/null @@ -1,93 +0,0 @@ -package llrb - -type ItemIterator func(i Item) bool - -//func (t *Tree) Ascend(iterator ItemIterator) { -// t.AscendGreaterOrEqual(Inf(-1), iterator) -//} - -func (t *LLRB) AscendRange(greaterOrEqual, lessThan Item, iterator ItemIterator) { - t.ascendRange(t.root, greaterOrEqual, lessThan, iterator) -} - -func (t *LLRB) ascendRange(h *Node, inf, sup Item, iterator ItemIterator) bool { - if h == nil { - return true - } - if !less(h.Item, sup) { - return t.ascendRange(h.Left, inf, sup, iterator) - } - if less(h.Item, inf) { - return t.ascendRange(h.Right, inf, sup, iterator) - } - - if !t.ascendRange(h.Left, inf, sup, iterator) { - return false - } - if !iterator(h.Item) { - return false - } - return t.ascendRange(h.Right, inf, sup, iterator) -} - -// AscendGreaterOrEqual will call iterator once for each element greater or equal to -// pivot in ascending order. It will stop whenever the iterator returns false. -func (t *LLRB) AscendGreaterOrEqual(pivot Item, iterator ItemIterator) { - t.ascendGreaterOrEqual(t.root, pivot, iterator) -} - -func (t *LLRB) ascendGreaterOrEqual(h *Node, pivot Item, iterator ItemIterator) bool { - if h == nil { - return true - } - if !less(h.Item, pivot) { - if !t.ascendGreaterOrEqual(h.Left, pivot, iterator) { - return false - } - if !iterator(h.Item) { - return false - } - } - return t.ascendGreaterOrEqual(h.Right, pivot, iterator) -} - -func (t *LLRB) AscendLessThan(pivot Item, iterator ItemIterator) { - t.ascendLessThan(t.root, pivot, iterator) -} - -func (t *LLRB) ascendLessThan(h *Node, pivot Item, iterator ItemIterator) bool { - if h == nil { - return true - } - if !t.ascendLessThan(h.Left, pivot, iterator) { - return false - } - if !iterator(h.Item) { - return false - } - if less(h.Item, pivot) { - return t.ascendLessThan(h.Left, pivot, iterator) - } - return true -} - -// DescendLessOrEqual will call iterator once for each element less than the -// pivot in descending order. It will stop whenever the iterator returns false. -func (t *LLRB) DescendLessOrEqual(pivot Item, iterator ItemIterator) { - t.descendLessOrEqual(t.root, pivot, iterator) -} - -func (t *LLRB) descendLessOrEqual(h *Node, pivot Item, iterator ItemIterator) bool { - if h == nil { - return true - } - if less(h.Item, pivot) || !less(pivot, h.Item) { - if !t.descendLessOrEqual(h.Right, pivot, iterator) { - return false - } - if !iterator(h.Item) { - return false - } - } - return t.descendLessOrEqual(h.Left, pivot, iterator) -} diff --git a/vendor/github.com/petar/GoLLRB/llrb/llrb-stats.go b/vendor/github.com/petar/GoLLRB/llrb/llrb-stats.go deleted file mode 100644 index 47126a3..0000000 --- a/vendor/github.com/petar/GoLLRB/llrb/llrb-stats.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2010 Petar Maymounkov. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package llrb - -// GetHeight() returns an item in the tree with key @key, and it's height in the tree -func (t *LLRB) GetHeight(key Item) (result Item, depth int) { - return t.getHeight(t.root, key) -} - -func (t *LLRB) getHeight(h *Node, item Item) (Item, int) { - if h == nil { - return nil, 0 - } - if less(item, h.Item) { - result, depth := t.getHeight(h.Left, item) - return result, depth + 1 - } - if less(h.Item, item) { - result, depth := t.getHeight(h.Right, item) - return result, depth + 1 - } - return h.Item, 0 -} - -// HeightStats() returns the average and standard deviation of the height -// of elements in the tree -func (t *LLRB) HeightStats() (avg, stddev float64) { - av := &avgVar{} - heightStats(t.root, 0, av) - return av.GetAvg(), av.GetStdDev() -} - -func heightStats(h *Node, d int, av *avgVar) { - if h == nil { - return - } - av.Add(float64(d)) - if h.Left != nil { - heightStats(h.Left, d+1, av) - } - if h.Right != nil { - heightStats(h.Right, d+1, av) - } -} diff --git a/vendor/github.com/petar/GoLLRB/llrb/llrb.go b/vendor/github.com/petar/GoLLRB/llrb/llrb.go deleted file mode 100644 index 81373fb..0000000 --- a/vendor/github.com/petar/GoLLRB/llrb/llrb.go +++ /dev/null @@ -1,456 +0,0 @@ -// Copyright 2010 Petar Maymounkov. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// A Left-Leaning Red-Black (LLRB) implementation of 2-3 balanced binary search trees, -// based on the following work: -// -// http://www.cs.princeton.edu/~rs/talks/LLRB/08Penn.pdf -// http://www.cs.princeton.edu/~rs/talks/LLRB/LLRB.pdf -// http://www.cs.princeton.edu/~rs/talks/LLRB/Java/RedBlackBST.java -// -// 2-3 trees (and the run-time equivalent 2-3-4 trees) are the de facto standard BST -// algoritms found in implementations of Python, Java, and other libraries. The LLRB -// implementation of 2-3 trees is a recent improvement on the traditional implementation, -// observed and documented by Robert Sedgewick. -// -package llrb - -// Tree is a Left-Leaning Red-Black (LLRB) implementation of 2-3 trees -type LLRB struct { - count int - root *Node -} - -type Node struct { - Item - Left, Right *Node // Pointers to left and right child nodes - Black bool // If set, the color of the link (incoming from the parent) is black - // In the LLRB, new nodes are always red, hence the zero-value for node -} - -type Item interface { - Less(than Item) bool -} - -// -func less(x, y Item) bool { - if x == pinf { - return false - } - if x == ninf { - return true - } - return x.Less(y) -} - -// Inf returns an Item that is "bigger than" any other item, if sign is positive. -// Otherwise it returns an Item that is "smaller than" any other item. -func Inf(sign int) Item { - if sign == 0 { - panic("sign") - } - if sign > 0 { - return pinf - } - return ninf -} - -var ( - ninf = nInf{} - pinf = pInf{} -) - -type nInf struct{} - -func (nInf) Less(Item) bool { - return true -} - -type pInf struct{} - -func (pInf) Less(Item) bool { - return false -} - -// New() allocates a new tree -func New() *LLRB { - return &LLRB{} -} - -// SetRoot sets the root node of the tree. -// It is intended to be used by functions that deserialize the tree. -func (t *LLRB) SetRoot(r *Node) { - t.root = r -} - -// Root returns the root node of the tree. -// It is intended to be used by functions that serialize the tree. -func (t *LLRB) Root() *Node { - return t.root -} - -// Len returns the number of nodes in the tree. -func (t *LLRB) Len() int { return t.count } - -// Has returns true if the tree contains an element whose order is the same as that of key. -func (t *LLRB) Has(key Item) bool { - return t.Get(key) != nil -} - -// Get retrieves an element from the tree whose order is the same as that of key. -func (t *LLRB) Get(key Item) Item { - h := t.root - for h != nil { - switch { - case less(key, h.Item): - h = h.Left - case less(h.Item, key): - h = h.Right - default: - return h.Item - } - } - return nil -} - -// Min returns the minimum element in the tree. -func (t *LLRB) Min() Item { - h := t.root - if h == nil { - return nil - } - for h.Left != nil { - h = h.Left - } - return h.Item -} - -// Max returns the maximum element in the tree. -func (t *LLRB) Max() Item { - h := t.root - if h == nil { - return nil - } - for h.Right != nil { - h = h.Right - } - return h.Item -} - -func (t *LLRB) ReplaceOrInsertBulk(items ...Item) { - for _, i := range items { - t.ReplaceOrInsert(i) - } -} - -func (t *LLRB) InsertNoReplaceBulk(items ...Item) { - for _, i := range items { - t.InsertNoReplace(i) - } -} - -// ReplaceOrInsert inserts item into the tree. If an existing -// element has the same order, it is removed from the tree and returned. -func (t *LLRB) ReplaceOrInsert(item Item) Item { - if item == nil { - panic("inserting nil item") - } - var replaced Item - t.root, replaced = t.replaceOrInsert(t.root, item) - t.root.Black = true - if replaced == nil { - t.count++ - } - return replaced -} - -func (t *LLRB) replaceOrInsert(h *Node, item Item) (*Node, Item) { - if h == nil { - return newNode(item), nil - } - - h = walkDownRot23(h) - - var replaced Item - if less(item, h.Item) { // BUG - h.Left, replaced = t.replaceOrInsert(h.Left, item) - } else if less(h.Item, item) { - h.Right, replaced = t.replaceOrInsert(h.Right, item) - } else { - replaced, h.Item = h.Item, item - } - - h = walkUpRot23(h) - - return h, replaced -} - -// InsertNoReplace inserts item into the tree. If an existing -// element has the same order, both elements remain in the tree. -func (t *LLRB) InsertNoReplace(item Item) { - if item == nil { - panic("inserting nil item") - } - t.root = t.insertNoReplace(t.root, item) - t.root.Black = true - t.count++ -} - -func (t *LLRB) insertNoReplace(h *Node, item Item) *Node { - if h == nil { - return newNode(item) - } - - h = walkDownRot23(h) - - if less(item, h.Item) { - h.Left = t.insertNoReplace(h.Left, item) - } else { - h.Right = t.insertNoReplace(h.Right, item) - } - - return walkUpRot23(h) -} - -// Rotation driver routines for 2-3 algorithm - -func walkDownRot23(h *Node) *Node { return h } - -func walkUpRot23(h *Node) *Node { - if isRed(h.Right) && !isRed(h.Left) { - h = rotateLeft(h) - } - - if isRed(h.Left) && isRed(h.Left.Left) { - h = rotateRight(h) - } - - if isRed(h.Left) && isRed(h.Right) { - flip(h) - } - - return h -} - -// Rotation driver routines for 2-3-4 algorithm - -func walkDownRot234(h *Node) *Node { - if isRed(h.Left) && isRed(h.Right) { - flip(h) - } - - return h -} - -func walkUpRot234(h *Node) *Node { - if isRed(h.Right) && !isRed(h.Left) { - h = rotateLeft(h) - } - - if isRed(h.Left) && isRed(h.Left.Left) { - h = rotateRight(h) - } - - return h -} - -// DeleteMin deletes the minimum element in the tree and returns the -// deleted item or nil otherwise. -func (t *LLRB) DeleteMin() Item { - var deleted Item - t.root, deleted = deleteMin(t.root) - if t.root != nil { - t.root.Black = true - } - if deleted != nil { - t.count-- - } - return deleted -} - -// deleteMin code for LLRB 2-3 trees -func deleteMin(h *Node) (*Node, Item) { - if h == nil { - return nil, nil - } - if h.Left == nil { - return nil, h.Item - } - - if !isRed(h.Left) && !isRed(h.Left.Left) { - h = moveRedLeft(h) - } - - var deleted Item - h.Left, deleted = deleteMin(h.Left) - - return fixUp(h), deleted -} - -// DeleteMax deletes the maximum element in the tree and returns -// the deleted item or nil otherwise -func (t *LLRB) DeleteMax() Item { - var deleted Item - t.root, deleted = deleteMax(t.root) - if t.root != nil { - t.root.Black = true - } - if deleted != nil { - t.count-- - } - return deleted -} - -func deleteMax(h *Node) (*Node, Item) { - if h == nil { - return nil, nil - } - if isRed(h.Left) { - h = rotateRight(h) - } - if h.Right == nil { - return nil, h.Item - } - if !isRed(h.Right) && !isRed(h.Right.Left) { - h = moveRedRight(h) - } - var deleted Item - h.Right, deleted = deleteMax(h.Right) - - return fixUp(h), deleted -} - -// Delete deletes an item from the tree whose key equals key. -// The deleted item is return, otherwise nil is returned. -func (t *LLRB) Delete(key Item) Item { - var deleted Item - t.root, deleted = t.delete(t.root, key) - if t.root != nil { - t.root.Black = true - } - if deleted != nil { - t.count-- - } - return deleted -} - -func (t *LLRB) delete(h *Node, item Item) (*Node, Item) { - var deleted Item - if h == nil { - return nil, nil - } - if less(item, h.Item) { - if h.Left == nil { // item not present. Nothing to delete - return h, nil - } - if !isRed(h.Left) && !isRed(h.Left.Left) { - h = moveRedLeft(h) - } - h.Left, deleted = t.delete(h.Left, item) - } else { - if isRed(h.Left) { - h = rotateRight(h) - } - // If @item equals @h.Item and no right children at @h - if !less(h.Item, item) && h.Right == nil { - return nil, h.Item - } - // PETAR: Added 'h.Right != nil' below - if h.Right != nil && !isRed(h.Right) && !isRed(h.Right.Left) { - h = moveRedRight(h) - } - // If @item equals @h.Item, and (from above) 'h.Right != nil' - if !less(h.Item, item) { - var subDeleted Item - h.Right, subDeleted = deleteMin(h.Right) - if subDeleted == nil { - panic("logic") - } - deleted, h.Item = h.Item, subDeleted - } else { // Else, @item is bigger than @h.Item - h.Right, deleted = t.delete(h.Right, item) - } - } - - return fixUp(h), deleted -} - -// Internal node manipulation routines - -func newNode(item Item) *Node { return &Node{Item: item} } - -func isRed(h *Node) bool { - if h == nil { - return false - } - return !h.Black -} - -func rotateLeft(h *Node) *Node { - x := h.Right - if x.Black { - panic("rotating a black link") - } - h.Right = x.Left - x.Left = h - x.Black = h.Black - h.Black = false - return x -} - -func rotateRight(h *Node) *Node { - x := h.Left - if x.Black { - panic("rotating a black link") - } - h.Left = x.Right - x.Right = h - x.Black = h.Black - h.Black = false - return x -} - -// REQUIRE: Left and Right children must be present -func flip(h *Node) { - h.Black = !h.Black - h.Left.Black = !h.Left.Black - h.Right.Black = !h.Right.Black -} - -// REQUIRE: Left and Right children must be present -func moveRedLeft(h *Node) *Node { - flip(h) - if isRed(h.Right.Left) { - h.Right = rotateRight(h.Right) - h = rotateLeft(h) - flip(h) - } - return h -} - -// REQUIRE: Left and Right children must be present -func moveRedRight(h *Node) *Node { - flip(h) - if isRed(h.Left.Left) { - h = rotateRight(h) - flip(h) - } - return h -} - -func fixUp(h *Node) *Node { - if isRed(h.Right) { - h = rotateLeft(h) - } - - if isRed(h.Left) && isRed(h.Left.Left) { - h = rotateRight(h) - } - - if isRed(h.Left) && isRed(h.Right) { - flip(h) - } - - return h -} diff --git a/vendor/github.com/petar/GoLLRB/llrb/util.go b/vendor/github.com/petar/GoLLRB/llrb/util.go deleted file mode 100644 index 63dbdb2..0000000 --- a/vendor/github.com/petar/GoLLRB/llrb/util.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2010 Petar Maymounkov. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package llrb - -type Int int - -func (x Int) Less(than Item) bool { - return x < than.(Int) -} - -type String string - -func (x String) Less(than Item) bool { - return x < than.(String) -} diff --git a/vendor/github.com/pingcap/goleveldb/LICENSE b/vendor/github.com/pingcap/goleveldb/LICENSE deleted file mode 100644 index 4a772d1..0000000 --- a/vendor/github.com/pingcap/goleveldb/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright 2012 Suryandaru Triandana -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/batch.go b/vendor/github.com/pingcap/goleveldb/leveldb/batch.go deleted file mode 100644 index 6c0b022..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/batch.go +++ /dev/null @@ -1,349 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "encoding/binary" - "fmt" - "io" - - "github.com/pingcap/goleveldb/leveldb/errors" - "github.com/pingcap/goleveldb/leveldb/memdb" - "github.com/pingcap/goleveldb/leveldb/storage" -) - -// ErrBatchCorrupted records reason of batch corruption. This error will be -// wrapped with errors.ErrCorrupted. -type ErrBatchCorrupted struct { - Reason string -} - -func (e *ErrBatchCorrupted) Error() string { - return fmt.Sprintf("leveldb: batch corrupted: %s", e.Reason) -} - -func newErrBatchCorrupted(reason string) error { - return errors.NewErrCorrupted(storage.FileDesc{}, &ErrBatchCorrupted{reason}) -} - -const ( - batchHeaderLen = 8 + 4 - batchGrowRec = 3000 - batchBufioSize = 16 -) - -// BatchReplay wraps basic batch operations. -type BatchReplay interface { - Put(key, value []byte) - Delete(key []byte) -} - -type batchIndex struct { - keyType keyType - keyPos, keyLen int - valuePos, valueLen int -} - -func (index batchIndex) k(data []byte) []byte { - return data[index.keyPos : index.keyPos+index.keyLen] -} - -func (index batchIndex) v(data []byte) []byte { - if index.valueLen != 0 { - return data[index.valuePos : index.valuePos+index.valueLen] - } - return nil -} - -func (index batchIndex) kv(data []byte) (key, value []byte) { - return index.k(data), index.v(data) -} - -// Batch is a write batch. -type Batch struct { - data []byte - index []batchIndex - - // internalLen is sums of key/value pair length plus 8-bytes internal key. - internalLen int -} - -func (b *Batch) grow(n int) { - o := len(b.data) - if cap(b.data)-o < n { - div := 1 - if len(b.index) > batchGrowRec { - div = len(b.index) / batchGrowRec - } - ndata := make([]byte, o, o+n+o/div) - copy(ndata, b.data) - b.data = ndata - } -} - -func (b *Batch) appendRec(kt keyType, key, value []byte) { - n := 1 + binary.MaxVarintLen32 + len(key) - if kt == keyTypeVal { - n += binary.MaxVarintLen32 + len(value) - } - b.grow(n) - index := batchIndex{keyType: kt} - o := len(b.data) - data := b.data[:o+n] - data[o] = byte(kt) - o++ - o += binary.PutUvarint(data[o:], uint64(len(key))) - index.keyPos = o - index.keyLen = len(key) - o += copy(data[o:], key) - if kt == keyTypeVal { - o += binary.PutUvarint(data[o:], uint64(len(value))) - index.valuePos = o - index.valueLen = len(value) - o += copy(data[o:], value) - } - b.data = data[:o] - b.index = append(b.index, index) - b.internalLen += index.keyLen + index.valueLen + 8 -} - -// Put appends 'put operation' of the given key/value pair to the batch. -// It is safe to modify the contents of the argument after Put returns but not -// before. -func (b *Batch) Put(key, value []byte) { - b.appendRec(keyTypeVal, key, value) -} - -// Delete appends 'delete operation' of the given key to the batch. -// It is safe to modify the contents of the argument after Delete returns but -// not before. -func (b *Batch) Delete(key []byte) { - b.appendRec(keyTypeDel, key, nil) -} - -// Dump dumps batch contents. The returned slice can be loaded into the -// batch using Load method. -// The returned slice is not its own copy, so the contents should not be -// modified. -func (b *Batch) Dump() []byte { - return b.data -} - -// Load loads given slice into the batch. Previous contents of the batch -// will be discarded. -// The given slice will not be copied and will be used as batch buffer, so -// it is not safe to modify the contents of the slice. -func (b *Batch) Load(data []byte) error { - return b.decode(data, -1) -} - -// Replay replays batch contents. -func (b *Batch) Replay(r BatchReplay) error { - for _, index := range b.index { - switch index.keyType { - case keyTypeVal: - r.Put(index.k(b.data), index.v(b.data)) - case keyTypeDel: - r.Delete(index.k(b.data)) - } - } - return nil -} - -// Len returns number of records in the batch. -func (b *Batch) Len() int { - return len(b.index) -} - -// Reset resets the batch. -func (b *Batch) Reset() { - b.data = b.data[:0] - b.index = b.index[:0] - b.internalLen = 0 -} - -func (b *Batch) replayInternal(fn func(i int, kt keyType, k, v []byte) error) error { - for i, index := range b.index { - if err := fn(i, index.keyType, index.k(b.data), index.v(b.data)); err != nil { - return err - } - } - return nil -} - -func (b *Batch) append(p *Batch) { - ob := len(b.data) - oi := len(b.index) - b.data = append(b.data, p.data...) - b.index = append(b.index, p.index...) - b.internalLen += p.internalLen - - // Updating index offset. - if ob != 0 { - for ; oi < len(b.index); oi++ { - index := &b.index[oi] - index.keyPos += ob - if index.valueLen != 0 { - index.valuePos += ob - } - } - } -} - -func (b *Batch) decode(data []byte, expectedLen int) error { - b.data = data - b.index = b.index[:0] - b.internalLen = 0 - err := decodeBatch(data, func(i int, index batchIndex) error { - b.index = append(b.index, index) - b.internalLen += index.keyLen + index.valueLen + 8 - return nil - }) - if err != nil { - return err - } - if expectedLen >= 0 && len(b.index) != expectedLen { - return newErrBatchCorrupted(fmt.Sprintf("invalid records length: %d vs %d", expectedLen, len(b.index))) - } - return nil -} - -func (b *Batch) putMem(seq uint64, mdb *memdb.DB) error { - var ik []byte - for i, index := range b.index { - ik = makeInternalKey(ik, index.k(b.data), seq+uint64(i), index.keyType) - if err := mdb.Put(ik, index.v(b.data)); err != nil { - return err - } - } - return nil -} - -func (b *Batch) revertMem(seq uint64, mdb *memdb.DB) error { - var ik []byte - for i, index := range b.index { - ik = makeInternalKey(ik, index.k(b.data), seq+uint64(i), index.keyType) - if err := mdb.Delete(ik); err != nil { - return err - } - } - return nil -} - -func newBatch() interface{} { - return &Batch{} -} - -func decodeBatch(data []byte, fn func(i int, index batchIndex) error) error { - var index batchIndex - for i, o := 0, 0; o < len(data); i++ { - // Key type. - index.keyType = keyType(data[o]) - if index.keyType > keyTypeVal { - return newErrBatchCorrupted(fmt.Sprintf("bad record: invalid type %#x", uint(index.keyType))) - } - o++ - - // Key. - x, n := binary.Uvarint(data[o:]) - o += n - if n <= 0 || o+int(x) > len(data) { - return newErrBatchCorrupted("bad record: invalid key length") - } - index.keyPos = o - index.keyLen = int(x) - o += index.keyLen - - // Value. - if index.keyType == keyTypeVal { - x, n = binary.Uvarint(data[o:]) - o += n - if n <= 0 || o+int(x) > len(data) { - return newErrBatchCorrupted("bad record: invalid value length") - } - index.valuePos = o - index.valueLen = int(x) - o += index.valueLen - } else { - index.valuePos = 0 - index.valueLen = 0 - } - - if err := fn(i, index); err != nil { - return err - } - } - return nil -} - -func decodeBatchToMem(data []byte, expectSeq uint64, mdb *memdb.DB) (seq uint64, batchLen int, err error) { - seq, batchLen, err = decodeBatchHeader(data) - if err != nil { - return 0, 0, err - } - if seq < expectSeq { - return 0, 0, newErrBatchCorrupted("invalid sequence number") - } - data = data[batchHeaderLen:] - var ik []byte - var decodedLen int - err = decodeBatch(data, func(i int, index batchIndex) error { - if i >= batchLen { - return newErrBatchCorrupted("invalid records length") - } - ik = makeInternalKey(ik, index.k(data), seq+uint64(i), index.keyType) - if err := mdb.Put(ik, index.v(data)); err != nil { - return err - } - decodedLen++ - return nil - }) - if err == nil && decodedLen != batchLen { - err = newErrBatchCorrupted(fmt.Sprintf("invalid records length: %d vs %d", batchLen, decodedLen)) - } - return -} - -func encodeBatchHeader(dst []byte, seq uint64, batchLen int) []byte { - dst = ensureBuffer(dst, batchHeaderLen) - binary.LittleEndian.PutUint64(dst, seq) - binary.LittleEndian.PutUint32(dst[8:], uint32(batchLen)) - return dst -} - -func decodeBatchHeader(data []byte) (seq uint64, batchLen int, err error) { - if len(data) < batchHeaderLen { - return 0, 0, newErrBatchCorrupted("too short") - } - - seq = binary.LittleEndian.Uint64(data) - batchLen = int(binary.LittleEndian.Uint32(data[8:])) - if batchLen < 0 { - return 0, 0, newErrBatchCorrupted("invalid records length") - } - return -} - -func batchesLen(batches []*Batch) int { - batchLen := 0 - for _, batch := range batches { - batchLen += batch.Len() - } - return batchLen -} - -func writeBatchesWithHeader(wr io.Writer, batches []*Batch, seq uint64) error { - if _, err := wr.Write(encodeBatchHeader(nil, seq, batchesLen(batches))); err != nil { - return err - } - for _, batch := range batches { - if _, err := wr.Write(batch.data); err != nil { - return err - } - } - return nil -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/cache/cache.go b/vendor/github.com/pingcap/goleveldb/leveldb/cache/cache.go deleted file mode 100644 index 880e5f5..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/cache/cache.go +++ /dev/null @@ -1,705 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Package cache provides interface and implementation of a cache algorithms. -package cache - -import ( - "sync" - "sync/atomic" - "unsafe" - - "github.com/pingcap/goleveldb/leveldb/util" -) - -// Cacher provides interface to implements a caching functionality. -// An implementation must be safe for concurrent use. -type Cacher interface { - // Capacity returns cache capacity. - Capacity() int - - // SetCapacity sets cache capacity. - SetCapacity(capacity int) - - // Promote promotes the 'cache node'. - Promote(n *Node) - - // Ban evicts the 'cache node' and prevent subsequent 'promote'. - Ban(n *Node) - - // Evict evicts the 'cache node'. - Evict(n *Node) - - // EvictNS evicts 'cache node' with the given namespace. - EvictNS(ns uint64) - - // EvictAll evicts all 'cache node'. - EvictAll() - - // Close closes the 'cache tree' - Close() error -} - -// Value is a 'cacheable object'. It may implements util.Releaser, if -// so the the Release method will be called once object is released. -type Value interface{} - -// NamespaceGetter provides convenient wrapper for namespace. -type NamespaceGetter struct { - Cache *Cache - NS uint64 -} - -// Get simply calls Cache.Get() method. -func (g *NamespaceGetter) Get(key uint64, setFunc func() (size int, value Value)) *Handle { - return g.Cache.Get(g.NS, key, setFunc) -} - -// The hash tables implementation is based on: -// "Dynamic-Sized Nonblocking Hash Tables", by Yujie Liu, -// Kunlong Zhang, and Michael Spear. -// ACM Symposium on Principles of Distributed Computing, Jul 2014. - -const ( - mInitialSize = 1 << 4 - mOverflowThreshold = 1 << 5 - mOverflowGrowThreshold = 1 << 7 -) - -type mBucket struct { - mu sync.Mutex - node []*Node - frozen bool -} - -func (b *mBucket) freeze() []*Node { - b.mu.Lock() - defer b.mu.Unlock() - if !b.frozen { - b.frozen = true - } - return b.node -} - -func (b *mBucket) get(r *Cache, h *mNode, hash uint32, ns, key uint64, noset bool) (done, added bool, n *Node) { - b.mu.Lock() - - if b.frozen { - b.mu.Unlock() - return - } - - // Scan the node. - for _, n := range b.node { - if n.hash == hash && n.ns == ns && n.key == key { - atomic.AddInt32(&n.ref, 1) - b.mu.Unlock() - return true, false, n - } - } - - // Get only. - if noset { - b.mu.Unlock() - return true, false, nil - } - - // Create node. - n = &Node{ - r: r, - hash: hash, - ns: ns, - key: key, - ref: 1, - } - // Add node to bucket. - b.node = append(b.node, n) - bLen := len(b.node) - b.mu.Unlock() - - // Update counter. - grow := atomic.AddInt32(&r.nodes, 1) >= h.growThreshold - if bLen > mOverflowThreshold { - grow = grow || atomic.AddInt32(&h.overflow, 1) >= mOverflowGrowThreshold - } - - // Grow. - if grow && atomic.CompareAndSwapInt32(&h.resizeInProgess, 0, 1) { - nhLen := len(h.buckets) << 1 - nh := &mNode{ - buckets: make([]unsafe.Pointer, nhLen), - mask: uint32(nhLen) - 1, - pred: unsafe.Pointer(h), - growThreshold: int32(nhLen * mOverflowThreshold), - shrinkThreshold: int32(nhLen >> 1), - } - ok := atomic.CompareAndSwapPointer(&r.mHead, unsafe.Pointer(h), unsafe.Pointer(nh)) - if !ok { - panic("BUG: failed swapping head") - } - go nh.initBuckets() - } - - return true, true, n -} - -func (b *mBucket) delete(r *Cache, h *mNode, hash uint32, ns, key uint64) (done, deleted bool) { - b.mu.Lock() - - if b.frozen { - b.mu.Unlock() - return - } - - // Scan the node. - var ( - n *Node - bLen int - ) - for i := range b.node { - n = b.node[i] - if n.ns == ns && n.key == key { - if atomic.LoadInt32(&n.ref) == 0 { - deleted = true - - // Call releaser. - if n.value != nil { - if r, ok := n.value.(util.Releaser); ok { - r.Release() - } - n.value = nil - } - - // Remove node from bucket. - b.node = append(b.node[:i], b.node[i+1:]...) - bLen = len(b.node) - } - break - } - } - b.mu.Unlock() - - if deleted { - // Call OnDel. - for _, f := range n.onDel { - f() - } - - // Update counter. - atomic.AddInt32(&r.size, int32(n.size)*-1) - shrink := atomic.AddInt32(&r.nodes, -1) < h.shrinkThreshold - if bLen >= mOverflowThreshold { - atomic.AddInt32(&h.overflow, -1) - } - - // Shrink. - if shrink && len(h.buckets) > mInitialSize && atomic.CompareAndSwapInt32(&h.resizeInProgess, 0, 1) { - nhLen := len(h.buckets) >> 1 - nh := &mNode{ - buckets: make([]unsafe.Pointer, nhLen), - mask: uint32(nhLen) - 1, - pred: unsafe.Pointer(h), - growThreshold: int32(nhLen * mOverflowThreshold), - shrinkThreshold: int32(nhLen >> 1), - } - ok := atomic.CompareAndSwapPointer(&r.mHead, unsafe.Pointer(h), unsafe.Pointer(nh)) - if !ok { - panic("BUG: failed swapping head") - } - go nh.initBuckets() - } - } - - return true, deleted -} - -type mNode struct { - buckets []unsafe.Pointer // []*mBucket - mask uint32 - pred unsafe.Pointer // *mNode - resizeInProgess int32 - - overflow int32 - growThreshold int32 - shrinkThreshold int32 -} - -func (n *mNode) initBucket(i uint32) *mBucket { - if b := (*mBucket)(atomic.LoadPointer(&n.buckets[i])); b != nil { - return b - } - - p := (*mNode)(atomic.LoadPointer(&n.pred)) - if p != nil { - var node []*Node - if n.mask > p.mask { - // Grow. - pb := (*mBucket)(atomic.LoadPointer(&p.buckets[i&p.mask])) - if pb == nil { - pb = p.initBucket(i & p.mask) - } - m := pb.freeze() - // Split nodes. - for _, x := range m { - if x.hash&n.mask == i { - node = append(node, x) - } - } - } else { - // Shrink. - pb0 := (*mBucket)(atomic.LoadPointer(&p.buckets[i])) - if pb0 == nil { - pb0 = p.initBucket(i) - } - pb1 := (*mBucket)(atomic.LoadPointer(&p.buckets[i+uint32(len(n.buckets))])) - if pb1 == nil { - pb1 = p.initBucket(i + uint32(len(n.buckets))) - } - m0 := pb0.freeze() - m1 := pb1.freeze() - // Merge nodes. - node = make([]*Node, 0, len(m0)+len(m1)) - node = append(node, m0...) - node = append(node, m1...) - } - b := &mBucket{node: node} - if atomic.CompareAndSwapPointer(&n.buckets[i], nil, unsafe.Pointer(b)) { - if len(node) > mOverflowThreshold { - atomic.AddInt32(&n.overflow, int32(len(node)-mOverflowThreshold)) - } - return b - } - } - - return (*mBucket)(atomic.LoadPointer(&n.buckets[i])) -} - -func (n *mNode) initBuckets() { - for i := range n.buckets { - n.initBucket(uint32(i)) - } - atomic.StorePointer(&n.pred, nil) -} - -// Cache is a 'cache map'. -type Cache struct { - mu sync.RWMutex - mHead unsafe.Pointer // *mNode - nodes int32 - size int32 - cacher Cacher - closed bool -} - -// NewCache creates a new 'cache map'. The cacher is optional and -// may be nil. -func NewCache(cacher Cacher) *Cache { - h := &mNode{ - buckets: make([]unsafe.Pointer, mInitialSize), - mask: mInitialSize - 1, - growThreshold: int32(mInitialSize * mOverflowThreshold), - shrinkThreshold: 0, - } - for i := range h.buckets { - h.buckets[i] = unsafe.Pointer(&mBucket{}) - } - r := &Cache{ - mHead: unsafe.Pointer(h), - cacher: cacher, - } - return r -} - -func (r *Cache) getBucket(hash uint32) (*mNode, *mBucket) { - h := (*mNode)(atomic.LoadPointer(&r.mHead)) - i := hash & h.mask - b := (*mBucket)(atomic.LoadPointer(&h.buckets[i])) - if b == nil { - b = h.initBucket(i) - } - return h, b -} - -func (r *Cache) delete(n *Node) bool { - for { - h, b := r.getBucket(n.hash) - done, deleted := b.delete(r, h, n.hash, n.ns, n.key) - if done { - return deleted - } - } - return false -} - -// Nodes returns number of 'cache node' in the map. -func (r *Cache) Nodes() int { - return int(atomic.LoadInt32(&r.nodes)) -} - -// Size returns sums of 'cache node' size in the map. -func (r *Cache) Size() int { - return int(atomic.LoadInt32(&r.size)) -} - -// Capacity returns cache capacity. -func (r *Cache) Capacity() int { - if r.cacher == nil { - return 0 - } - return r.cacher.Capacity() -} - -// SetCapacity sets cache capacity. -func (r *Cache) SetCapacity(capacity int) { - if r.cacher != nil { - r.cacher.SetCapacity(capacity) - } -} - -// Get gets 'cache node' with the given namespace and key. -// If cache node is not found and setFunc is not nil, Get will atomically creates -// the 'cache node' by calling setFunc. Otherwise Get will returns nil. -// -// The returned 'cache handle' should be released after use by calling Release -// method. -func (r *Cache) Get(ns, key uint64, setFunc func() (size int, value Value)) *Handle { - r.mu.RLock() - defer r.mu.RUnlock() - if r.closed { - return nil - } - - hash := murmur32(ns, key, 0xf00) - for { - h, b := r.getBucket(hash) - done, _, n := b.get(r, h, hash, ns, key, setFunc == nil) - if done { - if n != nil { - n.mu.Lock() - if n.value == nil { - if setFunc == nil { - n.mu.Unlock() - n.unref() - return nil - } - - n.size, n.value = setFunc() - if n.value == nil { - n.size = 0 - n.mu.Unlock() - n.unref() - return nil - } - atomic.AddInt32(&r.size, int32(n.size)) - } - n.mu.Unlock() - if r.cacher != nil { - r.cacher.Promote(n) - } - return &Handle{unsafe.Pointer(n)} - } - - break - } - } - return nil -} - -// Delete removes and ban 'cache node' with the given namespace and key. -// A banned 'cache node' will never inserted into the 'cache tree'. Ban -// only attributed to the particular 'cache node', so when a 'cache node' -// is recreated it will not be banned. -// -// If onDel is not nil, then it will be executed if such 'cache node' -// doesn't exist or once the 'cache node' is released. -// -// Delete return true is such 'cache node' exist. -func (r *Cache) Delete(ns, key uint64, onDel func()) bool { - r.mu.RLock() - defer r.mu.RUnlock() - if r.closed { - return false - } - - hash := murmur32(ns, key, 0xf00) - for { - h, b := r.getBucket(hash) - done, _, n := b.get(r, h, hash, ns, key, true) - if done { - if n != nil { - if onDel != nil { - n.mu.Lock() - n.onDel = append(n.onDel, onDel) - n.mu.Unlock() - } - if r.cacher != nil { - r.cacher.Ban(n) - } - n.unref() - return true - } - - break - } - } - - if onDel != nil { - onDel() - } - - return false -} - -// Evict evicts 'cache node' with the given namespace and key. This will -// simply call Cacher.Evict. -// -// Evict return true is such 'cache node' exist. -func (r *Cache) Evict(ns, key uint64) bool { - r.mu.RLock() - defer r.mu.RUnlock() - if r.closed { - return false - } - - hash := murmur32(ns, key, 0xf00) - for { - h, b := r.getBucket(hash) - done, _, n := b.get(r, h, hash, ns, key, true) - if done { - if n != nil { - if r.cacher != nil { - r.cacher.Evict(n) - } - n.unref() - return true - } - - break - } - } - - return false -} - -// EvictNS evicts 'cache node' with the given namespace. This will -// simply call Cacher.EvictNS. -func (r *Cache) EvictNS(ns uint64) { - r.mu.RLock() - defer r.mu.RUnlock() - if r.closed { - return - } - - if r.cacher != nil { - r.cacher.EvictNS(ns) - } -} - -// EvictAll evicts all 'cache node'. This will simply call Cacher.EvictAll. -func (r *Cache) EvictAll() { - r.mu.RLock() - defer r.mu.RUnlock() - if r.closed { - return - } - - if r.cacher != nil { - r.cacher.EvictAll() - } -} - -// Close closes the 'cache map' and forcefully releases all 'cache node'. -func (r *Cache) Close() error { - r.mu.Lock() - if !r.closed { - r.closed = true - - h := (*mNode)(r.mHead) - h.initBuckets() - - for i := range h.buckets { - b := (*mBucket)(h.buckets[i]) - for _, n := range b.node { - // Call releaser. - if n.value != nil { - if r, ok := n.value.(util.Releaser); ok { - r.Release() - } - n.value = nil - } - - // Call OnDel. - for _, f := range n.onDel { - f() - } - n.onDel = nil - } - } - } - r.mu.Unlock() - - // Avoid deadlock. - if r.cacher != nil { - if err := r.cacher.Close(); err != nil { - return err - } - } - return nil -} - -// CloseWeak closes the 'cache map' and evict all 'cache node' from cacher, but -// unlike Close it doesn't forcefully releases 'cache node'. -func (r *Cache) CloseWeak() error { - r.mu.Lock() - if !r.closed { - r.closed = true - } - r.mu.Unlock() - - // Avoid deadlock. - if r.cacher != nil { - r.cacher.EvictAll() - if err := r.cacher.Close(); err != nil { - return err - } - } - return nil -} - -// Node is a 'cache node'. -type Node struct { - r *Cache - - hash uint32 - ns, key uint64 - - mu sync.Mutex - size int - value Value - - ref int32 - onDel []func() - - CacheData unsafe.Pointer -} - -// NS returns this 'cache node' namespace. -func (n *Node) NS() uint64 { - return n.ns -} - -// Key returns this 'cache node' key. -func (n *Node) Key() uint64 { - return n.key -} - -// Size returns this 'cache node' size. -func (n *Node) Size() int { - return n.size -} - -// Value returns this 'cache node' value. -func (n *Node) Value() Value { - return n.value -} - -// Ref returns this 'cache node' ref counter. -func (n *Node) Ref() int32 { - return atomic.LoadInt32(&n.ref) -} - -// GetHandle returns an handle for this 'cache node'. -func (n *Node) GetHandle() *Handle { - if atomic.AddInt32(&n.ref, 1) <= 1 { - panic("BUG: Node.GetHandle on zero ref") - } - return &Handle{unsafe.Pointer(n)} -} - -func (n *Node) unref() { - if atomic.AddInt32(&n.ref, -1) == 0 { - n.r.delete(n) - } -} - -func (n *Node) unrefLocked() { - if atomic.AddInt32(&n.ref, -1) == 0 { - n.r.mu.RLock() - if !n.r.closed { - n.r.delete(n) - } - n.r.mu.RUnlock() - } -} - -// Handle is a 'cache handle' of a 'cache node'. -type Handle struct { - n unsafe.Pointer // *Node -} - -// Value returns the value of the 'cache node'. -func (h *Handle) Value() Value { - n := (*Node)(atomic.LoadPointer(&h.n)) - if n != nil { - return n.value - } - return nil -} - -// Release releases this 'cache handle'. -// It is safe to call release multiple times. -func (h *Handle) Release() { - nPtr := atomic.LoadPointer(&h.n) - if nPtr != nil && atomic.CompareAndSwapPointer(&h.n, nPtr, nil) { - n := (*Node)(nPtr) - n.unrefLocked() - } -} - -func murmur32(ns, key uint64, seed uint32) uint32 { - const ( - m = uint32(0x5bd1e995) - r = 24 - ) - - k1 := uint32(ns >> 32) - k2 := uint32(ns) - k3 := uint32(key >> 32) - k4 := uint32(key) - - k1 *= m - k1 ^= k1 >> r - k1 *= m - - k2 *= m - k2 ^= k2 >> r - k2 *= m - - k3 *= m - k3 ^= k3 >> r - k3 *= m - - k4 *= m - k4 ^= k4 >> r - k4 *= m - - h := seed - - h *= m - h ^= k1 - h *= m - h ^= k2 - h *= m - h ^= k3 - h *= m - h ^= k4 - - h ^= h >> 13 - h *= m - h ^= h >> 15 - - return h -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/cache/lru.go b/vendor/github.com/pingcap/goleveldb/leveldb/cache/lru.go deleted file mode 100644 index d9a84cd..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/cache/lru.go +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package cache - -import ( - "sync" - "unsafe" -) - -type lruNode struct { - n *Node - h *Handle - ban bool - - next, prev *lruNode -} - -func (n *lruNode) insert(at *lruNode) { - x := at.next - at.next = n - n.prev = at - n.next = x - x.prev = n -} - -func (n *lruNode) remove() { - if n.prev != nil { - n.prev.next = n.next - n.next.prev = n.prev - n.prev = nil - n.next = nil - } else { - panic("BUG: removing removed node") - } -} - -type lru struct { - mu sync.Mutex - capacity int - used int - recent lruNode -} - -func (r *lru) reset() { - r.recent.next = &r.recent - r.recent.prev = &r.recent - r.used = 0 -} - -func (r *lru) Capacity() int { - r.mu.Lock() - defer r.mu.Unlock() - return r.capacity -} - -func (r *lru) SetCapacity(capacity int) { - var evicted []*lruNode - - r.mu.Lock() - r.capacity = capacity - for r.used > r.capacity { - rn := r.recent.prev - if rn == nil { - panic("BUG: invalid LRU used or capacity counter") - } - rn.remove() - rn.n.CacheData = nil - r.used -= rn.n.Size() - evicted = append(evicted, rn) - } - r.mu.Unlock() - - for _, rn := range evicted { - rn.h.Release() - } -} - -func (r *lru) Promote(n *Node) { - var evicted []*lruNode - - r.mu.Lock() - if n.CacheData == nil { - if n.Size() <= r.capacity { - rn := &lruNode{n: n, h: n.GetHandle()} - rn.insert(&r.recent) - n.CacheData = unsafe.Pointer(rn) - r.used += n.Size() - - for r.used > r.capacity { - rn := r.recent.prev - if rn == nil { - panic("BUG: invalid LRU used or capacity counter") - } - rn.remove() - rn.n.CacheData = nil - r.used -= rn.n.Size() - evicted = append(evicted, rn) - } - } - } else { - rn := (*lruNode)(n.CacheData) - if !rn.ban { - rn.remove() - rn.insert(&r.recent) - } - } - r.mu.Unlock() - - for _, rn := range evicted { - rn.h.Release() - } -} - -func (r *lru) Ban(n *Node) { - r.mu.Lock() - if n.CacheData == nil { - n.CacheData = unsafe.Pointer(&lruNode{n: n, ban: true}) - } else { - rn := (*lruNode)(n.CacheData) - if !rn.ban { - rn.remove() - rn.ban = true - r.used -= rn.n.Size() - r.mu.Unlock() - - rn.h.Release() - rn.h = nil - return - } - } - r.mu.Unlock() -} - -func (r *lru) Evict(n *Node) { - r.mu.Lock() - rn := (*lruNode)(n.CacheData) - if rn == nil || rn.ban { - r.mu.Unlock() - return - } - n.CacheData = nil - r.mu.Unlock() - - rn.h.Release() -} - -func (r *lru) EvictNS(ns uint64) { - var evicted []*lruNode - - r.mu.Lock() - for e := r.recent.prev; e != &r.recent; { - rn := e - e = e.prev - if rn.n.NS() == ns { - rn.remove() - rn.n.CacheData = nil - r.used -= rn.n.Size() - evicted = append(evicted, rn) - } - } - r.mu.Unlock() - - for _, rn := range evicted { - rn.h.Release() - } -} - -func (r *lru) EvictAll() { - r.mu.Lock() - back := r.recent.prev - for rn := back; rn != &r.recent; rn = rn.prev { - rn.n.CacheData = nil - } - r.reset() - r.mu.Unlock() - - for rn := back; rn != &r.recent; rn = rn.prev { - rn.h.Release() - } -} - -func (r *lru) Close() error { - return nil -} - -// NewLRU create a new LRU-cache. -func NewLRU(capacity int) Cacher { - r := &lru{capacity: capacity} - r.reset() - return r -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/comparer.go b/vendor/github.com/pingcap/goleveldb/leveldb/comparer.go deleted file mode 100644 index 66a3146..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/comparer.go +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "github.com/pingcap/goleveldb/leveldb/comparer" -) - -type iComparer struct { - ucmp comparer.Comparer -} - -func (icmp *iComparer) uName() string { - return icmp.ucmp.Name() -} - -func (icmp *iComparer) uCompare(a, b []byte) int { - return icmp.ucmp.Compare(a, b) -} - -func (icmp *iComparer) uSeparator(dst, a, b []byte) []byte { - return icmp.ucmp.Separator(dst, a, b) -} - -func (icmp *iComparer) uSuccessor(dst, b []byte) []byte { - return icmp.ucmp.Successor(dst, b) -} - -func (icmp *iComparer) Name() string { - return icmp.uName() -} - -func (icmp *iComparer) Compare(a, b []byte) int { - x := icmp.uCompare(internalKey(a).ukey(), internalKey(b).ukey()) - if x == 0 { - if m, n := internalKey(a).num(), internalKey(b).num(); m > n { - return -1 - } else if m < n { - return 1 - } - } - return x -} - -func (icmp *iComparer) Separator(dst, a, b []byte) []byte { - ua, ub := internalKey(a).ukey(), internalKey(b).ukey() - dst = icmp.uSeparator(dst, ua, ub) - if dst != nil && len(dst) < len(ua) && icmp.uCompare(ua, dst) < 0 { - // Append earliest possible number. - return append(dst, keyMaxNumBytes...) - } - return nil -} - -func (icmp *iComparer) Successor(dst, b []byte) []byte { - ub := internalKey(b).ukey() - dst = icmp.uSuccessor(dst, ub) - if dst != nil && len(dst) < len(ub) && icmp.uCompare(ub, dst) < 0 { - // Append earliest possible number. - return append(dst, keyMaxNumBytes...) - } - return nil -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/comparer/bytes_comparer.go b/vendor/github.com/pingcap/goleveldb/leveldb/comparer/bytes_comparer.go deleted file mode 100644 index 14dddf8..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/comparer/bytes_comparer.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package comparer - -import "bytes" - -type bytesComparer struct{} - -func (bytesComparer) Compare(a, b []byte) int { - return bytes.Compare(a, b) -} - -func (bytesComparer) Name() string { - return "leveldb.BytewiseComparator" -} - -func (bytesComparer) Separator(dst, a, b []byte) []byte { - i, n := 0, len(a) - if n > len(b) { - n = len(b) - } - for ; i < n && a[i] == b[i]; i++ { - } - if i >= n { - // Do not shorten if one string is a prefix of the other - } else if c := a[i]; c < 0xff && c+1 < b[i] { - dst = append(dst, a[:i+1]...) - dst[i]++ - return dst - } - return nil -} - -func (bytesComparer) Successor(dst, b []byte) []byte { - for i, c := range b { - if c != 0xff { - dst = append(dst, b[:i+1]...) - dst[i]++ - return dst - } - } - return nil -} - -// DefaultComparer are default implementation of the Comparer interface. -// It uses the natural ordering, consistent with bytes.Compare. -var DefaultComparer = bytesComparer{} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/comparer/comparer.go b/vendor/github.com/pingcap/goleveldb/leveldb/comparer/comparer.go deleted file mode 100644 index 14a28f1..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/comparer/comparer.go +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Package comparer provides interface and implementation for ordering -// sets of data. -package comparer - -// BasicComparer is the interface that wraps the basic Compare method. -type BasicComparer interface { - // Compare returns -1, 0, or +1 depending on whether a is 'less than', - // 'equal to' or 'greater than' b. The two arguments can only be 'equal' - // if their contents are exactly equal. Furthermore, the empty slice - // must be 'less than' any non-empty slice. - Compare(a, b []byte) int -} - -// Comparer defines a total ordering over the space of []byte keys: a 'less -// than' relationship. -type Comparer interface { - BasicComparer - - // Name returns name of the comparer. - // - // The Level-DB on-disk format stores the comparer name, and opening a - // database with a different comparer from the one it was created with - // will result in an error. - // - // An implementation to a new name whenever the comparer implementation - // changes in a way that will cause the relative ordering of any two keys - // to change. - // - // Names starting with "leveldb." are reserved and should not be used - // by any users of this package. - Name() string - - // Bellow are advanced functions used used to reduce the space requirements - // for internal data structures such as index blocks. - - // Separator appends a sequence of bytes x to dst such that a <= x && x < b, - // where 'less than' is consistent with Compare. An implementation should - // return nil if x equal to a. - // - // Either contents of a or b should not by any means modified. Doing so - // may cause corruption on the internal state. - Separator(dst, a, b []byte) []byte - - // Successor appends a sequence of bytes x to dst such that x >= b, where - // 'less than' is consistent with Compare. An implementation should return - // nil if x equal to b. - // - // Contents of b should not by any means modified. Doing so may cause - // corruption on the internal state. - Successor(dst, b []byte) []byte -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/db.go b/vendor/github.com/pingcap/goleveldb/leveldb/db.go deleted file mode 100644 index bb5b85e..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/db.go +++ /dev/null @@ -1,1091 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "container/list" - "fmt" - "io" - "os" - "runtime" - "strings" - "sync" - "sync/atomic" - "time" - - "github.com/pingcap/goleveldb/leveldb/errors" - "github.com/pingcap/goleveldb/leveldb/iterator" - "github.com/pingcap/goleveldb/leveldb/journal" - "github.com/pingcap/goleveldb/leveldb/memdb" - "github.com/pingcap/goleveldb/leveldb/opt" - "github.com/pingcap/goleveldb/leveldb/storage" - "github.com/pingcap/goleveldb/leveldb/table" - "github.com/pingcap/goleveldb/leveldb/util" -) - -// DB is a LevelDB database. -type DB struct { - // Need 64-bit alignment. - seq uint64 - - // Session. - s *session - - // MemDB. - memMu sync.RWMutex - memPool chan *memdb.DB - mem, frozenMem *memDB - journal *journal.Writer - journalWriter storage.Writer - journalFd storage.FileDesc - frozenJournalFd storage.FileDesc - frozenSeq uint64 - - // Snapshot. - snapsMu sync.Mutex - snapsList *list.List - - // Stats. - aliveSnaps, aliveIters int32 - - // Write. - batchPool sync.Pool - writeMergeC chan writeMerge - writeMergedC chan bool - writeLockC chan struct{} - writeAckC chan error - writeDelay time.Duration - writeDelayN int - tr *Transaction - - // Compaction. - compCommitLk sync.Mutex - tcompCmdC chan cCmd - tcompPauseC chan chan<- struct{} - mcompCmdC chan cCmd - compErrC chan error - compPerErrC chan error - compErrSetC chan error - compWriteLocking bool - compStats cStats - memdbMaxLevel int // For testing. - - // Close. - closeW sync.WaitGroup - closeC chan struct{} - closed uint32 - closer io.Closer -} - -func openDB(s *session) (*DB, error) { - s.log("db@open opening") - start := time.Now() - db := &DB{ - s: s, - // Initial sequence - seq: s.stSeqNum, - // MemDB - memPool: make(chan *memdb.DB, 1), - // Snapshot - snapsList: list.New(), - // Write - batchPool: sync.Pool{New: newBatch}, - writeMergeC: make(chan writeMerge), - writeMergedC: make(chan bool), - writeLockC: make(chan struct{}, 1), - writeAckC: make(chan error), - // Compaction - tcompCmdC: make(chan cCmd), - tcompPauseC: make(chan chan<- struct{}), - mcompCmdC: make(chan cCmd), - compErrC: make(chan error), - compPerErrC: make(chan error), - compErrSetC: make(chan error), - // Close - closeC: make(chan struct{}), - } - - // Read-only mode. - readOnly := s.o.GetReadOnly() - - if readOnly { - // Recover journals (read-only mode). - if err := db.recoverJournalRO(); err != nil { - return nil, err - } - } else { - // Recover journals. - if err := db.recoverJournal(); err != nil { - return nil, err - } - - // Remove any obsolete files. - if err := db.checkAndCleanFiles(); err != nil { - // Close journal. - if db.journal != nil { - db.journal.Close() - db.journalWriter.Close() - } - return nil, err - } - - } - - // Doesn't need to be included in the wait group. - go db.compactionError() - go db.mpoolDrain() - - if readOnly { - db.SetReadOnly() - } else { - db.closeW.Add(2) - go db.tCompaction() - go db.mCompaction() - // go db.jWriter() - } - - s.logf("db@open done T·%v", time.Since(start)) - - runtime.SetFinalizer(db, (*DB).Close) - return db, nil -} - -// Open opens or creates a DB for the given storage. -// The DB will be created if not exist, unless ErrorIfMissing is true. -// Also, if ErrorIfExist is true and the DB exist Open will returns -// os.ErrExist error. -// -// Open will return an error with type of ErrCorrupted if corruption -// detected in the DB. Use errors.IsCorrupted to test whether an error is -// due to corruption. Corrupted DB can be recovered with Recover function. -// -// The returned DB instance is safe for concurrent use. -// The DB must be closed after use, by calling Close method. -func Open(stor storage.Storage, o *opt.Options) (db *DB, err error) { - s, err := newSession(stor, o) - if err != nil { - return - } - defer func() { - if err != nil { - s.close() - s.release() - } - }() - - err = s.recover() - if err != nil { - if !os.IsNotExist(err) || s.o.GetErrorIfMissing() { - return - } - err = s.create() - if err != nil { - return - } - } else if s.o.GetErrorIfExist() { - err = os.ErrExist - return - } - - return openDB(s) -} - -// OpenFile opens or creates a DB for the given path. -// The DB will be created if not exist, unless ErrorIfMissing is true. -// Also, if ErrorIfExist is true and the DB exist OpenFile will returns -// os.ErrExist error. -// -// OpenFile uses standard file-system backed storage implementation as -// described in the leveldb/storage package. -// -// OpenFile will return an error with type of ErrCorrupted if corruption -// detected in the DB. Use errors.IsCorrupted to test whether an error is -// due to corruption. Corrupted DB can be recovered with Recover function. -// -// The returned DB instance is safe for concurrent use. -// The DB must be closed after use, by calling Close method. -func OpenFile(path string, o *opt.Options) (db *DB, err error) { - stor, err := storage.OpenFile(path, o.GetReadOnly()) - if err != nil { - return - } - db, err = Open(stor, o) - if err != nil { - stor.Close() - } else { - db.closer = stor - } - return -} - -// Recover recovers and opens a DB with missing or corrupted manifest files -// for the given storage. It will ignore any manifest files, valid or not. -// The DB must already exist or it will returns an error. -// Also, Recover will ignore ErrorIfMissing and ErrorIfExist options. -// -// The returned DB instance is safe for concurrent use. -// The DB must be closed after use, by calling Close method. -func Recover(stor storage.Storage, o *opt.Options) (db *DB, err error) { - s, err := newSession(stor, o) - if err != nil { - return - } - defer func() { - if err != nil { - s.close() - s.release() - } - }() - - err = recoverTable(s, o) - if err != nil { - return - } - return openDB(s) -} - -// RecoverFile recovers and opens a DB with missing or corrupted manifest files -// for the given path. It will ignore any manifest files, valid or not. -// The DB must already exist or it will returns an error. -// Also, Recover will ignore ErrorIfMissing and ErrorIfExist options. -// -// RecoverFile uses standard file-system backed storage implementation as described -// in the leveldb/storage package. -// -// The returned DB instance is safe for concurrent use. -// The DB must be closed after use, by calling Close method. -func RecoverFile(path string, o *opt.Options) (db *DB, err error) { - stor, err := storage.OpenFile(path, false) - if err != nil { - return - } - db, err = Recover(stor, o) - if err != nil { - stor.Close() - } else { - db.closer = stor - } - return -} - -func recoverTable(s *session, o *opt.Options) error { - o = dupOptions(o) - // Mask StrictReader, lets StrictRecovery doing its job. - o.Strict &= ^opt.StrictReader - - // Get all tables and sort it by file number. - fds, err := s.stor.List(storage.TypeTable) - if err != nil { - return err - } - sortFds(fds) - - var ( - maxSeq uint64 - recoveredKey, goodKey, corruptedKey, corruptedBlock, droppedTable int - - // We will drop corrupted table. - strict = o.GetStrict(opt.StrictRecovery) - noSync = o.GetNoSync() - - rec = &sessionRecord{} - bpool = util.NewBufferPool(o.GetBlockSize() + 5) - ) - buildTable := func(iter iterator.Iterator) (tmpFd storage.FileDesc, size int64, err error) { - tmpFd = s.newTemp() - writer, err := s.stor.Create(tmpFd) - if err != nil { - return - } - defer func() { - writer.Close() - if err != nil { - s.stor.Remove(tmpFd) - tmpFd = storage.FileDesc{} - } - }() - - // Copy entries. - tw := table.NewWriter(writer, o) - for iter.Next() { - key := iter.Key() - if validInternalKey(key) { - err = tw.Append(key, iter.Value()) - if err != nil { - return - } - } - } - err = iter.Error() - if err != nil { - return - } - err = tw.Close() - if err != nil { - return - } - if !noSync { - err = writer.Sync() - if err != nil { - return - } - } - size = int64(tw.BytesLen()) - return - } - recoverTable := func(fd storage.FileDesc) error { - s.logf("table@recovery recovering @%d", fd.Num) - reader, err := s.stor.Open(fd) - if err != nil { - return err - } - var closed bool - defer func() { - if !closed { - reader.Close() - } - }() - - // Get file size. - size, err := reader.Seek(0, 2) - if err != nil { - return err - } - - var ( - tSeq uint64 - tgoodKey, tcorruptedKey, tcorruptedBlock int - imin, imax []byte - ) - tr, err := table.NewReader(reader, size, fd, nil, bpool, o) - if err != nil { - return err - } - iter := tr.NewIterator(nil, nil) - if itererr, ok := iter.(iterator.ErrorCallbackSetter); ok { - itererr.SetErrorCallback(func(err error) { - if errors.IsCorrupted(err) { - s.logf("table@recovery block corruption @%d %q", fd.Num, err) - tcorruptedBlock++ - } - }) - } - - // Scan the table. - for iter.Next() { - key := iter.Key() - _, seq, _, kerr := parseInternalKey(key) - if kerr != nil { - tcorruptedKey++ - continue - } - tgoodKey++ - if seq > tSeq { - tSeq = seq - } - if imin == nil { - imin = append([]byte{}, key...) - } - imax = append(imax[:0], key...) - } - if err := iter.Error(); err != nil { - iter.Release() - return err - } - iter.Release() - - goodKey += tgoodKey - corruptedKey += tcorruptedKey - corruptedBlock += tcorruptedBlock - - if strict && (tcorruptedKey > 0 || tcorruptedBlock > 0) { - droppedTable++ - s.logf("table@recovery dropped @%d Gk·%d Ck·%d Cb·%d S·%d Q·%d", fd.Num, tgoodKey, tcorruptedKey, tcorruptedBlock, size, tSeq) - return nil - } - - if tgoodKey > 0 { - if tcorruptedKey > 0 || tcorruptedBlock > 0 { - // Rebuild the table. - s.logf("table@recovery rebuilding @%d", fd.Num) - iter := tr.NewIterator(nil, nil) - tmpFd, newSize, err := buildTable(iter) - iter.Release() - if err != nil { - return err - } - closed = true - reader.Close() - if err := s.stor.Rename(tmpFd, fd); err != nil { - return err - } - size = newSize - } - if tSeq > maxSeq { - maxSeq = tSeq - } - recoveredKey += tgoodKey - // Add table to level 0. - rec.addTable(0, fd.Num, size, imin, imax) - s.logf("table@recovery recovered @%d Gk·%d Ck·%d Cb·%d S·%d Q·%d", fd.Num, tgoodKey, tcorruptedKey, tcorruptedBlock, size, tSeq) - } else { - droppedTable++ - s.logf("table@recovery unrecoverable @%d Ck·%d Cb·%d S·%d", fd.Num, tcorruptedKey, tcorruptedBlock, size) - } - - return nil - } - - // Recover all tables. - if len(fds) > 0 { - s.logf("table@recovery F·%d", len(fds)) - - // Mark file number as used. - s.markFileNum(fds[len(fds)-1].Num) - - for _, fd := range fds { - if err := recoverTable(fd); err != nil { - return err - } - } - - s.logf("table@recovery recovered F·%d N·%d Gk·%d Ck·%d Q·%d", len(fds), recoveredKey, goodKey, corruptedKey, maxSeq) - } - - // Set sequence number. - rec.setSeqNum(maxSeq) - - // Create new manifest. - if err := s.create(); err != nil { - return err - } - - // Commit. - return s.commit(rec) -} - -func (db *DB) recoverJournal() error { - // Get all journals and sort it by file number. - rawFds, err := db.s.stor.List(storage.TypeJournal) - if err != nil { - return err - } - sortFds(rawFds) - - // Journals that will be recovered. - var fds []storage.FileDesc - for _, fd := range rawFds { - if fd.Num >= db.s.stJournalNum || fd.Num == db.s.stPrevJournalNum { - fds = append(fds, fd) - } - } - - var ( - ofd storage.FileDesc // Obsolete file. - rec = &sessionRecord{} - ) - - // Recover journals. - if len(fds) > 0 { - db.logf("journal@recovery F·%d", len(fds)) - - // Mark file number as used. - db.s.markFileNum(fds[len(fds)-1].Num) - - var ( - // Options. - strict = db.s.o.GetStrict(opt.StrictJournal) - checksum = db.s.o.GetStrict(opt.StrictJournalChecksum) - writeBuffer = db.s.o.GetWriteBuffer() - - jr *journal.Reader - mdb = memdb.New(db.s.icmp, writeBuffer) - buf = &util.Buffer{} - batchSeq uint64 - batchLen int - ) - - for _, fd := range fds { - db.logf("journal@recovery recovering @%d", fd.Num) - - fr, err := db.s.stor.Open(fd) - if err != nil { - return err - } - - // Create or reset journal reader instance. - if jr == nil { - jr = journal.NewReader(fr, dropper{db.s, fd}, strict, checksum) - } else { - jr.Reset(fr, dropper{db.s, fd}, strict, checksum) - } - - // Flush memdb and remove obsolete journal file. - if !ofd.Zero() { - if mdb.Len() > 0 { - if _, err := db.s.flushMemdb(rec, mdb, 0); err != nil { - fr.Close() - return err - } - } - - rec.setJournalNum(fd.Num) - rec.setSeqNum(db.seq) - if err := db.s.commit(rec); err != nil { - fr.Close() - return err - } - rec.resetAddedTables() - - db.s.stor.Remove(ofd) - ofd = storage.FileDesc{} - } - - // Replay journal to memdb. - mdb.Reset() - for { - r, err := jr.Next() - if err != nil { - if err == io.EOF { - break - } - - fr.Close() - return errors.SetFd(err, fd) - } - - buf.Reset() - if _, err := buf.ReadFrom(r); err != nil { - if err == io.ErrUnexpectedEOF { - // This is error returned due to corruption, with strict == false. - continue - } - - fr.Close() - return errors.SetFd(err, fd) - } - batchSeq, batchLen, err = decodeBatchToMem(buf.Bytes(), db.seq, mdb) - if err != nil { - if !strict && errors.IsCorrupted(err) { - db.s.logf("journal error: %v (skipped)", err) - // We won't apply sequence number as it might be corrupted. - continue - } - - fr.Close() - return errors.SetFd(err, fd) - } - - // Save sequence number. - db.seq = batchSeq + uint64(batchLen) - - // Flush it if large enough. - if mdb.Size() >= writeBuffer { - if _, err := db.s.flushMemdb(rec, mdb, 0); err != nil { - fr.Close() - return err - } - - mdb.Reset() - } - } - - fr.Close() - ofd = fd - } - - // Flush the last memdb. - if mdb.Len() > 0 { - if _, err := db.s.flushMemdb(rec, mdb, 0); err != nil { - return err - } - } - } - - // Create a new journal. - if _, err := db.newMem(0); err != nil { - return err - } - - // Commit. - rec.setJournalNum(db.journalFd.Num) - rec.setSeqNum(db.seq) - if err := db.s.commit(rec); err != nil { - // Close journal on error. - if db.journal != nil { - db.journal.Close() - db.journalWriter.Close() - } - return err - } - - // Remove the last obsolete journal file. - if !ofd.Zero() { - db.s.stor.Remove(ofd) - } - - return nil -} - -func (db *DB) recoverJournalRO() error { - // Get all journals and sort it by file number. - rawFds, err := db.s.stor.List(storage.TypeJournal) - if err != nil { - return err - } - sortFds(rawFds) - - // Journals that will be recovered. - var fds []storage.FileDesc - for _, fd := range rawFds { - if fd.Num >= db.s.stJournalNum || fd.Num == db.s.stPrevJournalNum { - fds = append(fds, fd) - } - } - - var ( - // Options. - strict = db.s.o.GetStrict(opt.StrictJournal) - checksum = db.s.o.GetStrict(opt.StrictJournalChecksum) - writeBuffer = db.s.o.GetWriteBuffer() - - mdb = memdb.New(db.s.icmp, writeBuffer) - ) - - // Recover journals. - if len(fds) > 0 { - db.logf("journal@recovery RO·Mode F·%d", len(fds)) - - var ( - jr *journal.Reader - buf = &util.Buffer{} - batchSeq uint64 - batchLen int - ) - - for _, fd := range fds { - db.logf("journal@recovery recovering @%d", fd.Num) - - fr, err := db.s.stor.Open(fd) - if err != nil { - return err - } - - // Create or reset journal reader instance. - if jr == nil { - jr = journal.NewReader(fr, dropper{db.s, fd}, strict, checksum) - } else { - jr.Reset(fr, dropper{db.s, fd}, strict, checksum) - } - - // Replay journal to memdb. - for { - r, err := jr.Next() - if err != nil { - if err == io.EOF { - break - } - - fr.Close() - return errors.SetFd(err, fd) - } - - buf.Reset() - if _, err := buf.ReadFrom(r); err != nil { - if err == io.ErrUnexpectedEOF { - // This is error returned due to corruption, with strict == false. - continue - } - - fr.Close() - return errors.SetFd(err, fd) - } - batchSeq, batchLen, err = decodeBatchToMem(buf.Bytes(), db.seq, mdb) - if err != nil { - if !strict && errors.IsCorrupted(err) { - db.s.logf("journal error: %v (skipped)", err) - // We won't apply sequence number as it might be corrupted. - continue - } - - fr.Close() - return errors.SetFd(err, fd) - } - - // Save sequence number. - db.seq = batchSeq + uint64(batchLen) - } - - fr.Close() - } - } - - // Set memDB. - db.mem = &memDB{db: db, DB: mdb, ref: 1} - - return nil -} - -func memGet(mdb *memdb.DB, ikey internalKey, icmp *iComparer) (ok bool, mv []byte, err error) { - mk, mv, err := mdb.Find(ikey) - if err == nil { - ukey, _, kt, kerr := parseInternalKey(mk) - if kerr != nil { - // Shouldn't have had happen. - panic(kerr) - } - if icmp.uCompare(ukey, ikey.ukey()) == 0 { - if kt == keyTypeDel { - return true, nil, ErrNotFound - } - return true, mv, nil - - } - } else if err != ErrNotFound { - return true, nil, err - } - return -} - -func (db *DB) get(auxm *memdb.DB, auxt tFiles, key []byte, seq uint64, ro *opt.ReadOptions) (value []byte, err error) { - ikey := makeInternalKey(nil, key, seq, keyTypeSeek) - - if auxm != nil { - if ok, mv, me := memGet(auxm, ikey, db.s.icmp); ok { - return append([]byte{}, mv...), me - } - } - - em, fm := db.getMems() - for _, m := range [...]*memDB{em, fm} { - if m == nil { - continue - } - defer m.decref() - - if ok, mv, me := memGet(m.DB, ikey, db.s.icmp); ok { - return append([]byte{}, mv...), me - } - } - - v := db.s.version() - value, cSched, err := v.get(auxt, ikey, ro, false) - v.release() - if cSched { - // Trigger table compaction. - db.compTrigger(db.tcompCmdC) - } - return -} - -func nilIfNotFound(err error) error { - if err == ErrNotFound { - return nil - } - return err -} - -func (db *DB) has(auxm *memdb.DB, auxt tFiles, key []byte, seq uint64, ro *opt.ReadOptions) (ret bool, err error) { - ikey := makeInternalKey(nil, key, seq, keyTypeSeek) - - if auxm != nil { - if ok, _, me := memGet(auxm, ikey, db.s.icmp); ok { - return me == nil, nilIfNotFound(me) - } - } - - em, fm := db.getMems() - for _, m := range [...]*memDB{em, fm} { - if m == nil { - continue - } - defer m.decref() - - if ok, _, me := memGet(m.DB, ikey, db.s.icmp); ok { - return me == nil, nilIfNotFound(me) - } - } - - v := db.s.version() - _, cSched, err := v.get(auxt, ikey, ro, true) - v.release() - if cSched { - // Trigger table compaction. - db.compTrigger(db.tcompCmdC) - } - if err == nil { - ret = true - } else if err == ErrNotFound { - err = nil - } - return -} - -// Get gets the value for the given key. It returns ErrNotFound if the -// DB does not contains the key. -// -// The returned slice is its own copy, it is safe to modify the contents -// of the returned slice. -// It is safe to modify the contents of the argument after Get returns. -func (db *DB) Get(key []byte, ro *opt.ReadOptions) (value []byte, err error) { - err = db.ok() - if err != nil { - return - } - - se := db.acquireSnapshot() - defer db.releaseSnapshot(se) - return db.get(nil, nil, key, se.seq, ro) -} - -// Has returns true if the DB does contains the given key. -// -// It is safe to modify the contents of the argument after Has returns. -func (db *DB) Has(key []byte, ro *opt.ReadOptions) (ret bool, err error) { - err = db.ok() - if err != nil { - return - } - - se := db.acquireSnapshot() - defer db.releaseSnapshot(se) - return db.has(nil, nil, key, se.seq, ro) -} - -// NewIterator returns an iterator for the latest snapshot of the -// underlying DB. -// The returned iterator is not safe for concurrent use, but it is safe to use -// multiple iterators concurrently, with each in a dedicated goroutine. -// It is also safe to use an iterator concurrently with modifying its -// underlying DB. The resultant key/value pairs are guaranteed to be -// consistent. -// -// Slice allows slicing the iterator to only contains keys in the given -// range. A nil Range.Start is treated as a key before all keys in the -// DB. And a nil Range.Limit is treated as a key after all keys in -// the DB. -// -// The iterator must be released after use, by calling Release method. -// -// Also read Iterator documentation of the leveldb/iterator package. -func (db *DB) NewIterator(slice *util.Range, ro *opt.ReadOptions) iterator.Iterator { - if err := db.ok(); err != nil { - return iterator.NewEmptyIterator(err) - } - - se := db.acquireSnapshot() - defer db.releaseSnapshot(se) - // Iterator holds 'version' lock, 'version' is immutable so snapshot - // can be released after iterator created. - return db.newIterator(nil, nil, se.seq, slice, ro) -} - -// GetSnapshot returns a latest snapshot of the underlying DB. A snapshot -// is a frozen snapshot of a DB state at a particular point in time. The -// content of snapshot are guaranteed to be consistent. -// -// The snapshot must be released after use, by calling Release method. -func (db *DB) GetSnapshot() (*Snapshot, error) { - if err := db.ok(); err != nil { - return nil, err - } - - return db.newSnapshot(), nil -} - -// GetProperty returns value of the given property name. -// -// Property names: -// leveldb.num-files-at-level{n} -// Returns the number of files at level 'n'. -// leveldb.stats -// Returns statistics of the underlying DB. -// leveldb.sstables -// Returns sstables list for each level. -// leveldb.blockpool -// Returns block pool stats. -// leveldb.cachedblock -// Returns size of cached block. -// leveldb.openedtables -// Returns number of opened tables. -// leveldb.alivesnaps -// Returns number of alive snapshots. -// leveldb.aliveiters -// Returns number of alive iterators. -func (db *DB) GetProperty(name string) (value string, err error) { - err = db.ok() - if err != nil { - return - } - - const prefix = "leveldb." - if !strings.HasPrefix(name, prefix) { - return "", ErrNotFound - } - p := name[len(prefix):] - - v := db.s.version() - defer v.release() - - numFilesPrefix := "num-files-at-level" - switch { - case strings.HasPrefix(p, numFilesPrefix): - var level uint - var rest string - n, _ := fmt.Sscanf(p[len(numFilesPrefix):], "%d%s", &level, &rest) - if n != 1 { - err = ErrNotFound - } else { - value = fmt.Sprint(v.tLen(int(level))) - } - case p == "stats": - value = "Compactions\n" + - " Level | Tables | Size(MB) | Time(sec) | Read(MB) | Write(MB)\n" + - "-------+------------+---------------+---------------+---------------+---------------\n" - for level, tables := range v.levels { - duration, read, write := db.compStats.getStat(level) - if len(tables) == 0 && duration == 0 { - continue - } - value += fmt.Sprintf(" %3d | %10d | %13.5f | %13.5f | %13.5f | %13.5f\n", - level, len(tables), float64(tables.size())/1048576.0, duration.Seconds(), - float64(read)/1048576.0, float64(write)/1048576.0) - } - case p == "sstables": - for level, tables := range v.levels { - value += fmt.Sprintf("--- level %d ---\n", level) - for _, t := range tables { - value += fmt.Sprintf("%d:%d[%q .. %q]\n", t.fd.Num, t.size, t.imin, t.imax) - } - } - case p == "blockpool": - value = fmt.Sprintf("%v", db.s.tops.bpool) - case p == "cachedblock": - if db.s.tops.bcache != nil { - value = fmt.Sprintf("%d", db.s.tops.bcache.Size()) - } else { - value = "" - } - case p == "openedtables": - value = fmt.Sprintf("%d", db.s.tops.cache.Size()) - case p == "alivesnaps": - value = fmt.Sprintf("%d", atomic.LoadInt32(&db.aliveSnaps)) - case p == "aliveiters": - value = fmt.Sprintf("%d", atomic.LoadInt32(&db.aliveIters)) - default: - err = ErrNotFound - } - - return -} - -// SizeOf calculates approximate sizes of the given key ranges. -// The length of the returned sizes are equal with the length of the given -// ranges. The returned sizes measure storage space usage, so if the user -// data compresses by a factor of ten, the returned sizes will be one-tenth -// the size of the corresponding user data size. -// The results may not include the sizes of recently written data. -func (db *DB) SizeOf(ranges []util.Range) (Sizes, error) { - if err := db.ok(); err != nil { - return nil, err - } - - v := db.s.version() - defer v.release() - - sizes := make(Sizes, 0, len(ranges)) - for _, r := range ranges { - imin := makeInternalKey(nil, r.Start, keyMaxSeq, keyTypeSeek) - imax := makeInternalKey(nil, r.Limit, keyMaxSeq, keyTypeSeek) - start, err := v.offsetOf(imin) - if err != nil { - return nil, err - } - limit, err := v.offsetOf(imax) - if err != nil { - return nil, err - } - var size int64 - if limit >= start { - size = limit - start - } - sizes = append(sizes, size) - } - - return sizes, nil -} - -// Close closes the DB. This will also releases any outstanding snapshot, -// abort any in-flight compaction and discard open transaction. -// -// It is not safe to close a DB until all outstanding iterators are released. -// It is valid to call Close multiple times. Other methods should not be -// called after the DB has been closed. -func (db *DB) Close() error { - if !db.setClosed() { - return ErrClosed - } - - start := time.Now() - db.log("db@close closing") - - // Clear the finalizer. - runtime.SetFinalizer(db, nil) - - // Get compaction error. - var err error - select { - case err = <-db.compErrC: - if err == ErrReadOnly { - err = nil - } - default: - } - - // Signal all goroutines. - close(db.closeC) - - // Discard open transaction. - if db.tr != nil { - db.tr.Discard() - } - - // Acquire writer lock. - db.writeLockC <- struct{}{} - - // Wait for all gorotines to exit. - db.closeW.Wait() - - // Closes journal. - if db.journal != nil { - db.journal.Close() - db.journalWriter.Close() - db.journal = nil - db.journalWriter = nil - } - - if db.writeDelayN > 0 { - db.logf("db@write was delayed N·%d T·%v", db.writeDelayN, db.writeDelay) - } - - // Close session. - db.s.close() - db.logf("db@close done T·%v", time.Since(start)) - db.s.release() - - if db.closer != nil { - if err1 := db.closer.Close(); err == nil { - err = err1 - } - db.closer = nil - } - - // Clear memdbs. - db.clearMems() - - return err -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/db_compaction.go b/vendor/github.com/pingcap/goleveldb/leveldb/db_compaction.go deleted file mode 100644 index 042924c..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/db_compaction.go +++ /dev/null @@ -1,826 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "sync" - "time" - - "github.com/pingcap/goleveldb/leveldb/errors" - "github.com/pingcap/goleveldb/leveldb/opt" - "github.com/pingcap/goleveldb/leveldb/storage" -) - -var ( - errCompactionTransactExiting = errors.New("leveldb: compaction transact exiting") -) - -type cStat struct { - duration time.Duration - read int64 - write int64 -} - -func (p *cStat) add(n *cStatStaging) { - p.duration += n.duration - p.read += n.read - p.write += n.write -} - -func (p *cStat) get() (duration time.Duration, read, write int64) { - return p.duration, p.read, p.write -} - -type cStatStaging struct { - start time.Time - duration time.Duration - on bool - read int64 - write int64 -} - -func (p *cStatStaging) startTimer() { - if !p.on { - p.start = time.Now() - p.on = true - } -} - -func (p *cStatStaging) stopTimer() { - if p.on { - p.duration += time.Since(p.start) - p.on = false - } -} - -type cStats struct { - lk sync.Mutex - stats []cStat -} - -func (p *cStats) addStat(level int, n *cStatStaging) { - p.lk.Lock() - if level >= len(p.stats) { - newStats := make([]cStat, level+1) - copy(newStats, p.stats) - p.stats = newStats - } - p.stats[level].add(n) - p.lk.Unlock() -} - -func (p *cStats) getStat(level int) (duration time.Duration, read, write int64) { - p.lk.Lock() - defer p.lk.Unlock() - if level < len(p.stats) { - return p.stats[level].get() - } - return -} - -func (db *DB) compactionError() { - var err error -noerr: - // No error. - for { - select { - case err = <-db.compErrSetC: - switch { - case err == nil: - case err == ErrReadOnly, errors.IsCorrupted(err): - goto hasperr - default: - goto haserr - } - case <-db.closeC: - return - } - } -haserr: - // Transient error. - for { - select { - case db.compErrC <- err: - case err = <-db.compErrSetC: - switch { - case err == nil: - goto noerr - case err == ErrReadOnly, errors.IsCorrupted(err): - goto hasperr - default: - } - case <-db.closeC: - return - } - } -hasperr: - // Persistent error. - for { - select { - case db.compErrC <- err: - case db.compPerErrC <- err: - case db.writeLockC <- struct{}{}: - // Hold write lock, so that write won't pass-through. - db.compWriteLocking = true - case <-db.closeC: - if db.compWriteLocking { - // We should release the lock or Close will hang. - <-db.writeLockC - } - return - } - } -} - -type compactionTransactCounter int - -func (cnt *compactionTransactCounter) incr() { - *cnt++ -} - -type compactionTransactInterface interface { - run(cnt *compactionTransactCounter) error - revert() error -} - -func (db *DB) compactionTransact(name string, t compactionTransactInterface) { - defer func() { - if x := recover(); x != nil { - if x == errCompactionTransactExiting { - if err := t.revert(); err != nil { - db.logf("%s revert error %q", name, err) - } - } - panic(x) - } - }() - - const ( - backoffMin = 1 * time.Second - backoffMax = 8 * time.Second - backoffMul = 2 * time.Second - ) - var ( - backoff = backoffMin - backoffT = time.NewTimer(backoff) - lastCnt = compactionTransactCounter(0) - - disableBackoff = db.s.o.GetDisableCompactionBackoff() - ) - for n := 0; ; n++ { - // Check whether the DB is closed. - if db.isClosed() { - db.logf("%s exiting", name) - db.compactionExitTransact() - } else if n > 0 { - db.logf("%s retrying N·%d", name, n) - } - - // Execute. - cnt := compactionTransactCounter(0) - err := t.run(&cnt) - if err != nil { - db.logf("%s error I·%d %q", name, cnt, err) - } - - // Set compaction error status. - select { - case db.compErrSetC <- err: - case perr := <-db.compPerErrC: - if err != nil { - db.logf("%s exiting (persistent error %q)", name, perr) - db.compactionExitTransact() - } - case <-db.closeC: - db.logf("%s exiting", name) - db.compactionExitTransact() - } - if err == nil { - return - } - if errors.IsCorrupted(err) { - db.logf("%s exiting (corruption detected)", name) - db.compactionExitTransact() - } - - if !disableBackoff { - // Reset backoff duration if counter is advancing. - if cnt > lastCnt { - backoff = backoffMin - lastCnt = cnt - } - - // Backoff. - backoffT.Reset(backoff) - if backoff < backoffMax { - backoff *= backoffMul - if backoff > backoffMax { - backoff = backoffMax - } - } - select { - case <-backoffT.C: - case <-db.closeC: - db.logf("%s exiting", name) - db.compactionExitTransact() - } - } - } -} - -type compactionTransactFunc struct { - runFunc func(cnt *compactionTransactCounter) error - revertFunc func() error -} - -func (t *compactionTransactFunc) run(cnt *compactionTransactCounter) error { - return t.runFunc(cnt) -} - -func (t *compactionTransactFunc) revert() error { - if t.revertFunc != nil { - return t.revertFunc() - } - return nil -} - -func (db *DB) compactionTransactFunc(name string, run func(cnt *compactionTransactCounter) error, revert func() error) { - db.compactionTransact(name, &compactionTransactFunc{run, revert}) -} - -func (db *DB) compactionExitTransact() { - panic(errCompactionTransactExiting) -} - -func (db *DB) compactionCommit(name string, rec *sessionRecord) { - db.compCommitLk.Lock() - defer db.compCommitLk.Unlock() // Defer is necessary. - db.compactionTransactFunc(name+"@commit", func(cnt *compactionTransactCounter) error { - return db.s.commit(rec) - }, nil) -} - -func (db *DB) memCompaction() { - mdb := db.getFrozenMem() - if mdb == nil { - return - } - defer mdb.decref() - - db.logf("memdb@flush N·%d S·%s", mdb.Len(), shortenb(mdb.Size())) - - // Don't compact empty memdb. - if mdb.Len() == 0 { - db.logf("memdb@flush skipping") - // drop frozen memdb - db.dropFrozenMem() - return - } - - // Pause table compaction. - resumeC := make(chan struct{}) - select { - case db.tcompPauseC <- (chan<- struct{})(resumeC): - case <-db.compPerErrC: - close(resumeC) - resumeC = nil - case <-db.closeC: - db.compactionExitTransact() - } - - var ( - rec = &sessionRecord{} - stats = &cStatStaging{} - flushLevel int - ) - - // Generate tables. - db.compactionTransactFunc("memdb@flush", func(cnt *compactionTransactCounter) (err error) { - stats.startTimer() - flushLevel, err = db.s.flushMemdb(rec, mdb.DB, db.memdbMaxLevel) - stats.stopTimer() - return - }, func() error { - for _, r := range rec.addedTables { - db.logf("memdb@flush revert @%d", r.num) - if err := db.s.stor.Remove(storage.FileDesc{Type: storage.TypeTable, Num: r.num}); err != nil { - return err - } - } - return nil - }) - - rec.setJournalNum(db.journalFd.Num) - rec.setSeqNum(db.frozenSeq) - - // Commit. - stats.startTimer() - db.compactionCommit("memdb", rec) - stats.stopTimer() - - db.logf("memdb@flush committed F·%d T·%v", len(rec.addedTables), stats.duration) - - for _, r := range rec.addedTables { - stats.write += r.size - } - db.compStats.addStat(flushLevel, stats) - - // Drop frozen memdb. - db.dropFrozenMem() - - // Resume table compaction. - if resumeC != nil { - select { - case <-resumeC: - close(resumeC) - case <-db.closeC: - db.compactionExitTransact() - } - } - - // Trigger table compaction. - db.compTrigger(db.tcompCmdC) -} - -type tableCompactionBuilder struct { - db *DB - s *session - c *compaction - rec *sessionRecord - stat0, stat1 *cStatStaging - - snapHasLastUkey bool - snapLastUkey []byte - snapLastSeq uint64 - snapIter int - snapKerrCnt int - snapDropCnt int - - kerrCnt int - dropCnt int - - minSeq uint64 - strict bool - tableSize int - - tw *tWriter -} - -func (b *tableCompactionBuilder) appendKV(key, value []byte) error { - // Create new table if not already. - if b.tw == nil { - // Check for pause event. - if b.db != nil { - select { - case ch := <-b.db.tcompPauseC: - b.db.pauseCompaction(ch) - case <-b.db.closeC: - b.db.compactionExitTransact() - default: - } - } - - // Create new table. - var err error - b.tw, err = b.s.tops.create() - if err != nil { - return err - } - } - - // Write key/value into table. - return b.tw.append(key, value) -} - -func (b *tableCompactionBuilder) needFlush() bool { - return b.tw.tw.BytesLen() >= b.tableSize -} - -func (b *tableCompactionBuilder) flush() error { - t, err := b.tw.finish() - if err != nil { - return err - } - b.rec.addTableFile(b.c.sourceLevel+1, t) - b.stat1.write += t.size - b.s.logf("table@build created L%d@%d N·%d S·%s %q:%q", b.c.sourceLevel+1, t.fd.Num, b.tw.tw.EntriesLen(), shortenb(int(t.size)), t.imin, t.imax) - b.tw = nil - return nil -} - -func (b *tableCompactionBuilder) cleanup() { - if b.tw != nil { - b.tw.drop() - b.tw = nil - } -} - -func (b *tableCompactionBuilder) run(cnt *compactionTransactCounter) error { - snapResumed := b.snapIter > 0 - hasLastUkey := b.snapHasLastUkey // The key might has zero length, so this is necessary. - lastUkey := append([]byte{}, b.snapLastUkey...) - lastSeq := b.snapLastSeq - b.kerrCnt = b.snapKerrCnt - b.dropCnt = b.snapDropCnt - // Restore compaction state. - b.c.restore() - - defer b.cleanup() - - b.stat1.startTimer() - defer b.stat1.stopTimer() - - iter := b.c.newIterator() - defer iter.Release() - for i := 0; iter.Next(); i++ { - // Incr transact counter. - cnt.incr() - - // Skip until last state. - if i < b.snapIter { - continue - } - - resumed := false - if snapResumed { - resumed = true - snapResumed = false - } - - ikey := iter.Key() - ukey, seq, kt, kerr := parseInternalKey(ikey) - - if kerr == nil { - shouldStop := !resumed && b.c.shouldStopBefore(ikey) - - if !hasLastUkey || b.s.icmp.uCompare(lastUkey, ukey) != 0 { - // First occurrence of this user key. - - // Only rotate tables if ukey doesn't hop across. - if b.tw != nil && (shouldStop || b.needFlush()) { - if err := b.flush(); err != nil { - return err - } - - // Creates snapshot of the state. - b.c.save() - b.snapHasLastUkey = hasLastUkey - b.snapLastUkey = append(b.snapLastUkey[:0], lastUkey...) - b.snapLastSeq = lastSeq - b.snapIter = i - b.snapKerrCnt = b.kerrCnt - b.snapDropCnt = b.dropCnt - } - - hasLastUkey = true - lastUkey = append(lastUkey[:0], ukey...) - lastSeq = keyMaxSeq - } - - switch { - case lastSeq <= b.minSeq: - // Dropped because newer entry for same user key exist - fallthrough // (A) - case kt == keyTypeDel && seq <= b.minSeq && b.c.baseLevelForKey(lastUkey): - // For this user key: - // (1) there is no data in higher levels - // (2) data in lower levels will have larger seq numbers - // (3) data in layers that are being compacted here and have - // smaller seq numbers will be dropped in the next - // few iterations of this loop (by rule (A) above). - // Therefore this deletion marker is obsolete and can be dropped. - lastSeq = seq - b.dropCnt++ - continue - default: - lastSeq = seq - } - } else { - if b.strict { - return kerr - } - - // Don't drop corrupted keys. - hasLastUkey = false - lastUkey = lastUkey[:0] - lastSeq = keyMaxSeq - b.kerrCnt++ - } - - if err := b.appendKV(ikey, iter.Value()); err != nil { - return err - } - } - - if err := iter.Error(); err != nil { - return err - } - - // Finish last table. - if b.tw != nil && !b.tw.empty() { - return b.flush() - } - return nil -} - -func (b *tableCompactionBuilder) revert() error { - for _, at := range b.rec.addedTables { - b.s.logf("table@build revert @%d", at.num) - if err := b.s.stor.Remove(storage.FileDesc{Type: storage.TypeTable, Num: at.num}); err != nil { - return err - } - } - return nil -} - -func (db *DB) tableCompaction(c *compaction, noTrivial bool) { - defer c.release() - - rec := &sessionRecord{} - rec.addCompPtr(c.sourceLevel, c.imax) - - if !noTrivial && c.trivial() { - t := c.levels[0][0] - db.logf("table@move L%d@%d -> L%d", c.sourceLevel, t.fd.Num, c.sourceLevel+1) - rec.delTable(c.sourceLevel, t.fd.Num) - rec.addTableFile(c.sourceLevel+1, t) - db.compactionCommit("table-move", rec) - return - } - - var stats [2]cStatStaging - for i, tables := range c.levels { - for _, t := range tables { - stats[i].read += t.size - // Insert deleted tables into record - rec.delTable(c.sourceLevel+i, t.fd.Num) - } - } - sourceSize := int(stats[0].read + stats[1].read) - minSeq := db.minSeq() - db.logf("table@compaction L%d·%d -> L%d·%d S·%s Q·%d", c.sourceLevel, len(c.levels[0]), c.sourceLevel+1, len(c.levels[1]), shortenb(sourceSize), minSeq) - - b := &tableCompactionBuilder{ - db: db, - s: db.s, - c: c, - rec: rec, - stat1: &stats[1], - minSeq: minSeq, - strict: db.s.o.GetStrict(opt.StrictCompaction), - tableSize: db.s.o.GetCompactionTableSize(c.sourceLevel + 1), - } - db.compactionTransact("table@build", b) - - // Commit. - stats[1].startTimer() - db.compactionCommit("table", rec) - stats[1].stopTimer() - - resultSize := int(stats[1].write) - db.logf("table@compaction committed F%s S%s Ke·%d D·%d T·%v", sint(len(rec.addedTables)-len(rec.deletedTables)), sshortenb(resultSize-sourceSize), b.kerrCnt, b.dropCnt, stats[1].duration) - - // Save compaction stats - for i := range stats { - db.compStats.addStat(c.sourceLevel+1, &stats[i]) - } -} - -func (db *DB) tableRangeCompaction(level int, umin, umax []byte) error { - db.logf("table@compaction range L%d %q:%q", level, umin, umax) - if level >= 0 { - if c := db.s.getCompactionRange(level, umin, umax, true); c != nil { - db.tableCompaction(c, true) - } - } else { - // Retry until nothing to compact. - for { - compacted := false - - // Scan for maximum level with overlapped tables. - v := db.s.version() - m := 1 - for i := m; i < len(v.levels); i++ { - tables := v.levels[i] - if tables.overlaps(db.s.icmp, umin, umax, false) { - m = i - } - } - v.release() - - for level := 0; level < m; level++ { - if c := db.s.getCompactionRange(level, umin, umax, false); c != nil { - db.tableCompaction(c, true) - compacted = true - } - } - - if !compacted { - break - } - } - } - - return nil -} - -func (db *DB) tableAutoCompaction() { - if c := db.s.pickCompaction(); c != nil { - db.tableCompaction(c, false) - } -} - -func (db *DB) tableNeedCompaction() bool { - v := db.s.version() - defer v.release() - return v.needCompaction() -} - -func (db *DB) pauseCompaction(ch chan<- struct{}) { - select { - case ch <- struct{}{}: - case <-db.closeC: - db.compactionExitTransact() - } -} - -type cCmd interface { - ack(err error) -} - -type cAuto struct { - ackC chan<- error -} - -func (r cAuto) ack(err error) { - if r.ackC != nil { - defer func() { - recover() - }() - r.ackC <- err - } -} - -type cRange struct { - level int - min, max []byte - ackC chan<- error -} - -func (r cRange) ack(err error) { - if r.ackC != nil { - defer func() { - recover() - }() - r.ackC <- err - } -} - -// This will trigger auto compaction but will not wait for it. -func (db *DB) compTrigger(compC chan<- cCmd) { - select { - case compC <- cAuto{}: - default: - } -} - -// This will trigger auto compaction and/or wait for all compaction to be done. -func (db *DB) compTriggerWait(compC chan<- cCmd) (err error) { - ch := make(chan error) - defer close(ch) - // Send cmd. - select { - case compC <- cAuto{ch}: - case err = <-db.compErrC: - return - case <-db.closeC: - return ErrClosed - } - // Wait cmd. - select { - case err = <-ch: - case err = <-db.compErrC: - case <-db.closeC: - return ErrClosed - } - return err -} - -// Send range compaction request. -func (db *DB) compTriggerRange(compC chan<- cCmd, level int, min, max []byte) (err error) { - ch := make(chan error) - defer close(ch) - // Send cmd. - select { - case compC <- cRange{level, min, max, ch}: - case err := <-db.compErrC: - return err - case <-db.closeC: - return ErrClosed - } - // Wait cmd. - select { - case err = <-ch: - case err = <-db.compErrC: - case <-db.closeC: - return ErrClosed - } - return err -} - -func (db *DB) mCompaction() { - var x cCmd - - defer func() { - if x := recover(); x != nil { - if x != errCompactionTransactExiting { - panic(x) - } - } - if x != nil { - x.ack(ErrClosed) - } - db.closeW.Done() - }() - - for { - select { - case x = <-db.mcompCmdC: - switch x.(type) { - case cAuto: - db.memCompaction() - x.ack(nil) - x = nil - default: - panic("leveldb: unknown command") - } - case <-db.closeC: - return - } - } -} - -func (db *DB) tCompaction() { - var x cCmd - var ackQ []cCmd - - defer func() { - if x := recover(); x != nil { - if x != errCompactionTransactExiting { - panic(x) - } - } - for i := range ackQ { - ackQ[i].ack(ErrClosed) - ackQ[i] = nil - } - if x != nil { - x.ack(ErrClosed) - } - db.closeW.Done() - }() - - for { - if db.tableNeedCompaction() { - select { - case x = <-db.tcompCmdC: - case ch := <-db.tcompPauseC: - db.pauseCompaction(ch) - continue - case <-db.closeC: - return - default: - } - } else { - for i := range ackQ { - ackQ[i].ack(nil) - ackQ[i] = nil - } - ackQ = ackQ[:0] - select { - case x = <-db.tcompCmdC: - case ch := <-db.tcompPauseC: - db.pauseCompaction(ch) - continue - case <-db.closeC: - return - } - } - if x != nil { - switch cmd := x.(type) { - case cAuto: - ackQ = append(ackQ, x) - case cRange: - x.ack(db.tableRangeCompaction(cmd.level, cmd.min, cmd.max)) - default: - panic("leveldb: unknown command") - } - x = nil - } - db.tableAutoCompaction() - } -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/db_iter.go b/vendor/github.com/pingcap/goleveldb/leveldb/db_iter.go deleted file mode 100644 index ec2ce7d..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/db_iter.go +++ /dev/null @@ -1,360 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "errors" - "math/rand" - "runtime" - "sync" - "sync/atomic" - - "github.com/pingcap/goleveldb/leveldb/iterator" - "github.com/pingcap/goleveldb/leveldb/opt" - "github.com/pingcap/goleveldb/leveldb/util" -) - -var ( - errInvalidInternalKey = errors.New("leveldb: Iterator: invalid internal key") -) - -type memdbReleaser struct { - once sync.Once - m *memDB -} - -func (mr *memdbReleaser) Release() { - mr.once.Do(func() { - mr.m.decref() - }) -} - -func (db *DB) newRawIterator(auxm *memDB, auxt tFiles, slice *util.Range, ro *opt.ReadOptions) iterator.Iterator { - strict := opt.GetStrict(db.s.o.Options, ro, opt.StrictReader) - em, fm := db.getMems() - v := db.s.version() - - tableIts := v.getIterators(slice, ro) - n := len(tableIts) + len(auxt) + 3 - its := make([]iterator.Iterator, 0, n) - - if auxm != nil { - ami := auxm.NewIterator(slice) - ami.SetReleaser(&memdbReleaser{m: auxm}) - its = append(its, ami) - } - for _, t := range auxt { - its = append(its, v.s.tops.newIterator(t, slice, ro)) - } - - emi := em.NewIterator(slice) - emi.SetReleaser(&memdbReleaser{m: em}) - its = append(its, emi) - if fm != nil { - fmi := fm.NewIterator(slice) - fmi.SetReleaser(&memdbReleaser{m: fm}) - its = append(its, fmi) - } - its = append(its, tableIts...) - mi := iterator.NewMergedIterator(its, db.s.icmp, strict) - mi.SetReleaser(&versionReleaser{v: v}) - return mi -} - -func (db *DB) newIterator(auxm *memDB, auxt tFiles, seq uint64, slice *util.Range, ro *opt.ReadOptions) *dbIter { - var islice *util.Range - if slice != nil { - islice = &util.Range{} - if slice.Start != nil { - islice.Start = makeInternalKey(nil, slice.Start, keyMaxSeq, keyTypeSeek) - } - if slice.Limit != nil { - islice.Limit = makeInternalKey(nil, slice.Limit, keyMaxSeq, keyTypeSeek) - } - } - rawIter := db.newRawIterator(auxm, auxt, islice, ro) - iter := &dbIter{ - db: db, - icmp: db.s.icmp, - iter: rawIter, - seq: seq, - strict: opt.GetStrict(db.s.o.Options, ro, opt.StrictReader), - key: make([]byte, 0), - value: make([]byte, 0), - } - atomic.AddInt32(&db.aliveIters, 1) - runtime.SetFinalizer(iter, (*dbIter).Release) - return iter -} - -func (db *DB) iterSamplingRate() int { - return rand.Intn(2 * db.s.o.GetIteratorSamplingRate()) -} - -type dir int - -const ( - dirReleased dir = iota - 1 - dirSOI - dirEOI - dirBackward - dirForward -) - -// dbIter represent an interator states over a database session. -type dbIter struct { - db *DB - icmp *iComparer - iter iterator.Iterator - seq uint64 - strict bool - - smaplingGap int - dir dir - key []byte - value []byte - err error - releaser util.Releaser -} - -func (i *dbIter) sampleSeek() { - ikey := i.iter.Key() - i.smaplingGap -= len(ikey) + len(i.iter.Value()) - for i.smaplingGap < 0 { - i.smaplingGap += i.db.iterSamplingRate() - i.db.sampleSeek(ikey) - } -} - -func (i *dbIter) setErr(err error) { - i.err = err - i.key = nil - i.value = nil -} - -func (i *dbIter) iterErr() { - if err := i.iter.Error(); err != nil { - i.setErr(err) - } -} - -func (i *dbIter) Valid() bool { - return i.err == nil && i.dir > dirEOI -} - -func (i *dbIter) First() bool { - if i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - if i.iter.First() { - i.dir = dirSOI - return i.next() - } - i.dir = dirEOI - i.iterErr() - return false -} - -func (i *dbIter) Last() bool { - if i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - if i.iter.Last() { - return i.prev() - } - i.dir = dirSOI - i.iterErr() - return false -} - -func (i *dbIter) Seek(key []byte) bool { - if i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - ikey := makeInternalKey(nil, key, i.seq, keyTypeSeek) - if i.iter.Seek(ikey) { - i.dir = dirSOI - return i.next() - } - i.dir = dirEOI - i.iterErr() - return false -} - -func (i *dbIter) next() bool { - for { - if ukey, seq, kt, kerr := parseInternalKey(i.iter.Key()); kerr == nil { - i.sampleSeek() - if seq <= i.seq { - switch kt { - case keyTypeDel: - // Skip deleted key. - i.key = append(i.key[:0], ukey...) - i.dir = dirForward - case keyTypeVal: - if i.dir == dirSOI || i.icmp.uCompare(ukey, i.key) > 0 { - i.key = append(i.key[:0], ukey...) - i.value = append(i.value[:0], i.iter.Value()...) - i.dir = dirForward - return true - } - } - } - } else if i.strict { - i.setErr(kerr) - break - } - if !i.iter.Next() { - i.dir = dirEOI - i.iterErr() - break - } - } - return false -} - -func (i *dbIter) Next() bool { - if i.dir == dirEOI || i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - if !i.iter.Next() || (i.dir == dirBackward && !i.iter.Next()) { - i.dir = dirEOI - i.iterErr() - return false - } - return i.next() -} - -func (i *dbIter) prev() bool { - i.dir = dirBackward - del := true - if i.iter.Valid() { - for { - if ukey, seq, kt, kerr := parseInternalKey(i.iter.Key()); kerr == nil { - i.sampleSeek() - if seq <= i.seq { - if !del && i.icmp.uCompare(ukey, i.key) < 0 { - return true - } - del = (kt == keyTypeDel) - if !del { - i.key = append(i.key[:0], ukey...) - i.value = append(i.value[:0], i.iter.Value()...) - } - } - } else if i.strict { - i.setErr(kerr) - return false - } - if !i.iter.Prev() { - break - } - } - } - if del { - i.dir = dirSOI - i.iterErr() - return false - } - return true -} - -func (i *dbIter) Prev() bool { - if i.dir == dirSOI || i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - switch i.dir { - case dirEOI: - return i.Last() - case dirForward: - for i.iter.Prev() { - if ukey, _, _, kerr := parseInternalKey(i.iter.Key()); kerr == nil { - i.sampleSeek() - if i.icmp.uCompare(ukey, i.key) < 0 { - goto cont - } - } else if i.strict { - i.setErr(kerr) - return false - } - } - i.dir = dirSOI - i.iterErr() - return false - } - -cont: - return i.prev() -} - -func (i *dbIter) Key() []byte { - if i.err != nil || i.dir <= dirEOI { - return nil - } - return i.key -} - -func (i *dbIter) Value() []byte { - if i.err != nil || i.dir <= dirEOI { - return nil - } - return i.value -} - -func (i *dbIter) Release() { - if i.dir != dirReleased { - // Clear the finalizer. - runtime.SetFinalizer(i, nil) - - if i.releaser != nil { - i.releaser.Release() - i.releaser = nil - } - - i.dir = dirReleased - i.key = nil - i.value = nil - i.iter.Release() - i.iter = nil - atomic.AddInt32(&i.db.aliveIters, -1) - i.db = nil - } -} - -func (i *dbIter) SetReleaser(releaser util.Releaser) { - if i.dir == dirReleased { - panic(util.ErrReleased) - } - if i.releaser != nil && releaser != nil { - panic(util.ErrHasReleaser) - } - i.releaser = releaser -} - -func (i *dbIter) Error() error { - return i.err -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/db_snapshot.go b/vendor/github.com/pingcap/goleveldb/leveldb/db_snapshot.go deleted file mode 100644 index 6be4c3d..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/db_snapshot.go +++ /dev/null @@ -1,183 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "container/list" - "fmt" - "runtime" - "sync" - "sync/atomic" - - "github.com/pingcap/goleveldb/leveldb/iterator" - "github.com/pingcap/goleveldb/leveldb/opt" - "github.com/pingcap/goleveldb/leveldb/util" -) - -type snapshotElement struct { - seq uint64 - ref int - e *list.Element -} - -// Acquires a snapshot, based on latest sequence. -func (db *DB) acquireSnapshot() *snapshotElement { - db.snapsMu.Lock() - defer db.snapsMu.Unlock() - - seq := db.getSeq() - - if e := db.snapsList.Back(); e != nil { - se := e.Value.(*snapshotElement) - if se.seq == seq { - se.ref++ - return se - } else if seq < se.seq { - panic("leveldb: sequence number is not increasing") - } - } - se := &snapshotElement{seq: seq, ref: 1} - se.e = db.snapsList.PushBack(se) - return se -} - -// Releases given snapshot element. -func (db *DB) releaseSnapshot(se *snapshotElement) { - db.snapsMu.Lock() - defer db.snapsMu.Unlock() - - se.ref-- - if se.ref == 0 { - db.snapsList.Remove(se.e) - se.e = nil - } else if se.ref < 0 { - panic("leveldb: Snapshot: negative element reference") - } -} - -// Gets minimum sequence that not being snapshotted. -func (db *DB) minSeq() uint64 { - db.snapsMu.Lock() - defer db.snapsMu.Unlock() - - if e := db.snapsList.Front(); e != nil { - return e.Value.(*snapshotElement).seq - } - - return db.getSeq() -} - -// Snapshot is a DB snapshot. -type Snapshot struct { - db *DB - elem *snapshotElement - mu sync.RWMutex - released bool -} - -// Creates new snapshot object. -func (db *DB) newSnapshot() *Snapshot { - snap := &Snapshot{ - db: db, - elem: db.acquireSnapshot(), - } - atomic.AddInt32(&db.aliveSnaps, 1) - runtime.SetFinalizer(snap, (*Snapshot).Release) - return snap -} - -func (snap *Snapshot) String() string { - return fmt.Sprintf("leveldb.Snapshot{%d}", snap.elem.seq) -} - -// Get gets the value for the given key. It returns ErrNotFound if -// the DB does not contains the key. -// -// The caller should not modify the contents of the returned slice, but -// it is safe to modify the contents of the argument after Get returns. -func (snap *Snapshot) Get(key []byte, ro *opt.ReadOptions) (value []byte, err error) { - err = snap.db.ok() - if err != nil { - return - } - snap.mu.RLock() - defer snap.mu.RUnlock() - if snap.released { - err = ErrSnapshotReleased - return - } - return snap.db.get(nil, nil, key, snap.elem.seq, ro) -} - -// Has returns true if the DB does contains the given key. -// -// It is safe to modify the contents of the argument after Get returns. -func (snap *Snapshot) Has(key []byte, ro *opt.ReadOptions) (ret bool, err error) { - err = snap.db.ok() - if err != nil { - return - } - snap.mu.RLock() - defer snap.mu.RUnlock() - if snap.released { - err = ErrSnapshotReleased - return - } - return snap.db.has(nil, nil, key, snap.elem.seq, ro) -} - -// NewIterator returns an iterator for the snapshot of the underlying DB. -// The returned iterator is not safe for concurrent use, but it is safe to use -// multiple iterators concurrently, with each in a dedicated goroutine. -// It is also safe to use an iterator concurrently with modifying its -// underlying DB. The resultant key/value pairs are guaranteed to be -// consistent. -// -// Slice allows slicing the iterator to only contains keys in the given -// range. A nil Range.Start is treated as a key before all keys in the -// DB. And a nil Range.Limit is treated as a key after all keys in -// the DB. -// -// The iterator must be released after use, by calling Release method. -// Releasing the snapshot doesn't mean releasing the iterator too, the -// iterator would be still valid until released. -// -// Also read Iterator documentation of the leveldb/iterator package. -func (snap *Snapshot) NewIterator(slice *util.Range, ro *opt.ReadOptions) iterator.Iterator { - if err := snap.db.ok(); err != nil { - return iterator.NewEmptyIterator(err) - } - snap.mu.Lock() - defer snap.mu.Unlock() - if snap.released { - return iterator.NewEmptyIterator(ErrSnapshotReleased) - } - // Since iterator already hold version ref, it doesn't need to - // hold snapshot ref. - return snap.db.newIterator(nil, nil, snap.elem.seq, slice, ro) -} - -// Release releases the snapshot. This will not release any returned -// iterators, the iterators would still be valid until released or the -// underlying DB is closed. -// -// Other methods should not be called after the snapshot has been released. -func (snap *Snapshot) Release() { - snap.mu.Lock() - defer snap.mu.Unlock() - - if !snap.released { - // Clear the finalizer. - runtime.SetFinalizer(snap, nil) - - snap.released = true - snap.db.releaseSnapshot(snap.elem) - atomic.AddInt32(&snap.db.aliveSnaps, -1) - snap.db = nil - snap.elem = nil - } -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/db_state.go b/vendor/github.com/pingcap/goleveldb/leveldb/db_state.go deleted file mode 100644 index 7553a2d..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/db_state.go +++ /dev/null @@ -1,239 +0,0 @@ -// Copyright (c) 2013, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "errors" - "sync/atomic" - "time" - - "github.com/pingcap/goleveldb/leveldb/journal" - "github.com/pingcap/goleveldb/leveldb/memdb" - "github.com/pingcap/goleveldb/leveldb/storage" -) - -var ( - errHasFrozenMem = errors.New("has frozen mem") -) - -type memDB struct { - db *DB - *memdb.DB - ref int32 -} - -func (m *memDB) getref() int32 { - return atomic.LoadInt32(&m.ref) -} - -func (m *memDB) incref() { - atomic.AddInt32(&m.ref, 1) -} - -func (m *memDB) decref() { - if ref := atomic.AddInt32(&m.ref, -1); ref == 0 { - // Only put back memdb with std capacity. - if m.Capacity() == m.db.s.o.GetWriteBuffer() { - m.Reset() - m.db.mpoolPut(m.DB) - } - m.db = nil - m.DB = nil - } else if ref < 0 { - panic("negative memdb ref") - } -} - -// Get latest sequence number. -func (db *DB) getSeq() uint64 { - return atomic.LoadUint64(&db.seq) -} - -// Atomically adds delta to seq. -func (db *DB) addSeq(delta uint64) { - atomic.AddUint64(&db.seq, delta) -} - -func (db *DB) setSeq(seq uint64) { - atomic.StoreUint64(&db.seq, seq) -} - -func (db *DB) sampleSeek(ikey internalKey) { - v := db.s.version() - if v.sampleSeek(ikey) { - // Trigger table compaction. - db.compTrigger(db.tcompCmdC) - } - v.release() -} - -func (db *DB) mpoolPut(mem *memdb.DB) { - if !db.isClosed() { - select { - case db.memPool <- mem: - default: - } - } -} - -func (db *DB) mpoolGet(n int) *memDB { - var mdb *memdb.DB - select { - case mdb = <-db.memPool: - default: - } - if mdb == nil || mdb.Capacity() < n { - mdb = memdb.New(db.s.icmp, maxInt(db.s.o.GetWriteBuffer(), n)) - } - return &memDB{ - db: db, - DB: mdb, - } -} - -func (db *DB) mpoolDrain() { - ticker := time.NewTicker(30 * time.Second) - for { - select { - case <-ticker.C: - select { - case <-db.memPool: - default: - } - case <-db.closeC: - ticker.Stop() - // Make sure the pool is drained. - select { - case <-db.memPool: - case <-time.After(time.Second): - } - close(db.memPool) - return - } - } -} - -// Create new memdb and froze the old one; need external synchronization. -// newMem only called synchronously by the writer. -func (db *DB) newMem(n int) (mem *memDB, err error) { - fd := storage.FileDesc{Type: storage.TypeJournal, Num: db.s.allocFileNum()} - w, err := db.s.stor.Create(fd) - if err != nil { - db.s.reuseFileNum(fd.Num) - return - } - - db.memMu.Lock() - defer db.memMu.Unlock() - - if db.frozenMem != nil { - return nil, errHasFrozenMem - } - - if db.journal == nil { - db.journal = journal.NewWriter(w) - } else { - db.journal.Reset(w) - db.journalWriter.Close() - db.frozenJournalFd = db.journalFd - } - db.journalWriter = w - db.journalFd = fd - db.frozenMem = db.mem - mem = db.mpoolGet(n) - mem.incref() // for self - mem.incref() // for caller - db.mem = mem - // The seq only incremented by the writer. And whoever called newMem - // should hold write lock, so no need additional synchronization here. - db.frozenSeq = db.seq - return -} - -// Get all memdbs. -func (db *DB) getMems() (e, f *memDB) { - db.memMu.RLock() - defer db.memMu.RUnlock() - if db.mem != nil { - db.mem.incref() - } else if !db.isClosed() { - panic("nil effective mem") - } - if db.frozenMem != nil { - db.frozenMem.incref() - } - return db.mem, db.frozenMem -} - -// Get effective memdb. -func (db *DB) getEffectiveMem() *memDB { - db.memMu.RLock() - defer db.memMu.RUnlock() - if db.mem != nil { - db.mem.incref() - } else if !db.isClosed() { - panic("nil effective mem") - } - return db.mem -} - -// Check whether we has frozen memdb. -func (db *DB) hasFrozenMem() bool { - db.memMu.RLock() - defer db.memMu.RUnlock() - return db.frozenMem != nil -} - -// Get frozen memdb. -func (db *DB) getFrozenMem() *memDB { - db.memMu.RLock() - defer db.memMu.RUnlock() - if db.frozenMem != nil { - db.frozenMem.incref() - } - return db.frozenMem -} - -// Drop frozen memdb; assume that frozen memdb isn't nil. -func (db *DB) dropFrozenMem() { - db.memMu.Lock() - if err := db.s.stor.Remove(db.frozenJournalFd); err != nil { - db.logf("journal@remove removing @%d %q", db.frozenJournalFd.Num, err) - } else { - db.logf("journal@remove removed @%d", db.frozenJournalFd.Num) - } - db.frozenJournalFd = storage.FileDesc{} - db.frozenMem.decref() - db.frozenMem = nil - db.memMu.Unlock() -} - -// Clear mems ptr; used by DB.Close(). -func (db *DB) clearMems() { - db.memMu.Lock() - db.mem = nil - db.frozenMem = nil - db.memMu.Unlock() -} - -// Set closed flag; return true if not already closed. -func (db *DB) setClosed() bool { - return atomic.CompareAndSwapUint32(&db.closed, 0, 1) -} - -// Check whether DB was closed. -func (db *DB) isClosed() bool { - return atomic.LoadUint32(&db.closed) != 0 -} - -// Check read ok status. -func (db *DB) ok() error { - if db.isClosed() { - return ErrClosed - } - return nil -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/db_transaction.go b/vendor/github.com/pingcap/goleveldb/leveldb/db_transaction.go deleted file mode 100644 index 70e4389..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/db_transaction.go +++ /dev/null @@ -1,325 +0,0 @@ -// Copyright (c) 2016, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "errors" - "sync" - "time" - - "github.com/pingcap/goleveldb/leveldb/iterator" - "github.com/pingcap/goleveldb/leveldb/opt" - "github.com/pingcap/goleveldb/leveldb/util" -) - -var errTransactionDone = errors.New("leveldb: transaction already closed") - -// Transaction is the transaction handle. -type Transaction struct { - db *DB - lk sync.RWMutex - seq uint64 - mem *memDB - tables tFiles - ikScratch []byte - rec sessionRecord - stats cStatStaging - closed bool -} - -// Get gets the value for the given key. It returns ErrNotFound if the -// DB does not contains the key. -// -// The returned slice is its own copy, it is safe to modify the contents -// of the returned slice. -// It is safe to modify the contents of the argument after Get returns. -func (tr *Transaction) Get(key []byte, ro *opt.ReadOptions) ([]byte, error) { - tr.lk.RLock() - defer tr.lk.RUnlock() - if tr.closed { - return nil, errTransactionDone - } - return tr.db.get(tr.mem.DB, tr.tables, key, tr.seq, ro) -} - -// Has returns true if the DB does contains the given key. -// -// It is safe to modify the contents of the argument after Has returns. -func (tr *Transaction) Has(key []byte, ro *opt.ReadOptions) (bool, error) { - tr.lk.RLock() - defer tr.lk.RUnlock() - if tr.closed { - return false, errTransactionDone - } - return tr.db.has(tr.mem.DB, tr.tables, key, tr.seq, ro) -} - -// NewIterator returns an iterator for the latest snapshot of the transaction. -// The returned iterator is not safe for concurrent use, but it is safe to use -// multiple iterators concurrently, with each in a dedicated goroutine. -// It is also safe to use an iterator concurrently while writes to the -// transaction. The resultant key/value pairs are guaranteed to be consistent. -// -// Slice allows slicing the iterator to only contains keys in the given -// range. A nil Range.Start is treated as a key before all keys in the -// DB. And a nil Range.Limit is treated as a key after all keys in -// the DB. -// -// The iterator must be released after use, by calling Release method. -// -// Also read Iterator documentation of the leveldb/iterator package. -func (tr *Transaction) NewIterator(slice *util.Range, ro *opt.ReadOptions) iterator.Iterator { - tr.lk.RLock() - defer tr.lk.RUnlock() - if tr.closed { - return iterator.NewEmptyIterator(errTransactionDone) - } - tr.mem.incref() - return tr.db.newIterator(tr.mem, tr.tables, tr.seq, slice, ro) -} - -func (tr *Transaction) flush() error { - // Flush memdb. - if tr.mem.Len() != 0 { - tr.stats.startTimer() - iter := tr.mem.NewIterator(nil) - t, n, err := tr.db.s.tops.createFrom(iter) - iter.Release() - tr.stats.stopTimer() - if err != nil { - return err - } - if tr.mem.getref() == 1 { - tr.mem.Reset() - } else { - tr.mem.decref() - tr.mem = tr.db.mpoolGet(0) - tr.mem.incref() - } - tr.tables = append(tr.tables, t) - tr.rec.addTableFile(0, t) - tr.stats.write += t.size - tr.db.logf("transaction@flush created L0@%d N·%d S·%s %q:%q", t.fd.Num, n, shortenb(int(t.size)), t.imin, t.imax) - } - return nil -} - -func (tr *Transaction) put(kt keyType, key, value []byte) error { - tr.ikScratch = makeInternalKey(tr.ikScratch, key, tr.seq+1, kt) - if tr.mem.Free() < len(tr.ikScratch)+len(value) { - if err := tr.flush(); err != nil { - return err - } - } - if err := tr.mem.Put(tr.ikScratch, value); err != nil { - return err - } - tr.seq++ - return nil -} - -// Put sets the value for the given key. It overwrites any previous value -// for that key; a DB is not a multi-map. -// Please note that the transaction is not compacted until committed, so if you -// writes 10 same keys, then those 10 same keys are in the transaction. -// -// It is safe to modify the contents of the arguments after Put returns. -func (tr *Transaction) Put(key, value []byte, wo *opt.WriteOptions) error { - tr.lk.Lock() - defer tr.lk.Unlock() - if tr.closed { - return errTransactionDone - } - return tr.put(keyTypeVal, key, value) -} - -// Delete deletes the value for the given key. -// Please note that the transaction is not compacted until committed, so if you -// writes 10 same keys, then those 10 same keys are in the transaction. -// -// It is safe to modify the contents of the arguments after Delete returns. -func (tr *Transaction) Delete(key []byte, wo *opt.WriteOptions) error { - tr.lk.Lock() - defer tr.lk.Unlock() - if tr.closed { - return errTransactionDone - } - return tr.put(keyTypeDel, key, nil) -} - -// Write apply the given batch to the transaction. The batch will be applied -// sequentially. -// Please note that the transaction is not compacted until committed, so if you -// writes 10 same keys, then those 10 same keys are in the transaction. -// -// It is safe to modify the contents of the arguments after Write returns. -func (tr *Transaction) Write(b *Batch, wo *opt.WriteOptions) error { - if b == nil || b.Len() == 0 { - return nil - } - - tr.lk.Lock() - defer tr.lk.Unlock() - if tr.closed { - return errTransactionDone - } - return b.replayInternal(func(i int, kt keyType, k, v []byte) error { - return tr.put(kt, k, v) - }) -} - -func (tr *Transaction) setDone() { - tr.closed = true - tr.db.tr = nil - tr.mem.decref() - <-tr.db.writeLockC -} - -// Commit commits the transaction. If error is not nil, then the transaction is -// not committed, it can then either be retried or discarded. -// -// Other methods should not be called after transaction has been committed. -func (tr *Transaction) Commit() error { - if err := tr.db.ok(); err != nil { - return err - } - - tr.lk.Lock() - defer tr.lk.Unlock() - if tr.closed { - return errTransactionDone - } - if err := tr.flush(); err != nil { - // Return error, lets user decide either to retry or discard - // transaction. - return err - } - if len(tr.tables) != 0 { - // Committing transaction. - tr.rec.setSeqNum(tr.seq) - tr.db.compCommitLk.Lock() - tr.stats.startTimer() - var cerr error - for retry := 0; retry < 3; retry++ { - cerr = tr.db.s.commit(&tr.rec) - if cerr != nil { - tr.db.logf("transaction@commit error R·%d %q", retry, cerr) - select { - case <-time.After(time.Second): - case <-tr.db.closeC: - tr.db.logf("transaction@commit exiting") - tr.db.compCommitLk.Unlock() - return cerr - } - } else { - // Success. Set db.seq. - tr.db.setSeq(tr.seq) - break - } - } - tr.stats.stopTimer() - if cerr != nil { - // Return error, lets user decide either to retry or discard - // transaction. - return cerr - } - - // Update compaction stats. This is safe as long as we hold compCommitLk. - tr.db.compStats.addStat(0, &tr.stats) - - // Trigger table auto-compaction. - tr.db.compTrigger(tr.db.tcompCmdC) - tr.db.compCommitLk.Unlock() - - // Additionally, wait compaction when certain threshold reached. - // Ignore error, returns error only if transaction can't be committed. - tr.db.waitCompaction() - } - // Only mark as done if transaction committed successfully. - tr.setDone() - return nil -} - -func (tr *Transaction) discard() { - // Discard transaction. - for _, t := range tr.tables { - tr.db.logf("transaction@discard @%d", t.fd.Num) - if err1 := tr.db.s.stor.Remove(t.fd); err1 == nil { - tr.db.s.reuseFileNum(t.fd.Num) - } - } -} - -// Discard discards the transaction. -// -// Other methods should not be called after transaction has been discarded. -func (tr *Transaction) Discard() { - tr.lk.Lock() - if !tr.closed { - tr.discard() - tr.setDone() - } - tr.lk.Unlock() -} - -func (db *DB) waitCompaction() error { - if db.s.tLen(0) >= db.s.o.GetWriteL0PauseTrigger() { - return db.compTriggerWait(db.tcompCmdC) - } - return nil -} - -// OpenTransaction opens an atomic DB transaction. Only one transaction can be -// opened at a time. Subsequent call to Write and OpenTransaction will be blocked -// until in-flight transaction is committed or discarded. -// The returned transaction handle is safe for concurrent use. -// -// Transaction is expensive and can overwhelm compaction, especially if -// transaction size is small. Use with caution. -// -// The transaction must be closed once done, either by committing or discarding -// the transaction. -// Closing the DB will discard open transaction. -func (db *DB) OpenTransaction() (*Transaction, error) { - if err := db.ok(); err != nil { - return nil, err - } - - // The write happen synchronously. - select { - case db.writeLockC <- struct{}{}: - case err := <-db.compPerErrC: - return nil, err - case <-db.closeC: - return nil, ErrClosed - } - - if db.tr != nil { - panic("leveldb: has open transaction") - } - - // Flush current memdb. - if db.mem != nil && db.mem.Len() != 0 { - if _, err := db.rotateMem(0, true); err != nil { - return nil, err - } - } - - // Wait compaction when certain threshold reached. - if err := db.waitCompaction(); err != nil { - return nil, err - } - - tr := &Transaction{ - db: db, - seq: db.seq, - mem: db.mpoolGet(0), - } - tr.mem.incref() - db.tr = tr - return tr, nil -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/db_util.go b/vendor/github.com/pingcap/goleveldb/leveldb/db_util.go deleted file mode 100644 index ef781ad..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/db_util.go +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "github.com/pingcap/goleveldb/leveldb/errors" - "github.com/pingcap/goleveldb/leveldb/iterator" - "github.com/pingcap/goleveldb/leveldb/opt" - "github.com/pingcap/goleveldb/leveldb/storage" - "github.com/pingcap/goleveldb/leveldb/util" -) - -// Reader is the interface that wraps basic Get and NewIterator methods. -// This interface implemented by both DB and Snapshot. -type Reader interface { - Get(key []byte, ro *opt.ReadOptions) (value []byte, err error) - NewIterator(slice *util.Range, ro *opt.ReadOptions) iterator.Iterator -} - -// Sizes is list of size. -type Sizes []int64 - -// Sum returns sum of the sizes. -func (sizes Sizes) Sum() int64 { - var sum int64 - for _, size := range sizes { - sum += size - } - return sum -} - -// Logging. -func (db *DB) log(v ...interface{}) { db.s.log(v...) } -func (db *DB) logf(format string, v ...interface{}) { db.s.logf(format, v...) } - -// Check and clean files. -func (db *DB) checkAndCleanFiles() error { - v := db.s.version() - defer v.release() - - tmap := make(map[int64]bool) - for _, tables := range v.levels { - for _, t := range tables { - tmap[t.fd.Num] = false - } - } - - fds, err := db.s.stor.List(storage.TypeAll) - if err != nil { - return err - } - - var nt int - var rem []storage.FileDesc - for _, fd := range fds { - keep := true - switch fd.Type { - case storage.TypeManifest: - keep = fd.Num >= db.s.manifestFd.Num - case storage.TypeJournal: - if !db.frozenJournalFd.Zero() { - keep = fd.Num >= db.frozenJournalFd.Num - } else { - keep = fd.Num >= db.journalFd.Num - } - case storage.TypeTable: - _, keep = tmap[fd.Num] - if keep { - tmap[fd.Num] = true - nt++ - } - } - - if !keep { - rem = append(rem, fd) - } - } - - if nt != len(tmap) { - var mfds []storage.FileDesc - for num, present := range tmap { - if !present { - mfds = append(mfds, storage.FileDesc{storage.TypeTable, num}) - db.logf("db@janitor table missing @%d", num) - } - } - return errors.NewErrCorrupted(storage.FileDesc{}, &errors.ErrMissingFiles{Fds: mfds}) - } - - db.logf("db@janitor F·%d G·%d", len(fds), len(rem)) - for _, fd := range rem { - db.logf("db@janitor removing %s-%d", fd.Type, fd.Num) - if err := db.s.stor.Remove(fd); err != nil { - return err - } - } - return nil -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/db_write.go b/vendor/github.com/pingcap/goleveldb/leveldb/db_write.go deleted file mode 100644 index 72f27ee..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/db_write.go +++ /dev/null @@ -1,452 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "time" - - "github.com/pingcap/goleveldb/leveldb/memdb" - "github.com/pingcap/goleveldb/leveldb/opt" - "github.com/pingcap/goleveldb/leveldb/util" -) - -func (db *DB) writeJournal(batches []*Batch, seq uint64, sync bool) error { - wr, err := db.journal.Next() - if err != nil { - return err - } - if err := writeBatchesWithHeader(wr, batches, seq); err != nil { - return err - } - if err := db.journal.Flush(); err != nil { - return err - } - if sync { - return db.journalWriter.Sync() - } - return nil -} - -func (db *DB) rotateMem(n int, wait bool) (mem *memDB, err error) { - retryLimit := 3 -retry: - // Wait for pending memdb compaction. - err = db.compTriggerWait(db.mcompCmdC) - if err != nil { - return - } - retryLimit-- - - // Create new memdb and journal. - mem, err = db.newMem(n) - if err != nil { - if err == errHasFrozenMem { - if retryLimit <= 0 { - panic("BUG: still has frozen memdb") - } - goto retry - } - return - } - - // Schedule memdb compaction. - if wait { - err = db.compTriggerWait(db.mcompCmdC) - } else { - db.compTrigger(db.mcompCmdC) - } - return -} - -func (db *DB) flush(n int) (mdb *memDB, mdbFree int, err error) { - delayed := false - slowdownTrigger := db.s.o.GetWriteL0SlowdownTrigger() - pauseTrigger := db.s.o.GetWriteL0PauseTrigger() - flush := func() (retry bool) { - mdb = db.getEffectiveMem() - if mdb == nil { - err = ErrClosed - return false - } - defer func() { - if retry { - mdb.decref() - mdb = nil - } - }() - tLen := db.s.tLen(0) - mdbFree = mdb.Free() - switch { - case tLen >= slowdownTrigger && !delayed: - delayed = true - time.Sleep(time.Millisecond) - case mdbFree >= n: - return false - case tLen >= pauseTrigger: - delayed = true - err = db.compTriggerWait(db.tcompCmdC) - if err != nil { - return false - } - default: - // Allow memdb to grow if it has no entry. - if mdb.Len() == 0 { - mdbFree = n - } else { - mdb.decref() - mdb, err = db.rotateMem(n, false) - if err == nil { - mdbFree = mdb.Free() - } else { - mdbFree = 0 - } - } - return false - } - return true - } - start := time.Now() - for flush() { - } - if delayed { - db.writeDelay += time.Since(start) - db.writeDelayN++ - } else if db.writeDelayN > 0 { - db.logf("db@write was delayed N·%d T·%v", db.writeDelayN, db.writeDelay) - db.writeDelay = 0 - db.writeDelayN = 0 - } - return -} - -type writeMerge struct { - sync bool - batch *Batch - keyType keyType - key, value []byte -} - -func (db *DB) unlockWrite(overflow bool, merged int, err error) { - for i := 0; i < merged; i++ { - db.writeAckC <- err - } - if overflow { - // Pass lock to the next write (that failed to merge). - db.writeMergedC <- false - } else { - // Release lock. - <-db.writeLockC - } -} - -// ourBatch if defined should equal with batch. -func (db *DB) writeLocked(batch, ourBatch *Batch, merge, sync bool) error { - // Try to flush memdb. This method would also trying to throttle writes - // if it is too fast and compaction cannot catch-up. - mdb, mdbFree, err := db.flush(batch.internalLen) - if err != nil { - db.unlockWrite(false, 0, err) - return err - } - defer mdb.decref() - - var ( - overflow bool - merged int - batches = []*Batch{batch} - ) - - if merge { - // Merge limit. - var mergeLimit int - if batch.internalLen > 128<<10 { - mergeLimit = (1 << 20) - batch.internalLen - } else { - mergeLimit = 128 << 10 - } - mergeCap := mdbFree - batch.internalLen - if mergeLimit > mergeCap { - mergeLimit = mergeCap - } - - merge: - for mergeLimit > 0 { - select { - case incoming := <-db.writeMergeC: - if incoming.batch != nil { - // Merge batch. - if incoming.batch.internalLen > mergeLimit { - overflow = true - break merge - } - batches = append(batches, incoming.batch) - mergeLimit -= incoming.batch.internalLen - } else { - // Merge put. - internalLen := len(incoming.key) + len(incoming.value) + 8 - if internalLen > mergeLimit { - overflow = true - break merge - } - if ourBatch == nil { - ourBatch = db.batchPool.Get().(*Batch) - ourBatch.Reset() - batches = append(batches, ourBatch) - } - // We can use same batch since concurrent write doesn't - // guarantee write order. - ourBatch.appendRec(incoming.keyType, incoming.key, incoming.value) - mergeLimit -= internalLen - } - sync = sync || incoming.sync - merged++ - db.writeMergedC <- true - - default: - break merge - } - } - } - - // Seq number. - seq := db.seq + 1 - - // Write journal. - if err := db.writeJournal(batches, seq, sync); err != nil { - db.unlockWrite(overflow, merged, err) - return err - } - - // Put batches. - for _, batch := range batches { - if err := batch.putMem(seq, mdb.DB); err != nil { - panic(err) - } - seq += uint64(batch.Len()) - } - - // Incr seq number. - db.addSeq(uint64(batchesLen(batches))) - - // Rotate memdb if it's reach the threshold. - if batch.internalLen >= mdbFree { - db.rotateMem(0, false) - } - - db.unlockWrite(overflow, merged, nil) - return nil -} - -// Write apply the given batch to the DB. The batch records will be applied -// sequentially. Write might be used concurrently, when used concurrently and -// batch is small enough, write will try to merge the batches. Set NoWriteMerge -// option to true to disable write merge. -// -// It is safe to modify the contents of the arguments after Write returns but -// not before. Write will not modify content of the batch. -func (db *DB) Write(batch *Batch, wo *opt.WriteOptions) error { - if err := db.ok(); err != nil || batch == nil || batch.Len() == 0 { - return err - } - - // If the batch size is larger than write buffer, it may justified to write - // using transaction instead. Using transaction the batch will be written - // into tables directly, skipping the journaling. - if batch.internalLen > db.s.o.GetWriteBuffer() && !db.s.o.GetDisableLargeBatchTransaction() { - tr, err := db.OpenTransaction() - if err != nil { - return err - } - if err := tr.Write(batch, wo); err != nil { - tr.Discard() - return err - } - return tr.Commit() - } - - merge := !wo.GetNoWriteMerge() && !db.s.o.GetNoWriteMerge() - sync := wo.GetSync() && !db.s.o.GetNoSync() - - // Acquire write lock. - if merge { - select { - case db.writeMergeC <- writeMerge{sync: sync, batch: batch}: - if <-db.writeMergedC { - // Write is merged. - return <-db.writeAckC - } - // Write is not merged, the write lock is handed to us. Continue. - case db.writeLockC <- struct{}{}: - // Write lock acquired. - case err := <-db.compPerErrC: - // Compaction error. - return err - case <-db.closeC: - // Closed - return ErrClosed - } - } else { - select { - case db.writeLockC <- struct{}{}: - // Write lock acquired. - case err := <-db.compPerErrC: - // Compaction error. - return err - case <-db.closeC: - // Closed - return ErrClosed - } - } - - return db.writeLocked(batch, nil, merge, sync) -} - -func (db *DB) putRec(kt keyType, key, value []byte, wo *opt.WriteOptions) error { - if err := db.ok(); err != nil { - return err - } - - merge := !wo.GetNoWriteMerge() && !db.s.o.GetNoWriteMerge() - sync := wo.GetSync() && !db.s.o.GetNoSync() - - // Acquire write lock. - if merge { - select { - case db.writeMergeC <- writeMerge{sync: sync, keyType: kt, key: key, value: value}: - if <-db.writeMergedC { - // Write is merged. - return <-db.writeAckC - } - // Write is not merged, the write lock is handed to us. Continue. - case db.writeLockC <- struct{}{}: - // Write lock acquired. - case err := <-db.compPerErrC: - // Compaction error. - return err - case <-db.closeC: - // Closed - return ErrClosed - } - } else { - select { - case db.writeLockC <- struct{}{}: - // Write lock acquired. - case err := <-db.compPerErrC: - // Compaction error. - return err - case <-db.closeC: - // Closed - return ErrClosed - } - } - - batch := db.batchPool.Get().(*Batch) - batch.Reset() - batch.appendRec(kt, key, value) - return db.writeLocked(batch, batch, merge, sync) -} - -// Put sets the value for the given key. It overwrites any previous value -// for that key; a DB is not a multi-map. Write merge also applies for Put, see -// Write. -// -// It is safe to modify the contents of the arguments after Put returns but not -// before. -func (db *DB) Put(key, value []byte, wo *opt.WriteOptions) error { - return db.putRec(keyTypeVal, key, value, wo) -} - -// Delete deletes the value for the given key. Delete will not returns error if -// key doesn't exist. Write merge also applies for Delete, see Write. -// -// It is safe to modify the contents of the arguments after Delete returns but -// not before. -func (db *DB) Delete(key []byte, wo *opt.WriteOptions) error { - return db.putRec(keyTypeDel, key, nil, wo) -} - -func isMemOverlaps(icmp *iComparer, mem *memdb.DB, min, max []byte) bool { - iter := mem.NewIterator(nil) - defer iter.Release() - return (max == nil || (iter.First() && icmp.uCompare(max, internalKey(iter.Key()).ukey()) >= 0)) && - (min == nil || (iter.Last() && icmp.uCompare(min, internalKey(iter.Key()).ukey()) <= 0)) -} - -// CompactRange compacts the underlying DB for the given key range. -// In particular, deleted and overwritten versions are discarded, -// and the data is rearranged to reduce the cost of operations -// needed to access the data. This operation should typically only -// be invoked by users who understand the underlying implementation. -// -// A nil Range.Start is treated as a key before all keys in the DB. -// And a nil Range.Limit is treated as a key after all keys in the DB. -// Therefore if both is nil then it will compact entire DB. -func (db *DB) CompactRange(r util.Range) error { - if err := db.ok(); err != nil { - return err - } - - // Lock writer. - select { - case db.writeLockC <- struct{}{}: - case err := <-db.compPerErrC: - return err - case <-db.closeC: - return ErrClosed - } - - // Check for overlaps in memdb. - mdb := db.getEffectiveMem() - if mdb == nil { - return ErrClosed - } - defer mdb.decref() - if isMemOverlaps(db.s.icmp, mdb.DB, r.Start, r.Limit) { - // Memdb compaction. - if _, err := db.rotateMem(0, false); err != nil { - <-db.writeLockC - return err - } - <-db.writeLockC - if err := db.compTriggerWait(db.mcompCmdC); err != nil { - return err - } - } else { - <-db.writeLockC - } - - // Table compaction. - return db.compTriggerRange(db.tcompCmdC, -1, r.Start, r.Limit) -} - -// SetReadOnly makes DB read-only. It will stay read-only until reopened. -func (db *DB) SetReadOnly() error { - if err := db.ok(); err != nil { - return err - } - - // Lock writer. - select { - case db.writeLockC <- struct{}{}: - db.compWriteLocking = true - case err := <-db.compPerErrC: - return err - case <-db.closeC: - return ErrClosed - } - - // Set compaction read-only. - select { - case db.compErrSetC <- ErrReadOnly: - case perr := <-db.compPerErrC: - return perr - case <-db.closeC: - return ErrClosed - } - - return nil -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/doc.go b/vendor/github.com/pingcap/goleveldb/leveldb/doc.go deleted file mode 100644 index be768e5..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/doc.go +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Package leveldb provides implementation of LevelDB key/value database. -// -// Create or open a database: -// -// // The returned DB instance is safe for concurrent use. Which mean that all -// // DB's methods may be called concurrently from multiple goroutine. -// db, err := leveldb.OpenFile("path/to/db", nil) -// ... -// defer db.Close() -// ... -// -// Read or modify the database content: -// -// // Remember that the contents of the returned slice should not be modified. -// data, err := db.Get([]byte("key"), nil) -// ... -// err = db.Put([]byte("key"), []byte("value"), nil) -// ... -// err = db.Delete([]byte("key"), nil) -// ... -// -// Iterate over database content: -// -// iter := db.NewIterator(nil, nil) -// for iter.Next() { -// // Remember that the contents of the returned slice should not be modified, and -// // only valid until the next call to Next. -// key := iter.Key() -// value := iter.Value() -// ... -// } -// iter.Release() -// err = iter.Error() -// ... -// -// Iterate over subset of database content with a particular prefix: -// iter := db.NewIterator(util.BytesPrefix([]byte("foo-")), nil) -// for iter.Next() { -// // Use key/value. -// ... -// } -// iter.Release() -// err = iter.Error() -// ... -// -// Seek-then-Iterate: -// -// iter := db.NewIterator(nil, nil) -// for ok := iter.Seek(key); ok; ok = iter.Next() { -// // Use key/value. -// ... -// } -// iter.Release() -// err = iter.Error() -// ... -// -// Iterate over subset of database content: -// -// iter := db.NewIterator(&util.Range{Start: []byte("foo"), Limit: []byte("xoo")}, nil) -// for iter.Next() { -// // Use key/value. -// ... -// } -// iter.Release() -// err = iter.Error() -// ... -// -// Batch writes: -// -// batch := new(leveldb.Batch) -// batch.Put([]byte("foo"), []byte("value")) -// batch.Put([]byte("bar"), []byte("another value")) -// batch.Delete([]byte("baz")) -// err = db.Write(batch, nil) -// ... -// -// Use bloom filter: -// -// o := &opt.Options{ -// Filter: filter.NewBloomFilter(10), -// } -// db, err := leveldb.OpenFile("path/to/db", o) -// ... -// defer db.Close() -// ... -package leveldb diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/errors.go b/vendor/github.com/pingcap/goleveldb/leveldb/errors.go deleted file mode 100644 index 846b293..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/errors.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) 2014, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "github.com/pingcap/goleveldb/leveldb/errors" -) - -// Common errors. -var ( - ErrNotFound = errors.ErrNotFound - ErrReadOnly = errors.New("leveldb: read-only mode") - ErrSnapshotReleased = errors.New("leveldb: snapshot released") - ErrIterReleased = errors.New("leveldb: iterator released") - ErrClosed = errors.New("leveldb: closed") -) diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/errors/errors.go b/vendor/github.com/pingcap/goleveldb/leveldb/errors/errors.go deleted file mode 100644 index a43e491..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/errors/errors.go +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) 2014, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Package errors provides common error types used throughout leveldb. -package errors - -import ( - "errors" - "fmt" - - "github.com/pingcap/goleveldb/leveldb/storage" - "github.com/pingcap/goleveldb/leveldb/util" -) - -// Common errors. -var ( - ErrNotFound = New("leveldb: not found") - ErrReleased = util.ErrReleased - ErrHasReleaser = util.ErrHasReleaser -) - -// New returns an error that formats as the given text. -func New(text string) error { - return errors.New(text) -} - -// ErrCorrupted is the type that wraps errors that indicate corruption in -// the database. -type ErrCorrupted struct { - Fd storage.FileDesc - Err error -} - -func (e *ErrCorrupted) Error() string { - if !e.Fd.Zero() { - return fmt.Sprintf("%v [file=%v]", e.Err, e.Fd) - } - return e.Err.Error() -} - -// NewErrCorrupted creates new ErrCorrupted error. -func NewErrCorrupted(fd storage.FileDesc, err error) error { - return &ErrCorrupted{fd, err} -} - -// IsCorrupted returns a boolean indicating whether the error is indicating -// a corruption. -func IsCorrupted(err error) bool { - switch err.(type) { - case *ErrCorrupted: - return true - case *storage.ErrCorrupted: - return true - } - return false -} - -// ErrMissingFiles is the type that indicating a corruption due to missing -// files. ErrMissingFiles always wrapped with ErrCorrupted. -type ErrMissingFiles struct { - Fds []storage.FileDesc -} - -func (e *ErrMissingFiles) Error() string { return "file missing" } - -// SetFd sets 'file info' of the given error with the given file. -// Currently only ErrCorrupted is supported, otherwise will do nothing. -func SetFd(err error, fd storage.FileDesc) error { - switch x := err.(type) { - case *ErrCorrupted: - x.Fd = fd - return x - } - return err -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/filter.go b/vendor/github.com/pingcap/goleveldb/leveldb/filter.go deleted file mode 100644 index 7b2719a..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/filter.go +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "github.com/pingcap/goleveldb/leveldb/filter" -) - -type iFilter struct { - filter.Filter -} - -func (f iFilter) Contains(filter, key []byte) bool { - return f.Filter.Contains(filter, internalKey(key).ukey()) -} - -func (f iFilter) NewGenerator() filter.FilterGenerator { - return iFilterGenerator{f.Filter.NewGenerator()} -} - -type iFilterGenerator struct { - filter.FilterGenerator -} - -func (g iFilterGenerator) Add(key []byte) { - g.FilterGenerator.Add(internalKey(key).ukey()) -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/filter/bloom.go b/vendor/github.com/pingcap/goleveldb/leveldb/filter/bloom.go deleted file mode 100644 index dff45fa..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/filter/bloom.go +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package filter - -import ( - "github.com/pingcap/goleveldb/leveldb/util" -) - -func bloomHash(key []byte) uint32 { - return util.Hash(key, 0xbc9f1d34) -} - -type bloomFilter int - -// The bloom filter serializes its parameters and is backward compatible -// with respect to them. Therefor, its parameters are not added to its -// name. -func (bloomFilter) Name() string { - return "leveldb.BuiltinBloomFilter" -} - -func (f bloomFilter) Contains(filter, key []byte) bool { - nBytes := len(filter) - 1 - if nBytes < 1 { - return false - } - nBits := uint32(nBytes * 8) - - // Use the encoded k so that we can read filters generated by - // bloom filters created using different parameters. - k := filter[nBytes] - if k > 30 { - // Reserved for potentially new encodings for short bloom filters. - // Consider it a match. - return true - } - - kh := bloomHash(key) - delta := (kh >> 17) | (kh << 15) // Rotate right 17 bits - for j := uint8(0); j < k; j++ { - bitpos := kh % nBits - if (uint32(filter[bitpos/8]) & (1 << (bitpos % 8))) == 0 { - return false - } - kh += delta - } - return true -} - -func (f bloomFilter) NewGenerator() FilterGenerator { - // Round down to reduce probing cost a little bit. - k := uint8(f * 69 / 100) // 0.69 =~ ln(2) - if k < 1 { - k = 1 - } else if k > 30 { - k = 30 - } - return &bloomFilterGenerator{ - n: int(f), - k: k, - } -} - -type bloomFilterGenerator struct { - n int - k uint8 - - keyHashes []uint32 -} - -func (g *bloomFilterGenerator) Add(key []byte) { - // Use double-hashing to generate a sequence of hash values. - // See analysis in [Kirsch,Mitzenmacher 2006]. - g.keyHashes = append(g.keyHashes, bloomHash(key)) -} - -func (g *bloomFilterGenerator) Generate(b Buffer) { - // Compute bloom filter size (in both bits and bytes) - nBits := uint32(len(g.keyHashes) * g.n) - // For small n, we can see a very high false positive rate. Fix it - // by enforcing a minimum bloom filter length. - if nBits < 64 { - nBits = 64 - } - nBytes := (nBits + 7) / 8 - nBits = nBytes * 8 - - dest := b.Alloc(int(nBytes) + 1) - dest[nBytes] = g.k - for _, kh := range g.keyHashes { - delta := (kh >> 17) | (kh << 15) // Rotate right 17 bits - for j := uint8(0); j < g.k; j++ { - bitpos := kh % nBits - dest[bitpos/8] |= (1 << (bitpos % 8)) - kh += delta - } - } - - g.keyHashes = g.keyHashes[:0] -} - -// NewBloomFilter creates a new initialized bloom filter for given -// bitsPerKey. -// -// Since bitsPerKey is persisted individually for each bloom filter -// serialization, bloom filters are backwards compatible with respect to -// changing bitsPerKey. This means that no big performance penalty will -// be experienced when changing the parameter. See documentation for -// opt.Options.Filter for more information. -func NewBloomFilter(bitsPerKey int) Filter { - return bloomFilter(bitsPerKey) -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/filter/filter.go b/vendor/github.com/pingcap/goleveldb/leveldb/filter/filter.go deleted file mode 100644 index 7a925c5..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/filter/filter.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Package filter provides interface and implementation of probabilistic -// data structure. -// -// The filter is resposible for creating small filter from a set of keys. -// These filter will then used to test whether a key is a member of the set. -// In many cases, a filter can cut down the number of disk seeks from a -// handful to a single disk seek per DB.Get call. -package filter - -// Buffer is the interface that wraps basic Alloc, Write and WriteByte methods. -type Buffer interface { - // Alloc allocs n bytes of slice from the buffer. This also advancing - // write offset. - Alloc(n int) []byte - - // Write appends the contents of p to the buffer. - Write(p []byte) (n int, err error) - - // WriteByte appends the byte c to the buffer. - WriteByte(c byte) error -} - -// Filter is the filter. -type Filter interface { - // Name returns the name of this policy. - // - // Note that if the filter encoding changes in an incompatible way, - // the name returned by this method must be changed. Otherwise, old - // incompatible filters may be passed to methods of this type. - Name() string - - // NewGenerator creates a new filter generator. - NewGenerator() FilterGenerator - - // Contains returns true if the filter contains the given key. - // - // The filter are filters generated by the filter generator. - Contains(filter, key []byte) bool -} - -// FilterGenerator is the filter generator. -type FilterGenerator interface { - // Add adds a key to the filter generator. - // - // The key may become invalid after call to this method end, therefor - // key must be copied if implementation require keeping key for later - // use. The key should not modified directly, doing so may cause - // undefined results. - Add(key []byte) - - // Generate generates filters based on keys passed so far. After call - // to Generate the filter generator maybe resetted, depends on implementation. - Generate(b Buffer) -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/iterator/array_iter.go b/vendor/github.com/pingcap/goleveldb/leveldb/iterator/array_iter.go deleted file mode 100644 index 09dd872..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/iterator/array_iter.go +++ /dev/null @@ -1,184 +0,0 @@ -// Copyright (c) 2014, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package iterator - -import ( - "github.com/pingcap/goleveldb/leveldb/util" -) - -// BasicArray is the interface that wraps basic Len and Search method. -type BasicArray interface { - // Len returns length of the array. - Len() int - - // Search finds smallest index that point to a key that is greater - // than or equal to the given key. - Search(key []byte) int -} - -// Array is the interface that wraps BasicArray and basic Index method. -type Array interface { - BasicArray - - // Index returns key/value pair with index of i. - Index(i int) (key, value []byte) -} - -// Array is the interface that wraps BasicArray and basic Get method. -type ArrayIndexer interface { - BasicArray - - // Get returns a new data iterator with index of i. - Get(i int) Iterator -} - -type basicArrayIterator struct { - util.BasicReleaser - array BasicArray - pos int - err error -} - -func (i *basicArrayIterator) Valid() bool { - return i.pos >= 0 && i.pos < i.array.Len() && !i.Released() -} - -func (i *basicArrayIterator) First() bool { - if i.Released() { - i.err = ErrIterReleased - return false - } - - if i.array.Len() == 0 { - i.pos = -1 - return false - } - i.pos = 0 - return true -} - -func (i *basicArrayIterator) Last() bool { - if i.Released() { - i.err = ErrIterReleased - return false - } - - n := i.array.Len() - if n == 0 { - i.pos = 0 - return false - } - i.pos = n - 1 - return true -} - -func (i *basicArrayIterator) Seek(key []byte) bool { - if i.Released() { - i.err = ErrIterReleased - return false - } - - n := i.array.Len() - if n == 0 { - i.pos = 0 - return false - } - i.pos = i.array.Search(key) - if i.pos >= n { - return false - } - return true -} - -func (i *basicArrayIterator) Next() bool { - if i.Released() { - i.err = ErrIterReleased - return false - } - - i.pos++ - if n := i.array.Len(); i.pos >= n { - i.pos = n - return false - } - return true -} - -func (i *basicArrayIterator) Prev() bool { - if i.Released() { - i.err = ErrIterReleased - return false - } - - i.pos-- - if i.pos < 0 { - i.pos = -1 - return false - } - return true -} - -func (i *basicArrayIterator) Error() error { return i.err } - -type arrayIterator struct { - basicArrayIterator - array Array - pos int - key, value []byte -} - -func (i *arrayIterator) updateKV() { - if i.pos == i.basicArrayIterator.pos { - return - } - i.pos = i.basicArrayIterator.pos - if i.Valid() { - i.key, i.value = i.array.Index(i.pos) - } else { - i.key = nil - i.value = nil - } -} - -func (i *arrayIterator) Key() []byte { - i.updateKV() - return i.key -} - -func (i *arrayIterator) Value() []byte { - i.updateKV() - return i.value -} - -type arrayIteratorIndexer struct { - basicArrayIterator - array ArrayIndexer -} - -func (i *arrayIteratorIndexer) Get() Iterator { - if i.Valid() { - return i.array.Get(i.basicArrayIterator.pos) - } - return nil -} - -// NewArrayIterator returns an iterator from the given array. -func NewArrayIterator(array Array) Iterator { - return &arrayIterator{ - basicArrayIterator: basicArrayIterator{array: array, pos: -1}, - array: array, - pos: -1, - } -} - -// NewArrayIndexer returns an index iterator from the given array. -func NewArrayIndexer(array ArrayIndexer) IteratorIndexer { - return &arrayIteratorIndexer{ - basicArrayIterator: basicArrayIterator{array: array, pos: -1}, - array: array, - } -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/iterator/indexed_iter.go b/vendor/github.com/pingcap/goleveldb/leveldb/iterator/indexed_iter.go deleted file mode 100644 index 1a887bf..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/iterator/indexed_iter.go +++ /dev/null @@ -1,242 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package iterator - -import ( - "github.com/pingcap/goleveldb/leveldb/errors" - "github.com/pingcap/goleveldb/leveldb/util" -) - -// IteratorIndexer is the interface that wraps CommonIterator and basic Get -// method. IteratorIndexer provides index for indexed iterator. -type IteratorIndexer interface { - CommonIterator - - // Get returns a new data iterator for the current position, or nil if - // done. - Get() Iterator -} - -type indexedIterator struct { - util.BasicReleaser - index IteratorIndexer - strict bool - - data Iterator - err error - errf func(err error) - closed bool -} - -func (i *indexedIterator) setData() { - if i.data != nil { - i.data.Release() - } - i.data = i.index.Get() -} - -func (i *indexedIterator) clearData() { - if i.data != nil { - i.data.Release() - } - i.data = nil -} - -func (i *indexedIterator) indexErr() { - if err := i.index.Error(); err != nil { - if i.errf != nil { - i.errf(err) - } - i.err = err - } -} - -func (i *indexedIterator) dataErr() bool { - if err := i.data.Error(); err != nil { - if i.errf != nil { - i.errf(err) - } - if i.strict || !errors.IsCorrupted(err) { - i.err = err - return true - } - } - return false -} - -func (i *indexedIterator) Valid() bool { - return i.data != nil && i.data.Valid() -} - -func (i *indexedIterator) First() bool { - if i.err != nil { - return false - } else if i.Released() { - i.err = ErrIterReleased - return false - } - - if !i.index.First() { - i.indexErr() - i.clearData() - return false - } - i.setData() - return i.Next() -} - -func (i *indexedIterator) Last() bool { - if i.err != nil { - return false - } else if i.Released() { - i.err = ErrIterReleased - return false - } - - if !i.index.Last() { - i.indexErr() - i.clearData() - return false - } - i.setData() - if !i.data.Last() { - if i.dataErr() { - return false - } - i.clearData() - return i.Prev() - } - return true -} - -func (i *indexedIterator) Seek(key []byte) bool { - if i.err != nil { - return false - } else if i.Released() { - i.err = ErrIterReleased - return false - } - - if !i.index.Seek(key) { - i.indexErr() - i.clearData() - return false - } - i.setData() - if !i.data.Seek(key) { - if i.dataErr() { - return false - } - i.clearData() - return i.Next() - } - return true -} - -func (i *indexedIterator) Next() bool { - if i.err != nil { - return false - } else if i.Released() { - i.err = ErrIterReleased - return false - } - - switch { - case i.data != nil && !i.data.Next(): - if i.dataErr() { - return false - } - i.clearData() - fallthrough - case i.data == nil: - if !i.index.Next() { - i.indexErr() - return false - } - i.setData() - return i.Next() - } - return true -} - -func (i *indexedIterator) Prev() bool { - if i.err != nil { - return false - } else if i.Released() { - i.err = ErrIterReleased - return false - } - - switch { - case i.data != nil && !i.data.Prev(): - if i.dataErr() { - return false - } - i.clearData() - fallthrough - case i.data == nil: - if !i.index.Prev() { - i.indexErr() - return false - } - i.setData() - if !i.data.Last() { - if i.dataErr() { - return false - } - i.clearData() - return i.Prev() - } - } - return true -} - -func (i *indexedIterator) Key() []byte { - if i.data == nil { - return nil - } - return i.data.Key() -} - -func (i *indexedIterator) Value() []byte { - if i.data == nil { - return nil - } - return i.data.Value() -} - -func (i *indexedIterator) Release() { - i.clearData() - i.index.Release() - i.BasicReleaser.Release() -} - -func (i *indexedIterator) Error() error { - if i.err != nil { - return i.err - } - if err := i.index.Error(); err != nil { - return err - } - return nil -} - -func (i *indexedIterator) SetErrorCallback(f func(err error)) { - i.errf = f -} - -// NewIndexedIterator returns an 'indexed iterator'. An index is iterator -// that returns another iterator, a 'data iterator'. A 'data iterator' is the -// iterator that contains actual key/value pairs. -// -// If strict is true the any 'corruption errors' (i.e errors.IsCorrupted(err) == true) -// won't be ignored and will halt 'indexed iterator', otherwise the iterator will -// continue to the next 'data iterator'. Corruption on 'index iterator' will not be -// ignored and will halt the iterator. -func NewIndexedIterator(index IteratorIndexer, strict bool) Iterator { - return &indexedIterator{index: index, strict: strict} -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/iterator/iter.go b/vendor/github.com/pingcap/goleveldb/leveldb/iterator/iter.go deleted file mode 100644 index 76ea0b9..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/iterator/iter.go +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Package iterator provides interface and implementation to traverse over -// contents of a database. -package iterator - -import ( - "errors" - - "github.com/pingcap/goleveldb/leveldb/util" -) - -var ( - ErrIterReleased = errors.New("leveldb/iterator: iterator released") -) - -// IteratorSeeker is the interface that wraps the 'seeks method'. -type IteratorSeeker interface { - // First moves the iterator to the first key/value pair. If the iterator - // only contains one key/value pair then First and Last would moves - // to the same key/value pair. - // It returns whether such pair exist. - First() bool - - // Last moves the iterator to the last key/value pair. If the iterator - // only contains one key/value pair then First and Last would moves - // to the same key/value pair. - // It returns whether such pair exist. - Last() bool - - // Seek moves the iterator to the first key/value pair whose key is greater - // than or equal to the given key. - // It returns whether such pair exist. - // - // It is safe to modify the contents of the argument after Seek returns. - Seek(key []byte) bool - - // Next moves the iterator to the next key/value pair. - // It returns whether the iterator is exhausted. - Next() bool - - // Prev moves the iterator to the previous key/value pair. - // It returns whether the iterator is exhausted. - Prev() bool -} - -// CommonIterator is the interface that wraps common iterator methods. -type CommonIterator interface { - IteratorSeeker - - // util.Releaser is the interface that wraps basic Release method. - // When called Release will releases any resources associated with the - // iterator. - util.Releaser - - // util.ReleaseSetter is the interface that wraps the basic SetReleaser - // method. - util.ReleaseSetter - - // TODO: Remove this when ready. - Valid() bool - - // Error returns any accumulated error. Exhausting all the key/value pairs - // is not considered to be an error. - Error() error -} - -// Iterator iterates over a DB's key/value pairs in key order. -// -// When encounter an error any 'seeks method' will return false and will -// yield no key/value pairs. The error can be queried by calling the Error -// method. Calling Release is still necessary. -// -// An iterator must be released after use, but it is not necessary to read -// an iterator until exhaustion. -// Also, an iterator is not necessarily safe for concurrent use, but it is -// safe to use multiple iterators concurrently, with each in a dedicated -// goroutine. -type Iterator interface { - CommonIterator - - // Key returns the key of the current key/value pair, or nil if done. - // The caller should not modify the contents of the returned slice, and - // its contents may change on the next call to any 'seeks method'. - Key() []byte - - // Value returns the key of the current key/value pair, or nil if done. - // The caller should not modify the contents of the returned slice, and - // its contents may change on the next call to any 'seeks method'. - Value() []byte -} - -// ErrorCallbackSetter is the interface that wraps basic SetErrorCallback -// method. -// -// ErrorCallbackSetter implemented by indexed and merged iterator. -type ErrorCallbackSetter interface { - // SetErrorCallback allows set an error callback of the corresponding - // iterator. Use nil to clear the callback. - SetErrorCallback(f func(err error)) -} - -type emptyIterator struct { - util.BasicReleaser - err error -} - -func (i *emptyIterator) rErr() { - if i.err == nil && i.Released() { - i.err = ErrIterReleased - } -} - -func (*emptyIterator) Valid() bool { return false } -func (i *emptyIterator) First() bool { i.rErr(); return false } -func (i *emptyIterator) Last() bool { i.rErr(); return false } -func (i *emptyIterator) Seek(key []byte) bool { i.rErr(); return false } -func (i *emptyIterator) Next() bool { i.rErr(); return false } -func (i *emptyIterator) Prev() bool { i.rErr(); return false } -func (*emptyIterator) Key() []byte { return nil } -func (*emptyIterator) Value() []byte { return nil } -func (i *emptyIterator) Error() error { return i.err } - -// NewEmptyIterator creates an empty iterator. The err parameter can be -// nil, but if not nil the given err will be returned by Error method. -func NewEmptyIterator(err error) Iterator { - return &emptyIterator{err: err} -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/iterator/merged_iter.go b/vendor/github.com/pingcap/goleveldb/leveldb/iterator/merged_iter.go deleted file mode 100644 index 5b6c772..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/iterator/merged_iter.go +++ /dev/null @@ -1,304 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package iterator - -import ( - "github.com/pingcap/goleveldb/leveldb/comparer" - "github.com/pingcap/goleveldb/leveldb/errors" - "github.com/pingcap/goleveldb/leveldb/util" -) - -type dir int - -const ( - dirReleased dir = iota - 1 - dirSOI - dirEOI - dirBackward - dirForward -) - -type mergedIterator struct { - cmp comparer.Comparer - iters []Iterator - strict bool - - keys [][]byte - index int - dir dir - err error - errf func(err error) - releaser util.Releaser -} - -func assertKey(key []byte) []byte { - if key == nil { - panic("leveldb/iterator: nil key") - } - return key -} - -func (i *mergedIterator) iterErr(iter Iterator) bool { - if err := iter.Error(); err != nil { - if i.errf != nil { - i.errf(err) - } - if i.strict || !errors.IsCorrupted(err) { - i.err = err - return true - } - } - return false -} - -func (i *mergedIterator) Valid() bool { - return i.err == nil && i.dir > dirEOI -} - -func (i *mergedIterator) First() bool { - if i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - for x, iter := range i.iters { - switch { - case iter.First(): - i.keys[x] = assertKey(iter.Key()) - case i.iterErr(iter): - return false - default: - i.keys[x] = nil - } - } - i.dir = dirSOI - return i.next() -} - -func (i *mergedIterator) Last() bool { - if i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - for x, iter := range i.iters { - switch { - case iter.Last(): - i.keys[x] = assertKey(iter.Key()) - case i.iterErr(iter): - return false - default: - i.keys[x] = nil - } - } - i.dir = dirEOI - return i.prev() -} - -func (i *mergedIterator) Seek(key []byte) bool { - if i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - for x, iter := range i.iters { - switch { - case iter.Seek(key): - i.keys[x] = assertKey(iter.Key()) - case i.iterErr(iter): - return false - default: - i.keys[x] = nil - } - } - i.dir = dirSOI - return i.next() -} - -func (i *mergedIterator) next() bool { - var key []byte - if i.dir == dirForward { - key = i.keys[i.index] - } - for x, tkey := range i.keys { - if tkey != nil && (key == nil || i.cmp.Compare(tkey, key) < 0) { - key = tkey - i.index = x - } - } - if key == nil { - i.dir = dirEOI - return false - } - i.dir = dirForward - return true -} - -func (i *mergedIterator) Next() bool { - if i.dir == dirEOI || i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - switch i.dir { - case dirSOI: - return i.First() - case dirBackward: - key := append([]byte{}, i.keys[i.index]...) - if !i.Seek(key) { - return false - } - return i.Next() - } - - x := i.index - iter := i.iters[x] - switch { - case iter.Next(): - i.keys[x] = assertKey(iter.Key()) - case i.iterErr(iter): - return false - default: - i.keys[x] = nil - } - return i.next() -} - -func (i *mergedIterator) prev() bool { - var key []byte - if i.dir == dirBackward { - key = i.keys[i.index] - } - for x, tkey := range i.keys { - if tkey != nil && (key == nil || i.cmp.Compare(tkey, key) > 0) { - key = tkey - i.index = x - } - } - if key == nil { - i.dir = dirSOI - return false - } - i.dir = dirBackward - return true -} - -func (i *mergedIterator) Prev() bool { - if i.dir == dirSOI || i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - switch i.dir { - case dirEOI: - return i.Last() - case dirForward: - key := append([]byte{}, i.keys[i.index]...) - for x, iter := range i.iters { - if x == i.index { - continue - } - seek := iter.Seek(key) - switch { - case seek && iter.Prev(), !seek && iter.Last(): - i.keys[x] = assertKey(iter.Key()) - case i.iterErr(iter): - return false - default: - i.keys[x] = nil - } - } - } - - x := i.index - iter := i.iters[x] - switch { - case iter.Prev(): - i.keys[x] = assertKey(iter.Key()) - case i.iterErr(iter): - return false - default: - i.keys[x] = nil - } - return i.prev() -} - -func (i *mergedIterator) Key() []byte { - if i.err != nil || i.dir <= dirEOI { - return nil - } - return i.keys[i.index] -} - -func (i *mergedIterator) Value() []byte { - if i.err != nil || i.dir <= dirEOI { - return nil - } - return i.iters[i.index].Value() -} - -func (i *mergedIterator) Release() { - if i.dir != dirReleased { - i.dir = dirReleased - for _, iter := range i.iters { - iter.Release() - } - i.iters = nil - i.keys = nil - if i.releaser != nil { - i.releaser.Release() - i.releaser = nil - } - } -} - -func (i *mergedIterator) SetReleaser(releaser util.Releaser) { - if i.dir == dirReleased { - panic(util.ErrReleased) - } - if i.releaser != nil && releaser != nil { - panic(util.ErrHasReleaser) - } - i.releaser = releaser -} - -func (i *mergedIterator) Error() error { - return i.err -} - -func (i *mergedIterator) SetErrorCallback(f func(err error)) { - i.errf = f -} - -// NewMergedIterator returns an iterator that merges its input. Walking the -// resultant iterator will return all key/value pairs of all input iterators -// in strictly increasing key order, as defined by cmp. -// The input's key ranges may overlap, but there are assumed to be no duplicate -// keys: if iters[i] contains a key k then iters[j] will not contain that key k. -// None of the iters may be nil. -// -// If strict is true the any 'corruption errors' (i.e errors.IsCorrupted(err) == true) -// won't be ignored and will halt 'merged iterator', otherwise the iterator will -// continue to the next 'input iterator'. -func NewMergedIterator(iters []Iterator, cmp comparer.Comparer, strict bool) Iterator { - return &mergedIterator{ - iters: iters, - cmp: cmp, - strict: strict, - keys: make([][]byte, len(iters)), - } -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/journal/journal.go b/vendor/github.com/pingcap/goleveldb/leveldb/journal/journal.go deleted file mode 100644 index b7dcb45..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/journal/journal.go +++ /dev/null @@ -1,524 +0,0 @@ -// Copyright 2011 The LevelDB-Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Taken from: https://code.google.com/p/leveldb-go/source/browse/leveldb/record/record.go?r=1d5ccbe03246da926391ee12d1c6caae054ff4b0 -// License, authors and contributors informations can be found at bellow URLs respectively: -// https://code.google.com/p/leveldb-go/source/browse/LICENSE -// https://code.google.com/p/leveldb-go/source/browse/AUTHORS -// https://code.google.com/p/leveldb-go/source/browse/CONTRIBUTORS - -// Package journal reads and writes sequences of journals. Each journal is a stream -// of bytes that completes before the next journal starts. -// -// When reading, call Next to obtain an io.Reader for the next journal. Next will -// return io.EOF when there are no more journals. It is valid to call Next -// without reading the current journal to exhaustion. -// -// When writing, call Next to obtain an io.Writer for the next journal. Calling -// Next finishes the current journal. Call Close to finish the final journal. -// -// Optionally, call Flush to finish the current journal and flush the underlying -// writer without starting a new journal. To start a new journal after flushing, -// call Next. -// -// Neither Readers or Writers are safe to use concurrently. -// -// Example code: -// func read(r io.Reader) ([]string, error) { -// var ss []string -// journals := journal.NewReader(r, nil, true, true) -// for { -// j, err := journals.Next() -// if err == io.EOF { -// break -// } -// if err != nil { -// return nil, err -// } -// s, err := ioutil.ReadAll(j) -// if err != nil { -// return nil, err -// } -// ss = append(ss, string(s)) -// } -// return ss, nil -// } -// -// func write(w io.Writer, ss []string) error { -// journals := journal.NewWriter(w) -// for _, s := range ss { -// j, err := journals.Next() -// if err != nil { -// return err -// } -// if _, err := j.Write([]byte(s)), err != nil { -// return err -// } -// } -// return journals.Close() -// } -// -// The wire format is that the stream is divided into 32KiB blocks, and each -// block contains a number of tightly packed chunks. Chunks cannot cross block -// boundaries. The last block may be shorter than 32 KiB. Any unused bytes in a -// block must be zero. -// -// A journal maps to one or more chunks. Each chunk has a 7 byte header (a 4 -// byte checksum, a 2 byte little-endian uint16 length, and a 1 byte chunk type) -// followed by a payload. The checksum is over the chunk type and the payload. -// -// There are four chunk types: whether the chunk is the full journal, or the -// first, middle or last chunk of a multi-chunk journal. A multi-chunk journal -// has one first chunk, zero or more middle chunks, and one last chunk. -// -// The wire format allows for limited recovery in the face of data corruption: -// on a format error (such as a checksum mismatch), the reader moves to the -// next block and looks for the next full or first chunk. -package journal - -import ( - "encoding/binary" - "fmt" - "io" - - "github.com/pingcap/goleveldb/leveldb/errors" - "github.com/pingcap/goleveldb/leveldb/storage" - "github.com/pingcap/goleveldb/leveldb/util" -) - -// These constants are part of the wire format and should not be changed. -const ( - fullChunkType = 1 - firstChunkType = 2 - middleChunkType = 3 - lastChunkType = 4 -) - -const ( - blockSize = 32 * 1024 - headerSize = 7 -) - -type flusher interface { - Flush() error -} - -// ErrCorrupted is the error type that generated by corrupted block or chunk. -type ErrCorrupted struct { - Size int - Reason string -} - -func (e *ErrCorrupted) Error() string { - return fmt.Sprintf("leveldb/journal: block/chunk corrupted: %s (%d bytes)", e.Reason, e.Size) -} - -// Dropper is the interface that wrap simple Drop method. The Drop -// method will be called when the journal reader dropping a block or chunk. -type Dropper interface { - Drop(err error) -} - -// Reader reads journals from an underlying io.Reader. -type Reader struct { - // r is the underlying reader. - r io.Reader - // the dropper. - dropper Dropper - // strict flag. - strict bool - // checksum flag. - checksum bool - // seq is the sequence number of the current journal. - seq int - // buf[i:j] is the unread portion of the current chunk's payload. - // The low bound, i, excludes the chunk header. - i, j int - // n is the number of bytes of buf that are valid. Once reading has started, - // only the final block can have n < blockSize. - n int - // last is whether the current chunk is the last chunk of the journal. - last bool - // err is any accumulated error. - err error - // buf is the buffer. - buf [blockSize]byte -} - -// NewReader returns a new reader. The dropper may be nil, and if -// strict is true then corrupted or invalid chunk will halt the journal -// reader entirely. -func NewReader(r io.Reader, dropper Dropper, strict, checksum bool) *Reader { - return &Reader{ - r: r, - dropper: dropper, - strict: strict, - checksum: checksum, - last: true, - } -} - -var errSkip = errors.New("leveldb/journal: skipped") - -func (r *Reader) corrupt(n int, reason string, skip bool) error { - if r.dropper != nil { - r.dropper.Drop(&ErrCorrupted{n, reason}) - } - if r.strict && !skip { - r.err = errors.NewErrCorrupted(storage.FileDesc{}, &ErrCorrupted{n, reason}) - return r.err - } - return errSkip -} - -// nextChunk sets r.buf[r.i:r.j] to hold the next chunk's payload, reading the -// next block into the buffer if necessary. -func (r *Reader) nextChunk(first bool) error { - for { - if r.j+headerSize <= r.n { - checksum := binary.LittleEndian.Uint32(r.buf[r.j+0 : r.j+4]) - length := binary.LittleEndian.Uint16(r.buf[r.j+4 : r.j+6]) - chunkType := r.buf[r.j+6] - unprocBlock := r.n - r.j - if checksum == 0 && length == 0 && chunkType == 0 { - // Drop entire block. - r.i = r.n - r.j = r.n - return r.corrupt(unprocBlock, "zero header", false) - } - if chunkType < fullChunkType || chunkType > lastChunkType { - // Drop entire block. - r.i = r.n - r.j = r.n - return r.corrupt(unprocBlock, fmt.Sprintf("invalid chunk type %#x", chunkType), false) - } - r.i = r.j + headerSize - r.j = r.j + headerSize + int(length) - if r.j > r.n { - // Drop entire block. - r.i = r.n - r.j = r.n - return r.corrupt(unprocBlock, "chunk length overflows block", false) - } else if r.checksum && checksum != util.NewCRC(r.buf[r.i-1:r.j]).Value() { - // Drop entire block. - r.i = r.n - r.j = r.n - return r.corrupt(unprocBlock, "checksum mismatch", false) - } - if first && chunkType != fullChunkType && chunkType != firstChunkType { - chunkLength := (r.j - r.i) + headerSize - r.i = r.j - // Report the error, but skip it. - return r.corrupt(chunkLength, "orphan chunk", true) - } - r.last = chunkType == fullChunkType || chunkType == lastChunkType - return nil - } - - // The last block. - if r.n < blockSize && r.n > 0 { - if !first { - return r.corrupt(0, "missing chunk part", false) - } - r.err = io.EOF - return r.err - } - - // Read block. - n, err := io.ReadFull(r.r, r.buf[:]) - if err != nil && err != io.EOF && err != io.ErrUnexpectedEOF { - return err - } - if n == 0 { - if !first { - return r.corrupt(0, "missing chunk part", false) - } - r.err = io.EOF - return r.err - } - r.i, r.j, r.n = 0, 0, n - } -} - -// Next returns a reader for the next journal. It returns io.EOF if there are no -// more journals. The reader returned becomes stale after the next Next call, -// and should no longer be used. If strict is false, the reader will returns -// io.ErrUnexpectedEOF error when found corrupted journal. -func (r *Reader) Next() (io.Reader, error) { - r.seq++ - if r.err != nil { - return nil, r.err - } - r.i = r.j - for { - if err := r.nextChunk(true); err == nil { - break - } else if err != errSkip { - return nil, err - } - } - return &singleReader{r, r.seq, nil}, nil -} - -// Reset resets the journal reader, allows reuse of the journal reader. Reset returns -// last accumulated error. -func (r *Reader) Reset(reader io.Reader, dropper Dropper, strict, checksum bool) error { - r.seq++ - err := r.err - r.r = reader - r.dropper = dropper - r.strict = strict - r.checksum = checksum - r.i = 0 - r.j = 0 - r.n = 0 - r.last = true - r.err = nil - return err -} - -type singleReader struct { - r *Reader - seq int - err error -} - -func (x *singleReader) Read(p []byte) (int, error) { - r := x.r - if r.seq != x.seq { - return 0, errors.New("leveldb/journal: stale reader") - } - if x.err != nil { - return 0, x.err - } - if r.err != nil { - return 0, r.err - } - for r.i == r.j { - if r.last { - return 0, io.EOF - } - x.err = r.nextChunk(false) - if x.err != nil { - if x.err == errSkip { - x.err = io.ErrUnexpectedEOF - } - return 0, x.err - } - } - n := copy(p, r.buf[r.i:r.j]) - r.i += n - return n, nil -} - -func (x *singleReader) ReadByte() (byte, error) { - r := x.r - if r.seq != x.seq { - return 0, errors.New("leveldb/journal: stale reader") - } - if x.err != nil { - return 0, x.err - } - if r.err != nil { - return 0, r.err - } - for r.i == r.j { - if r.last { - return 0, io.EOF - } - x.err = r.nextChunk(false) - if x.err != nil { - if x.err == errSkip { - x.err = io.ErrUnexpectedEOF - } - return 0, x.err - } - } - c := r.buf[r.i] - r.i++ - return c, nil -} - -// Writer writes journals to an underlying io.Writer. -type Writer struct { - // w is the underlying writer. - w io.Writer - // seq is the sequence number of the current journal. - seq int - // f is w as a flusher. - f flusher - // buf[i:j] is the bytes that will become the current chunk. - // The low bound, i, includes the chunk header. - i, j int - // buf[:written] has already been written to w. - // written is zero unless Flush has been called. - written int - // first is whether the current chunk is the first chunk of the journal. - first bool - // pending is whether a chunk is buffered but not yet written. - pending bool - // err is any accumulated error. - err error - // buf is the buffer. - buf [blockSize]byte -} - -// NewWriter returns a new Writer. -func NewWriter(w io.Writer) *Writer { - f, _ := w.(flusher) - return &Writer{ - w: w, - f: f, - } -} - -// fillHeader fills in the header for the pending chunk. -func (w *Writer) fillHeader(last bool) { - if w.i+headerSize > w.j || w.j > blockSize { - panic("leveldb/journal: bad writer state") - } - if last { - if w.first { - w.buf[w.i+6] = fullChunkType - } else { - w.buf[w.i+6] = lastChunkType - } - } else { - if w.first { - w.buf[w.i+6] = firstChunkType - } else { - w.buf[w.i+6] = middleChunkType - } - } - binary.LittleEndian.PutUint32(w.buf[w.i+0:w.i+4], util.NewCRC(w.buf[w.i+6:w.j]).Value()) - binary.LittleEndian.PutUint16(w.buf[w.i+4:w.i+6], uint16(w.j-w.i-headerSize)) -} - -// writeBlock writes the buffered block to the underlying writer, and reserves -// space for the next chunk's header. -func (w *Writer) writeBlock() { - _, w.err = w.w.Write(w.buf[w.written:]) - w.i = 0 - w.j = headerSize - w.written = 0 -} - -// writePending finishes the current journal and writes the buffer to the -// underlying writer. -func (w *Writer) writePending() { - if w.err != nil { - return - } - if w.pending { - w.fillHeader(true) - w.pending = false - } - _, w.err = w.w.Write(w.buf[w.written:w.j]) - w.written = w.j -} - -// Close finishes the current journal and closes the writer. -func (w *Writer) Close() error { - w.seq++ - w.writePending() - if w.err != nil { - return w.err - } - w.err = errors.New("leveldb/journal: closed Writer") - return nil -} - -// Flush finishes the current journal, writes to the underlying writer, and -// flushes it if that writer implements interface{ Flush() error }. -func (w *Writer) Flush() error { - w.seq++ - w.writePending() - if w.err != nil { - return w.err - } - if w.f != nil { - w.err = w.f.Flush() - return w.err - } - return nil -} - -// Reset resets the journal writer, allows reuse of the journal writer. Reset -// will also closes the journal writer if not already. -func (w *Writer) Reset(writer io.Writer) (err error) { - w.seq++ - if w.err == nil { - w.writePending() - err = w.err - } - w.w = writer - w.f, _ = writer.(flusher) - w.i = 0 - w.j = 0 - w.written = 0 - w.first = false - w.pending = false - w.err = nil - return -} - -// Next returns a writer for the next journal. The writer returned becomes stale -// after the next Close, Flush or Next call, and should no longer be used. -func (w *Writer) Next() (io.Writer, error) { - w.seq++ - if w.err != nil { - return nil, w.err - } - if w.pending { - w.fillHeader(true) - } - w.i = w.j - w.j = w.j + headerSize - // Check if there is room in the block for the header. - if w.j > blockSize { - // Fill in the rest of the block with zeroes. - for k := w.i; k < blockSize; k++ { - w.buf[k] = 0 - } - w.writeBlock() - if w.err != nil { - return nil, w.err - } - } - w.first = true - w.pending = true - return singleWriter{w, w.seq}, nil -} - -type singleWriter struct { - w *Writer - seq int -} - -func (x singleWriter) Write(p []byte) (int, error) { - w := x.w - if w.seq != x.seq { - return 0, errors.New("leveldb/journal: stale writer") - } - if w.err != nil { - return 0, w.err - } - n0 := len(p) - for len(p) > 0 { - // Write a block, if it is full. - if w.j == blockSize { - w.fillHeader(false) - w.writeBlock() - if w.err != nil { - return 0, w.err - } - w.first = false - } - // Copy bytes into the buffer. - n := copy(w.buf[w.j:], p) - w.j += n - p = p[n:] - } - return n0, nil -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/key.go b/vendor/github.com/pingcap/goleveldb/leveldb/key.go deleted file mode 100644 index afc6b85..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/key.go +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "encoding/binary" - "fmt" - - "github.com/pingcap/goleveldb/leveldb/errors" - "github.com/pingcap/goleveldb/leveldb/storage" -) - -// ErrInternalKeyCorrupted records internal key corruption. -type ErrInternalKeyCorrupted struct { - Ikey []byte - Reason string -} - -func (e *ErrInternalKeyCorrupted) Error() string { - return fmt.Sprintf("leveldb: internal key %q corrupted: %s", e.Ikey, e.Reason) -} - -func newErrInternalKeyCorrupted(ikey []byte, reason string) error { - return errors.NewErrCorrupted(storage.FileDesc{}, &ErrInternalKeyCorrupted{append([]byte{}, ikey...), reason}) -} - -type keyType uint - -func (kt keyType) String() string { - switch kt { - case keyTypeDel: - return "d" - case keyTypeVal: - return "v" - } - return fmt.Sprintf("", uint(kt)) -} - -// Value types encoded as the last component of internal keys. -// Don't modify; this value are saved to disk. -const ( - keyTypeDel = keyType(0) - keyTypeVal = keyType(1) -) - -// keyTypeSeek defines the keyType that should be passed when constructing an -// internal key for seeking to a particular sequence number (since we -// sort sequence numbers in decreasing order and the value type is -// embedded as the low 8 bits in the sequence number in internal keys, -// we need to use the highest-numbered ValueType, not the lowest). -const keyTypeSeek = keyTypeVal - -const ( - // Maximum value possible for sequence number; the 8-bits are - // used by value type, so its can packed together in single - // 64-bit integer. - keyMaxSeq = (uint64(1) << 56) - 1 - // Maximum value possible for packed sequence number and type. - keyMaxNum = (keyMaxSeq << 8) | uint64(keyTypeSeek) -) - -// Maximum number encoded in bytes. -var keyMaxNumBytes = make([]byte, 8) - -func init() { - binary.LittleEndian.PutUint64(keyMaxNumBytes, keyMaxNum) -} - -type internalKey []byte - -func makeInternalKey(dst, ukey []byte, seq uint64, kt keyType) internalKey { - if seq > keyMaxSeq { - panic("leveldb: invalid sequence number") - } else if kt > keyTypeVal { - panic("leveldb: invalid type") - } - - dst = ensureBuffer(dst, len(ukey)+8) - copy(dst, ukey) - binary.LittleEndian.PutUint64(dst[len(ukey):], (seq<<8)|uint64(kt)) - return internalKey(dst) -} - -func parseInternalKey(ik []byte) (ukey []byte, seq uint64, kt keyType, err error) { - if len(ik) < 8 { - return nil, 0, 0, newErrInternalKeyCorrupted(ik, "invalid length") - } - num := binary.LittleEndian.Uint64(ik[len(ik)-8:]) - seq, kt = uint64(num>>8), keyType(num&0xff) - if kt > keyTypeVal { - return nil, 0, 0, newErrInternalKeyCorrupted(ik, "invalid type") - } - ukey = ik[:len(ik)-8] - return -} - -func validInternalKey(ik []byte) bool { - _, _, _, err := parseInternalKey(ik) - return err == nil -} - -func (ik internalKey) assert() { - if ik == nil { - panic("leveldb: nil internalKey") - } - if len(ik) < 8 { - panic(fmt.Sprintf("leveldb: internal key %q, len=%d: invalid length", []byte(ik), len(ik))) - } -} - -func (ik internalKey) ukey() []byte { - ik.assert() - return ik[:len(ik)-8] -} - -func (ik internalKey) num() uint64 { - ik.assert() - return binary.LittleEndian.Uint64(ik[len(ik)-8:]) -} - -func (ik internalKey) parseNum() (seq uint64, kt keyType) { - num := ik.num() - seq, kt = uint64(num>>8), keyType(num&0xff) - if kt > keyTypeVal { - panic(fmt.Sprintf("leveldb: internal key %q, len=%d: invalid type %#x", []byte(ik), len(ik), kt)) - } - return -} - -func (ik internalKey) String() string { - if ik == nil { - return "" - } - - if ukey, seq, kt, err := parseInternalKey(ik); err == nil { - return fmt.Sprintf("%s,%s%d", shorten(string(ukey)), kt, seq) - } - return fmt.Sprintf("", []byte(ik)) -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/memdb/memdb.go b/vendor/github.com/pingcap/goleveldb/leveldb/memdb/memdb.go deleted file mode 100644 index 77015ae..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/memdb/memdb.go +++ /dev/null @@ -1,524 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Package memdb provides in-memory key/value database implementation. -package memdb - -import ( - "math/rand" - "sync" - - "github.com/pingcap/goleveldb/leveldb/comparer" - "github.com/pingcap/goleveldb/leveldb/errors" - "github.com/pingcap/goleveldb/leveldb/iterator" - "github.com/pingcap/goleveldb/leveldb/util" -) - -type lockedSource struct { - lk sync.Mutex - src rand.Source -} - -func (r *lockedSource) Int63() (n int64) { - r.lk.Lock() - n = r.src.Int63() - r.lk.Unlock() - return -} - -func (r *lockedSource) Seed(seed int64) { - r.lk.Lock() - r.src.Seed(seed) - r.lk.Unlock() -} - -// Common errors. -var ( - ErrNotFound = errors.ErrNotFound - ErrIterReleased = errors.New("leveldb/memdb: iterator released") - rndSrc = &lockedSource{src: rand.NewSource(0xdeadbeef)} -) - -const tMaxHeight = 12 - -type dbIter struct { - util.BasicReleaser - p *DB - slice *util.Range - node int - forward bool - key, value []byte - err error -} - -func (i *dbIter) fill(checkStart, checkLimit bool) bool { - if i.node != 0 { - n := i.p.nodeData[i.node] - m := n + i.p.nodeData[i.node+nKey] - i.key = i.p.kvData[n:m] - if i.slice != nil { - switch { - case checkLimit && i.slice.Limit != nil && i.p.cmp.Compare(i.key, i.slice.Limit) >= 0: - fallthrough - case checkStart && i.slice.Start != nil && i.p.cmp.Compare(i.key, i.slice.Start) < 0: - i.node = 0 - goto bail - } - } - i.value = i.p.kvData[m : m+i.p.nodeData[i.node+nVal]] - return true - } -bail: - i.key = nil - i.value = nil - return false -} - -func (i *dbIter) Valid() bool { - return i.node != 0 -} - -func (i *dbIter) First() bool { - if i.Released() { - i.err = ErrIterReleased - return false - } - - i.forward = true - i.p.mu.RLock() - defer i.p.mu.RUnlock() - if i.slice != nil && i.slice.Start != nil { - i.node, _ = i.p.findGE(i.slice.Start, false) - } else { - i.node = i.p.nodeData[nNext] - } - return i.fill(false, true) -} - -func (i *dbIter) Last() bool { - if i.Released() { - i.err = ErrIterReleased - return false - } - - i.forward = false - i.p.mu.RLock() - defer i.p.mu.RUnlock() - if i.slice != nil && i.slice.Limit != nil { - i.node = i.p.findLT(i.slice.Limit) - } else { - i.node = i.p.findLast() - } - return i.fill(true, false) -} - -func (i *dbIter) Seek(key []byte) bool { - if i.Released() { - i.err = ErrIterReleased - return false - } - - i.forward = true - i.p.mu.RLock() - defer i.p.mu.RUnlock() - if i.slice != nil && i.slice.Start != nil && i.p.cmp.Compare(key, i.slice.Start) < 0 { - key = i.slice.Start - } - i.node, _ = i.p.findGE(key, false) - return i.fill(false, true) -} - -func (i *dbIter) Next() bool { - if i.Released() { - i.err = ErrIterReleased - return false - } - - if i.node == 0 { - if !i.forward { - return i.First() - } - return false - } - i.forward = true - i.p.mu.RLock() - defer i.p.mu.RUnlock() - i.node = i.p.nodeData[i.node+nNext] - return i.fill(false, true) -} - -func (i *dbIter) Prev() bool { - if i.Released() { - i.err = ErrIterReleased - return false - } - - if i.node == 0 { - if i.forward { - return i.Last() - } - return false - } - i.forward = false - i.p.mu.RLock() - defer i.p.mu.RUnlock() - i.node = i.p.findLT(i.key) - return i.fill(true, false) -} - -func (i *dbIter) Key() []byte { - return i.key -} - -func (i *dbIter) Value() []byte { - return i.value -} - -func (i *dbIter) Error() error { return i.err } - -func (i *dbIter) Release() { - if !i.Released() { - i.p = nil - i.node = 0 - i.key = nil - i.value = nil - i.BasicReleaser.Release() - } -} - -const ( - nKV = iota - nKey - nVal - nHeight - nNext -) - -type bitRand struct { - src rand.Source - value uint64 - bits uint -} - -// bitN return a random int value of n bits. -func (r *bitRand) bitN(n uint) uint64 { - if r.bits < n { - r.value = uint64(r.src.Int63()) - r.bits = 60 - } - - // take n bits from value - mask := (1 << n) - 1 - ret := r.value & uint64(mask) - - r.value = r.value >> n - r.bits -= n - return ret -} - -// DB is an in-memory key/value database. -type DB struct { - cmp comparer.BasicComparer - rnd *bitRand - - mu sync.RWMutex - kvData []byte - // Node data: - // [0] : KV offset - // [1] : Key length - // [2] : Value length - // [3] : Height - // [3..height] : Next nodes - nodeData []int - prevNode [tMaxHeight]int - maxHeight int - n int - kvSize int -} - -// randHeight returns a random int value for the height of a skip-list node. -func (p *DB) randHeight() (h int) { - h = 1 - // From wikipedia: https://en.wikipedia.org/wiki/Skip_list - // "Each higher layer acts as an "express lane" for the lists below, where - // an element in layer i appears in layer i+1 with some fixed probability p - // (two commonly used values for p are 1/2 or 1/4)." - - // here we chose 1/4 as the probability, which means - // 1/4 possibility return a height of 2, - // 1/16 possibility of height 3, - // 1/64 possibility of height 4, and so on... - for h < tMaxHeight && p.rnd.bitN(2) == 0 { - h++ - } - return -} - -// Must hold RW-lock if prev == true, as it use shared prevNode slice. -func (p *DB) findGE(key []byte, prev bool) (int, bool) { - node := 0 - h := p.maxHeight - 1 - for { - next := p.nodeData[node+nNext+h] - cmp := 1 - if next != 0 { - o := p.nodeData[next] - cmp = p.cmp.Compare(p.kvData[o:o+p.nodeData[next+nKey]], key) - } - if cmp < 0 { - // Keep searching in this list - node = next - } else { - if prev { - p.prevNode[h] = node - } else if cmp == 0 { - return next, true - } - if h == 0 { - return next, cmp == 0 - } - h-- - } - } -} - -func (p *DB) findLT(key []byte) int { - node := 0 - h := p.maxHeight - 1 - for { - next := p.nodeData[node+nNext+h] - o := p.nodeData[next] - if next == 0 || p.cmp.Compare(p.kvData[o:o+p.nodeData[next+nKey]], key) >= 0 { - if h == 0 { - break - } - h-- - } else { - node = next - } - } - return node -} - -func (p *DB) findLast() int { - node := 0 - h := p.maxHeight - 1 - for { - next := p.nodeData[node+nNext+h] - if next == 0 { - if h == 0 { - break - } - h-- - } else { - node = next - } - } - return node -} - -// Put sets the value for the given key. It overwrites any previous value -// for that key; a DB is not a multi-map. -// -// It is safe to modify the contents of the arguments after Put returns. -func (p *DB) Put(key []byte, value []byte) error { - p.mu.Lock() - defer p.mu.Unlock() - - if node, exact := p.findGE(key, true); exact { - kvOffset := len(p.kvData) - p.kvData = append(p.kvData, key...) - p.kvData = append(p.kvData, value...) - p.nodeData[node] = kvOffset - m := p.nodeData[node+nVal] - p.nodeData[node+nVal] = len(value) - p.kvSize += len(value) - m - return nil - } - - h := p.randHeight() - if h > p.maxHeight { - for i := p.maxHeight; i < h; i++ { - p.prevNode[i] = 0 - } - p.maxHeight = h - } - - kvOffset := len(p.kvData) - p.kvData = append(p.kvData, key...) - p.kvData = append(p.kvData, value...) - // Node - node := len(p.nodeData) - p.nodeData = append(p.nodeData, kvOffset, len(key), len(value), h) - for i, n := range p.prevNode[:h] { - m := n + nNext + i - p.nodeData = append(p.nodeData, p.nodeData[m]) - p.nodeData[m] = node - } - - p.kvSize += len(key) + len(value) - p.n++ - return nil -} - -// Delete deletes the value for the given key. It returns ErrNotFound if -// the DB does not contain the key. -// -// It is safe to modify the contents of the arguments after Delete returns. -func (p *DB) Delete(key []byte) error { - p.mu.Lock() - defer p.mu.Unlock() - - node, exact := p.findGE(key, true) - if !exact { - return ErrNotFound - } - - h := p.nodeData[node+nHeight] - for i, n := range p.prevNode[:h] { - m := n + 4 + i - p.nodeData[m] = p.nodeData[p.nodeData[m]+nNext+i] - } - - p.kvSize -= p.nodeData[node+nKey] + p.nodeData[node+nVal] - p.n-- - return nil -} - -// Contains returns true if the given key are in the DB. -// -// It is safe to modify the contents of the arguments after Contains returns. -func (p *DB) Contains(key []byte) bool { - p.mu.RLock() - _, exact := p.findGE(key, false) - p.mu.RUnlock() - return exact -} - -// Get gets the value for the given key. It returns error.ErrNotFound if the -// DB does not contain the key. -// -// The caller should not modify the contents of the returned slice, but -// it is safe to modify the contents of the argument after Get returns. -func (p *DB) Get(key []byte) (value []byte, err error) { - p.mu.RLock() - if node, exact := p.findGE(key, false); exact { - o := p.nodeData[node] + p.nodeData[node+nKey] - value = p.kvData[o : o+p.nodeData[node+nVal]] - } else { - err = ErrNotFound - } - p.mu.RUnlock() - return -} - -// Find finds key/value pair whose key is greater than or equal to the -// given key. It returns ErrNotFound if the table doesn't contain -// such pair. -// -// The caller should not modify the contents of the returned slice, but -// it is safe to modify the contents of the argument after Find returns. -func (p *DB) Find(key []byte) (rkey, value []byte, err error) { - p.mu.RLock() - if node, _ := p.findGE(key, false); node != 0 { - n := p.nodeData[node] - m := n + p.nodeData[node+nKey] - rkey = p.kvData[n:m] - value = p.kvData[m : m+p.nodeData[node+nVal]] - } else { - err = ErrNotFound - } - p.mu.RUnlock() - return -} - -// NewIterator returns an iterator of the DB. -// The returned iterator is not safe for concurrent use, but it is safe to use -// multiple iterators concurrently, with each in a dedicated goroutine. -// It is also safe to use an iterator concurrently with modifying its -// underlying DB. However, the resultant key/value pairs are not guaranteed -// to be a consistent snapshot of the DB at a particular point in time. -// -// Slice allows slicing the iterator to only contains keys in the given -// range. A nil Range.Start is treated as a key before all keys in the -// DB. And a nil Range.Limit is treated as a key after all keys in -// the DB. -// -// The iterator must be released after use, by calling Release method. -// -// Also read Iterator documentation of the leveldb/iterator package. -func (p *DB) NewIterator(slice *util.Range) iterator.Iterator { - return &dbIter{p: p, slice: slice} -} - -// Capacity returns keys/values buffer capacity. -func (p *DB) Capacity() int { - p.mu.RLock() - defer p.mu.RUnlock() - return cap(p.kvData) -} - -// Size returns sum of keys and values length. Note that deleted -// key/value will not be accounted for, but it will still consume -// the buffer, since the buffer is append only. -func (p *DB) Size() int { - p.mu.RLock() - defer p.mu.RUnlock() - return p.kvSize -} - -// Free returns keys/values free buffer before need to grow. -func (p *DB) Free() int { - p.mu.RLock() - defer p.mu.RUnlock() - return cap(p.kvData) - len(p.kvData) -} - -// Len returns the number of entries in the DB. -func (p *DB) Len() int { - p.mu.RLock() - defer p.mu.RUnlock() - return p.n -} - -// Reset resets the DB to initial empty state. Allows reuse the buffer. -func (p *DB) Reset() { - p.mu.Lock() - p.maxHeight = 1 - p.n = 0 - p.kvSize = 0 - p.kvData = p.kvData[:0] - p.nodeData = p.nodeData[:nNext+tMaxHeight] - p.nodeData[nKV] = 0 - p.nodeData[nKey] = 0 - p.nodeData[nVal] = 0 - p.nodeData[nHeight] = tMaxHeight - for n := 0; n < tMaxHeight; n++ { - p.nodeData[nNext+n] = 0 - p.prevNode[n] = 0 - } - p.mu.Unlock() -} - -// New creates a new initialized in-memory key/value DB. The capacity -// is the initial key/value buffer capacity. The capacity is advisory, -// not enforced. -// -// This DB is append-only, deleting an entry would remove entry node but not -// reclaim KV buffer. -// -// The returned DB instance is safe for concurrent use. -func New(cmp comparer.BasicComparer, capacity int) *DB { - p := &DB{ - cmp: cmp, - rnd: &bitRand{src: rndSrc}, - maxHeight: 1, - kvData: make([]byte, 0, capacity), - nodeData: make([]int, 4+tMaxHeight), - } - p.nodeData[nHeight] = tMaxHeight - return p -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/opt/options.go b/vendor/github.com/pingcap/goleveldb/leveldb/opt/options.go deleted file mode 100644 index 8e980ab..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/opt/options.go +++ /dev/null @@ -1,684 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Package opt provides sets of options used by LevelDB. -package opt - -import ( - "math" - - "github.com/pingcap/goleveldb/leveldb/cache" - "github.com/pingcap/goleveldb/leveldb/comparer" - "github.com/pingcap/goleveldb/leveldb/filter" -) - -const ( - KiB = 1024 - MiB = KiB * 1024 - GiB = MiB * 1024 -) - -var ( - DefaultBlockCacher = LRUCacher - DefaultBlockCacheCapacity = 8 * MiB - DefaultBlockRestartInterval = 16 - DefaultBlockSize = 4 * KiB - DefaultCompactionExpandLimitFactor = 25 - DefaultCompactionGPOverlapsFactor = 10 - DefaultCompactionL0Trigger = 4 - DefaultCompactionSourceLimitFactor = 1 - DefaultCompactionTableSize = 2 * MiB - DefaultCompactionTableSizeMultiplier = 1.0 - DefaultCompactionTotalSize = 10 * MiB - DefaultCompactionTotalSizeMultiplier = 10.0 - DefaultCompressionType = SnappyCompression - DefaultIteratorSamplingRate = 1 * MiB - DefaultOpenFilesCacher = LRUCacher - DefaultOpenFilesCacheCapacity = 500 - DefaultWriteBuffer = 4 * MiB - DefaultWriteL0PauseTrigger = 12 - DefaultWriteL0SlowdownTrigger = 8 -) - -// Cacher is a caching algorithm. -type Cacher interface { - New(capacity int) cache.Cacher -} - -type CacherFunc struct { - NewFunc func(capacity int) cache.Cacher -} - -func (f *CacherFunc) New(capacity int) cache.Cacher { - if f.NewFunc != nil { - return f.NewFunc(capacity) - } - return nil -} - -func noCacher(int) cache.Cacher { return nil } - -var ( - // LRUCacher is the LRU-cache algorithm. - LRUCacher = &CacherFunc{cache.NewLRU} - - // NoCacher is the value to disable caching algorithm. - NoCacher = &CacherFunc{} -) - -// Compression is the 'sorted table' block compression algorithm to use. -type Compression uint - -func (c Compression) String() string { - switch c { - case DefaultCompression: - return "default" - case NoCompression: - return "none" - case SnappyCompression: - return "snappy" - } - return "invalid" -} - -const ( - DefaultCompression Compression = iota - NoCompression - SnappyCompression - nCompression -) - -// Strict is the DB 'strict level'. -type Strict uint - -const ( - // If present then a corrupted or invalid chunk or block in manifest - // journal will cause an error instead of being dropped. - // This will prevent database with corrupted manifest to be opened. - StrictManifest Strict = 1 << iota - - // If present then journal chunk checksum will be verified. - StrictJournalChecksum - - // If present then a corrupted or invalid chunk or block in journal - // will cause an error instead of being dropped. - // This will prevent database with corrupted journal to be opened. - StrictJournal - - // If present then 'sorted table' block checksum will be verified. - // This has effect on both 'read operation' and compaction. - StrictBlockChecksum - - // If present then a corrupted 'sorted table' will fails compaction. - // The database will enter read-only mode. - StrictCompaction - - // If present then a corrupted 'sorted table' will halts 'read operation'. - StrictReader - - // If present then leveldb.Recover will drop corrupted 'sorted table'. - StrictRecovery - - // This only applicable for ReadOptions, if present then this ReadOptions - // 'strict level' will override global ones. - StrictOverride - - // StrictAll enables all strict flags. - StrictAll = StrictManifest | StrictJournalChecksum | StrictJournal | StrictBlockChecksum | StrictCompaction | StrictReader | StrictRecovery - - // DefaultStrict is the default strict flags. Specify any strict flags - // will override default strict flags as whole (i.e. not OR'ed). - DefaultStrict = StrictJournalChecksum | StrictBlockChecksum | StrictCompaction | StrictReader - - // NoStrict disables all strict flags. Override default strict flags. - NoStrict = ^StrictAll -) - -// Options holds the optional parameters for the DB at large. -type Options struct { - // AltFilters defines one or more 'alternative filters'. - // 'alternative filters' will be used during reads if a filter block - // does not match with the 'effective filter'. - // - // The default value is nil - AltFilters []filter.Filter - - // BlockCacher provides cache algorithm for LevelDB 'sorted table' block caching. - // Specify NoCacher to disable caching algorithm. - // - // The default value is LRUCacher. - BlockCacher Cacher - - // BlockCacheCapacity defines the capacity of the 'sorted table' block caching. - // Use -1 for zero, this has same effect as specifying NoCacher to BlockCacher. - // - // The default value is 8MiB. - BlockCacheCapacity int - - // BlockRestartInterval is the number of keys between restart points for - // delta encoding of keys. - // - // The default value is 16. - BlockRestartInterval int - - // BlockSize is the minimum uncompressed size in bytes of each 'sorted table' - // block. - // - // The default value is 4KiB. - BlockSize int - - // CompactionExpandLimitFactor limits compaction size after expanded. - // This will be multiplied by table size limit at compaction target level. - // - // The default value is 25. - CompactionExpandLimitFactor int - - // CompactionGPOverlapsFactor limits overlaps in grandparent (Level + 2) that a - // single 'sorted table' generates. - // This will be multiplied by table size limit at grandparent level. - // - // The default value is 10. - CompactionGPOverlapsFactor int - - // CompactionL0Trigger defines number of 'sorted table' at level-0 that will - // trigger compaction. - // - // The default value is 4. - CompactionL0Trigger int - - // CompactionSourceLimitFactor limits compaction source size. This doesn't apply to - // level-0. - // This will be multiplied by table size limit at compaction target level. - // - // The default value is 1. - CompactionSourceLimitFactor int - - // CompactionTableSize limits size of 'sorted table' that compaction generates. - // The limits for each level will be calculated as: - // CompactionTableSize * (CompactionTableSizeMultiplier ^ Level) - // The multiplier for each level can also fine-tuned using CompactionTableSizeMultiplierPerLevel. - // - // The default value is 2MiB. - CompactionTableSize int - - // CompactionTableSizeMultiplier defines multiplier for CompactionTableSize. - // - // The default value is 1. - CompactionTableSizeMultiplier float64 - - // CompactionTableSizeMultiplierPerLevel defines per-level multiplier for - // CompactionTableSize. - // Use zero to skip a level. - // - // The default value is nil. - CompactionTableSizeMultiplierPerLevel []float64 - - // CompactionTotalSize limits total size of 'sorted table' for each level. - // The limits for each level will be calculated as: - // CompactionTotalSize * (CompactionTotalSizeMultiplier ^ Level) - // The multiplier for each level can also fine-tuned using - // CompactionTotalSizeMultiplierPerLevel. - // - // The default value is 10MiB. - CompactionTotalSize int - - // CompactionTotalSizeMultiplier defines multiplier for CompactionTotalSize. - // - // The default value is 10. - CompactionTotalSizeMultiplier float64 - - // CompactionTotalSizeMultiplierPerLevel defines per-level multiplier for - // CompactionTotalSize. - // Use zero to skip a level. - // - // The default value is nil. - CompactionTotalSizeMultiplierPerLevel []float64 - - // Comparer defines a total ordering over the space of []byte keys: a 'less - // than' relationship. The same comparison algorithm must be used for reads - // and writes over the lifetime of the DB. - // - // The default value uses the same ordering as bytes.Compare. - Comparer comparer.Comparer - - // Compression defines the 'sorted table' block compression to use. - // - // The default value (DefaultCompression) uses snappy compression. - Compression Compression - - // DisableBufferPool allows disable use of util.BufferPool functionality. - // - // The default value is false. - DisableBufferPool bool - - // DisableBlockCache allows disable use of cache.Cache functionality on - // 'sorted table' block. - // - // The default value is false. - DisableBlockCache bool - - // DisableCompactionBackoff allows disable compaction retry backoff. - // - // The default value is false. - DisableCompactionBackoff bool - - // DisableLargeBatchTransaction allows disabling switch-to-transaction mode - // on large batch write. If enable batch writes large than WriteBuffer will - // use transaction. - // - // The default is false. - DisableLargeBatchTransaction bool - - // ErrorIfExist defines whether an error should returned if the DB already - // exist. - // - // The default value is false. - ErrorIfExist bool - - // ErrorIfMissing defines whether an error should returned if the DB is - // missing. If false then the database will be created if missing, otherwise - // an error will be returned. - // - // The default value is false. - ErrorIfMissing bool - - // Filter defines an 'effective filter' to use. An 'effective filter' - // if defined will be used to generate per-table filter block. - // The filter name will be stored on disk. - // During reads LevelDB will try to find matching filter from - // 'effective filter' and 'alternative filters'. - // - // Filter can be changed after a DB has been created. It is recommended - // to put old filter to the 'alternative filters' to mitigate lack of - // filter during transition period. - // - // A filter is used to reduce disk reads when looking for a specific key. - // - // The default value is nil. - Filter filter.Filter - - // IteratorSamplingRate defines approximate gap (in bytes) between read - // sampling of an iterator. The samples will be used to determine when - // compaction should be triggered. - // - // The default is 1MiB. - IteratorSamplingRate int - - // NoSync allows completely disable fsync. - // - // The default is false. - NoSync bool - - // NoWriteMerge allows disabling write merge. - // - // The default is false. - NoWriteMerge bool - - // OpenFilesCacher provides cache algorithm for open files caching. - // Specify NoCacher to disable caching algorithm. - // - // The default value is LRUCacher. - OpenFilesCacher Cacher - - // OpenFilesCacheCapacity defines the capacity of the open files caching. - // Use -1 for zero, this has same effect as specifying NoCacher to OpenFilesCacher. - // - // The default value is 500. - OpenFilesCacheCapacity int - - // If true then opens DB in read-only mode. - // - // The default value is false. - ReadOnly bool - - // Strict defines the DB strict level. - Strict Strict - - // WriteBuffer defines maximum size of a 'memdb' before flushed to - // 'sorted table'. 'memdb' is an in-memory DB backed by an on-disk - // unsorted journal. - // - // LevelDB may held up to two 'memdb' at the same time. - // - // The default value is 4MiB. - WriteBuffer int - - // WriteL0StopTrigger defines number of 'sorted table' at level-0 that will - // pause write. - // - // The default value is 12. - WriteL0PauseTrigger int - - // WriteL0SlowdownTrigger defines number of 'sorted table' at level-0 that - // will trigger write slowdown. - // - // The default value is 8. - WriteL0SlowdownTrigger int -} - -func (o *Options) GetAltFilters() []filter.Filter { - if o == nil { - return nil - } - return o.AltFilters -} - -func (o *Options) GetBlockCacher() Cacher { - if o == nil || o.BlockCacher == nil { - return DefaultBlockCacher - } else if o.BlockCacher == NoCacher { - return nil - } - return o.BlockCacher -} - -func (o *Options) GetBlockCacheCapacity() int { - if o == nil || o.BlockCacheCapacity == 0 { - return DefaultBlockCacheCapacity - } else if o.BlockCacheCapacity < 0 { - return 0 - } - return o.BlockCacheCapacity -} - -func (o *Options) GetBlockRestartInterval() int { - if o == nil || o.BlockRestartInterval <= 0 { - return DefaultBlockRestartInterval - } - return o.BlockRestartInterval -} - -func (o *Options) GetBlockSize() int { - if o == nil || o.BlockSize <= 0 { - return DefaultBlockSize - } - return o.BlockSize -} - -func (o *Options) GetCompactionExpandLimit(level int) int { - factor := DefaultCompactionExpandLimitFactor - if o != nil && o.CompactionExpandLimitFactor > 0 { - factor = o.CompactionExpandLimitFactor - } - return o.GetCompactionTableSize(level+1) * factor -} - -func (o *Options) GetCompactionGPOverlaps(level int) int { - factor := DefaultCompactionGPOverlapsFactor - if o != nil && o.CompactionGPOverlapsFactor > 0 { - factor = o.CompactionGPOverlapsFactor - } - return o.GetCompactionTableSize(level+2) * factor -} - -func (o *Options) GetCompactionL0Trigger() int { - if o == nil || o.CompactionL0Trigger == 0 { - return DefaultCompactionL0Trigger - } - return o.CompactionL0Trigger -} - -func (o *Options) GetCompactionSourceLimit(level int) int { - factor := DefaultCompactionSourceLimitFactor - if o != nil && o.CompactionSourceLimitFactor > 0 { - factor = o.CompactionSourceLimitFactor - } - return o.GetCompactionTableSize(level+1) * factor -} - -func (o *Options) GetCompactionTableSize(level int) int { - var ( - base = DefaultCompactionTableSize - mult float64 - ) - if o != nil { - if o.CompactionTableSize > 0 { - base = o.CompactionTableSize - } - if level < len(o.CompactionTableSizeMultiplierPerLevel) && o.CompactionTableSizeMultiplierPerLevel[level] > 0 { - mult = o.CompactionTableSizeMultiplierPerLevel[level] - } else if o.CompactionTableSizeMultiplier > 0 { - mult = math.Pow(o.CompactionTableSizeMultiplier, float64(level)) - } - } - if mult == 0 { - mult = math.Pow(DefaultCompactionTableSizeMultiplier, float64(level)) - } - return int(float64(base) * mult) -} - -func (o *Options) GetCompactionTotalSize(level int) int64 { - var ( - base = DefaultCompactionTotalSize - mult float64 - ) - if o != nil { - if o.CompactionTotalSize > 0 { - base = o.CompactionTotalSize - } - if level < len(o.CompactionTotalSizeMultiplierPerLevel) && o.CompactionTotalSizeMultiplierPerLevel[level] > 0 { - mult = o.CompactionTotalSizeMultiplierPerLevel[level] - } else if o.CompactionTotalSizeMultiplier > 0 { - mult = math.Pow(o.CompactionTotalSizeMultiplier, float64(level)) - } - } - if mult == 0 { - mult = math.Pow(DefaultCompactionTotalSizeMultiplier, float64(level)) - } - return int64(float64(base) * mult) -} - -func (o *Options) GetComparer() comparer.Comparer { - if o == nil || o.Comparer == nil { - return comparer.DefaultComparer - } - return o.Comparer -} - -func (o *Options) GetCompression() Compression { - if o == nil || o.Compression <= DefaultCompression || o.Compression >= nCompression { - return DefaultCompressionType - } - return o.Compression -} - -func (o *Options) GetDisableBufferPool() bool { - if o == nil { - return false - } - return o.DisableBufferPool -} - -func (o *Options) GetDisableBlockCache() bool { - if o == nil { - return false - } - return o.DisableBlockCache -} - -func (o *Options) GetDisableCompactionBackoff() bool { - if o == nil { - return false - } - return o.DisableCompactionBackoff -} - -func (o *Options) GetDisableLargeBatchTransaction() bool { - if o == nil { - return false - } - return o.DisableLargeBatchTransaction -} - -func (o *Options) GetErrorIfExist() bool { - if o == nil { - return false - } - return o.ErrorIfExist -} - -func (o *Options) GetErrorIfMissing() bool { - if o == nil { - return false - } - return o.ErrorIfMissing -} - -func (o *Options) GetFilter() filter.Filter { - if o == nil { - return nil - } - return o.Filter -} - -func (o *Options) GetIteratorSamplingRate() int { - if o == nil || o.IteratorSamplingRate <= 0 { - return DefaultIteratorSamplingRate - } - return o.IteratorSamplingRate -} - -func (o *Options) GetNoSync() bool { - if o == nil { - return false - } - return o.NoSync -} - -func (o *Options) GetNoWriteMerge() bool { - if o == nil { - return false - } - return o.NoWriteMerge -} - -func (o *Options) GetOpenFilesCacher() Cacher { - if o == nil || o.OpenFilesCacher == nil { - return DefaultOpenFilesCacher - } - if o.OpenFilesCacher == NoCacher { - return nil - } - return o.OpenFilesCacher -} - -func (o *Options) GetOpenFilesCacheCapacity() int { - if o == nil || o.OpenFilesCacheCapacity == 0 { - return DefaultOpenFilesCacheCapacity - } else if o.OpenFilesCacheCapacity < 0 { - return 0 - } - return o.OpenFilesCacheCapacity -} - -func (o *Options) GetReadOnly() bool { - if o == nil { - return false - } - return o.ReadOnly -} - -func (o *Options) GetStrict(strict Strict) bool { - if o == nil || o.Strict == 0 { - return DefaultStrict&strict != 0 - } - return o.Strict&strict != 0 -} - -func (o *Options) GetWriteBuffer() int { - if o == nil || o.WriteBuffer <= 0 { - return DefaultWriteBuffer - } - return o.WriteBuffer -} - -func (o *Options) GetWriteL0PauseTrigger() int { - if o == nil || o.WriteL0PauseTrigger == 0 { - return DefaultWriteL0PauseTrigger - } - return o.WriteL0PauseTrigger -} - -func (o *Options) GetWriteL0SlowdownTrigger() int { - if o == nil || o.WriteL0SlowdownTrigger == 0 { - return DefaultWriteL0SlowdownTrigger - } - return o.WriteL0SlowdownTrigger -} - -// ReadOptions holds the optional parameters for 'read operation'. The -// 'read operation' includes Get, Find and NewIterator. -type ReadOptions struct { - // DontFillCache defines whether block reads for this 'read operation' - // should be cached. If false then the block will be cached. This does - // not affects already cached block. - // - // The default value is false. - DontFillCache bool - - // Strict will be OR'ed with global DB 'strict level' unless StrictOverride - // is present. Currently only StrictReader that has effect here. - Strict Strict -} - -func (ro *ReadOptions) GetDontFillCache() bool { - if ro == nil { - return false - } - return ro.DontFillCache -} - -func (ro *ReadOptions) GetStrict(strict Strict) bool { - if ro == nil { - return false - } - return ro.Strict&strict != 0 -} - -// WriteOptions holds the optional parameters for 'write operation'. The -// 'write operation' includes Write, Put and Delete. -type WriteOptions struct { - // NoWriteMerge allows disabling write merge. - // - // The default is false. - NoWriteMerge bool - - // Sync is whether to sync underlying writes from the OS buffer cache - // through to actual disk, if applicable. Setting Sync can result in - // slower writes. - // - // If false, and the machine crashes, then some recent writes may be lost. - // Note that if it is just the process that crashes (and the machine does - // not) then no writes will be lost. - // - // In other words, Sync being false has the same semantics as a write - // system call. Sync being true means write followed by fsync. - // - // The default value is false. - Sync bool -} - -func (wo *WriteOptions) GetNoWriteMerge() bool { - if wo == nil { - return false - } - return wo.NoWriteMerge -} - -func (wo *WriteOptions) GetSync() bool { - if wo == nil { - return false - } - return wo.Sync -} - -func GetStrict(o *Options, ro *ReadOptions, strict Strict) bool { - if ro.GetStrict(StrictOverride) { - return ro.GetStrict(strict) - } else { - return o.GetStrict(strict) || ro.GetStrict(strict) - } -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/options.go b/vendor/github.com/pingcap/goleveldb/leveldb/options.go deleted file mode 100644 index 67135b3..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/options.go +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "github.com/pingcap/goleveldb/leveldb/filter" - "github.com/pingcap/goleveldb/leveldb/opt" -) - -func dupOptions(o *opt.Options) *opt.Options { - newo := &opt.Options{} - if o != nil { - *newo = *o - } - if newo.Strict == 0 { - newo.Strict = opt.DefaultStrict - } - return newo -} - -func (s *session) setOptions(o *opt.Options) { - no := dupOptions(o) - // Alternative filters. - if filters := o.GetAltFilters(); len(filters) > 0 { - no.AltFilters = make([]filter.Filter, len(filters)) - for i, filter := range filters { - no.AltFilters[i] = &iFilter{filter} - } - } - // Comparer. - s.icmp = &iComparer{o.GetComparer()} - no.Comparer = s.icmp - // Filter. - if filter := o.GetFilter(); filter != nil { - no.Filter = &iFilter{filter} - } - - s.o = &cachedOptions{Options: no} - s.o.cache() -} - -const optCachedLevel = 7 - -type cachedOptions struct { - *opt.Options - - compactionExpandLimit []int - compactionGPOverlaps []int - compactionSourceLimit []int - compactionTableSize []int - compactionTotalSize []int64 -} - -func (co *cachedOptions) cache() { - co.compactionExpandLimit = make([]int, optCachedLevel) - co.compactionGPOverlaps = make([]int, optCachedLevel) - co.compactionSourceLimit = make([]int, optCachedLevel) - co.compactionTableSize = make([]int, optCachedLevel) - co.compactionTotalSize = make([]int64, optCachedLevel) - - for level := 0; level < optCachedLevel; level++ { - co.compactionExpandLimit[level] = co.Options.GetCompactionExpandLimit(level) - co.compactionGPOverlaps[level] = co.Options.GetCompactionGPOverlaps(level) - co.compactionSourceLimit[level] = co.Options.GetCompactionSourceLimit(level) - co.compactionTableSize[level] = co.Options.GetCompactionTableSize(level) - co.compactionTotalSize[level] = co.Options.GetCompactionTotalSize(level) - } -} - -func (co *cachedOptions) GetCompactionExpandLimit(level int) int { - if level < optCachedLevel { - return co.compactionExpandLimit[level] - } - return co.Options.GetCompactionExpandLimit(level) -} - -func (co *cachedOptions) GetCompactionGPOverlaps(level int) int { - if level < optCachedLevel { - return co.compactionGPOverlaps[level] - } - return co.Options.GetCompactionGPOverlaps(level) -} - -func (co *cachedOptions) GetCompactionSourceLimit(level int) int { - if level < optCachedLevel { - return co.compactionSourceLimit[level] - } - return co.Options.GetCompactionSourceLimit(level) -} - -func (co *cachedOptions) GetCompactionTableSize(level int) int { - if level < optCachedLevel { - return co.compactionTableSize[level] - } - return co.Options.GetCompactionTableSize(level) -} - -func (co *cachedOptions) GetCompactionTotalSize(level int) int64 { - if level < optCachedLevel { - return co.compactionTotalSize[level] - } - return co.Options.GetCompactionTotalSize(level) -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/session.go b/vendor/github.com/pingcap/goleveldb/leveldb/session.go deleted file mode 100644 index c40a615..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/session.go +++ /dev/null @@ -1,210 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "fmt" - "io" - "os" - "sync" - - "github.com/pingcap/goleveldb/leveldb/errors" - "github.com/pingcap/goleveldb/leveldb/journal" - "github.com/pingcap/goleveldb/leveldb/opt" - "github.com/pingcap/goleveldb/leveldb/storage" -) - -// ErrManifestCorrupted records manifest corruption. This error will be -// wrapped with errors.ErrCorrupted. -type ErrManifestCorrupted struct { - Field string - Reason string -} - -func (e *ErrManifestCorrupted) Error() string { - return fmt.Sprintf("leveldb: manifest corrupted (field '%s'): %s", e.Field, e.Reason) -} - -func newErrManifestCorrupted(fd storage.FileDesc, field, reason string) error { - return errors.NewErrCorrupted(fd, &ErrManifestCorrupted{field, reason}) -} - -// session represent a persistent database session. -type session struct { - // Need 64-bit alignment. - stNextFileNum int64 // current unused file number - stJournalNum int64 // current journal file number; need external synchronization - stPrevJournalNum int64 // prev journal file number; no longer used; for compatibility with older version of leveldb - stTempFileNum int64 - stSeqNum uint64 // last mem compacted seq; need external synchronization - - stor storage.Storage - storLock storage.Locker - o *cachedOptions - icmp *iComparer - tops *tOps - fileRef map[int64]int - - manifest *journal.Writer - manifestWriter storage.Writer - manifestFd storage.FileDesc - - stCompPtrs []internalKey // compaction pointers; need external synchronization - stVersion *version // current version - vmu sync.Mutex -} - -// Creates new initialized session instance. -func newSession(stor storage.Storage, o *opt.Options) (s *session, err error) { - if stor == nil { - return nil, os.ErrInvalid - } - storLock, err := stor.Lock() - if err != nil { - return - } - s = &session{ - stor: stor, - storLock: storLock, - fileRef: make(map[int64]int), - } - s.setOptions(o) - s.tops = newTableOps(s) - s.setVersion(newVersion(s)) - s.log("log@legend F·NumFile S·FileSize N·Entry C·BadEntry B·BadBlock Ke·KeyError D·DroppedEntry L·Level Q·SeqNum T·TimeElapsed") - return -} - -// Close session. -func (s *session) close() { - s.tops.close() - if s.manifest != nil { - s.manifest.Close() - } - if s.manifestWriter != nil { - s.manifestWriter.Close() - } - s.manifest = nil - s.manifestWriter = nil - s.setVersion(&version{s: s, closing: true}) -} - -// Release session lock. -func (s *session) release() { - s.storLock.Unlock() -} - -// Create a new database session; need external synchronization. -func (s *session) create() error { - // create manifest - return s.newManifest(nil, nil) -} - -// Recover a database session; need external synchronization. -func (s *session) recover() (err error) { - defer func() { - if os.IsNotExist(err) { - // Don't return os.ErrNotExist if the underlying storage contains - // other files that belong to LevelDB. So the DB won't get trashed. - if fds, _ := s.stor.List(storage.TypeAll); len(fds) > 0 { - err = &errors.ErrCorrupted{Fd: storage.FileDesc{Type: storage.TypeManifest}, Err: &errors.ErrMissingFiles{}} - } - } - }() - - fd, err := s.stor.GetMeta() - if err != nil { - return - } - - reader, err := s.stor.Open(fd) - if err != nil { - return - } - defer reader.Close() - - var ( - // Options. - strict = s.o.GetStrict(opt.StrictManifest) - - jr = journal.NewReader(reader, dropper{s, fd}, strict, true) - rec = &sessionRecord{} - staging = s.stVersion.newStaging() - ) - for { - var r io.Reader - r, err = jr.Next() - if err != nil { - if err == io.EOF { - err = nil - break - } - return errors.SetFd(err, fd) - } - - err = rec.decode(r) - if err == nil { - // save compact pointers - for _, r := range rec.compPtrs { - s.setCompPtr(r.level, internalKey(r.ikey)) - } - // commit record to version staging - staging.commit(rec) - } else { - err = errors.SetFd(err, fd) - if strict || !errors.IsCorrupted(err) { - return - } - s.logf("manifest error: %v (skipped)", errors.SetFd(err, fd)) - } - rec.resetCompPtrs() - rec.resetAddedTables() - rec.resetDeletedTables() - } - - switch { - case !rec.has(recComparer): - return newErrManifestCorrupted(fd, "comparer", "missing") - case rec.comparer != s.icmp.uName(): - return newErrManifestCorrupted(fd, "comparer", fmt.Sprintf("mismatch: want '%s', got '%s'", s.icmp.uName(), rec.comparer)) - case !rec.has(recNextFileNum): - return newErrManifestCorrupted(fd, "next-file-num", "missing") - case !rec.has(recJournalNum): - return newErrManifestCorrupted(fd, "journal-file-num", "missing") - case !rec.has(recSeqNum): - return newErrManifestCorrupted(fd, "seq-num", "missing") - } - - s.manifestFd = fd - s.setVersion(staging.finish()) - s.setNextFileNum(rec.nextFileNum) - s.recordCommited(rec) - return nil -} - -// Commit session; need external synchronization. -func (s *session) commit(r *sessionRecord) (err error) { - v := s.version() - defer v.release() - - // spawn new version based on current version - nv := v.spawn(r) - - if s.manifest == nil { - // manifest journal writer not yet created, create one - err = s.newManifest(r, nv) - } else { - err = s.flushManifest(r) - } - - // finally, apply new version if no error rise - if err == nil { - s.setVersion(nv) - } - - return -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/session_compaction.go b/vendor/github.com/pingcap/goleveldb/leveldb/session_compaction.go deleted file mode 100644 index 5de3b3f..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/session_compaction.go +++ /dev/null @@ -1,302 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "sync/atomic" - - "github.com/pingcap/goleveldb/leveldb/iterator" - "github.com/pingcap/goleveldb/leveldb/memdb" - "github.com/pingcap/goleveldb/leveldb/opt" -) - -func (s *session) pickMemdbLevel(umin, umax []byte, maxLevel int) int { - v := s.version() - defer v.release() - return v.pickMemdbLevel(umin, umax, maxLevel) -} - -func (s *session) flushMemdb(rec *sessionRecord, mdb *memdb.DB, maxLevel int) (int, error) { - // Create sorted table. - iter := mdb.NewIterator(nil) - defer iter.Release() - t, n, err := s.tops.createFrom(iter) - if err != nil { - return 0, err - } - - // Pick level other than zero can cause compaction issue with large - // bulk insert and delete on strictly incrementing key-space. The - // problem is that the small deletion markers trapped at lower level, - // while key/value entries keep growing at higher level. Since the - // key-space is strictly incrementing it will not overlaps with - // higher level, thus maximum possible level is always picked, while - // overlapping deletion marker pushed into lower level. - // See: https://github.com/pingcap/goleveldb/issues/127. - flushLevel := s.pickMemdbLevel(t.imin.ukey(), t.imax.ukey(), maxLevel) - rec.addTableFile(flushLevel, t) - - s.logf("memdb@flush created L%d@%d N·%d S·%s %q:%q", flushLevel, t.fd.Num, n, shortenb(int(t.size)), t.imin, t.imax) - return flushLevel, nil -} - -// Pick a compaction based on current state; need external synchronization. -func (s *session) pickCompaction() *compaction { - v := s.version() - - var sourceLevel int - var t0 tFiles - if v.cScore >= 1 { - sourceLevel = v.cLevel - cptr := s.getCompPtr(sourceLevel) - tables := v.levels[sourceLevel] - for _, t := range tables { - if cptr == nil || s.icmp.Compare(t.imax, cptr) > 0 { - t0 = append(t0, t) - break - } - } - if len(t0) == 0 { - t0 = append(t0, tables[0]) - } - } else { - if p := atomic.LoadPointer(&v.cSeek); p != nil { - ts := (*tSet)(p) - sourceLevel = ts.level - t0 = append(t0, ts.table) - } else { - v.release() - return nil - } - } - - return newCompaction(s, v, sourceLevel, t0) -} - -// Create compaction from given level and range; need external synchronization. -func (s *session) getCompactionRange(sourceLevel int, umin, umax []byte, noLimit bool) *compaction { - v := s.version() - - if sourceLevel >= len(v.levels) { - v.release() - return nil - } - - t0 := v.levels[sourceLevel].getOverlaps(nil, s.icmp, umin, umax, sourceLevel == 0) - if len(t0) == 0 { - v.release() - return nil - } - - // Avoid compacting too much in one shot in case the range is large. - // But we cannot do this for level-0 since level-0 files can overlap - // and we must not pick one file and drop another older file if the - // two files overlap. - if !noLimit && sourceLevel > 0 { - limit := int64(v.s.o.GetCompactionSourceLimit(sourceLevel)) - total := int64(0) - for i, t := range t0 { - total += t.size - if total >= limit { - s.logf("table@compaction limiting F·%d -> F·%d", len(t0), i+1) - t0 = t0[:i+1] - break - } - } - } - - return newCompaction(s, v, sourceLevel, t0) -} - -func newCompaction(s *session, v *version, sourceLevel int, t0 tFiles) *compaction { - c := &compaction{ - s: s, - v: v, - sourceLevel: sourceLevel, - levels: [2]tFiles{t0, nil}, - maxGPOverlaps: int64(s.o.GetCompactionGPOverlaps(sourceLevel)), - tPtrs: make([]int, len(v.levels)), - } - c.expand() - c.save() - return c -} - -// compaction represent a compaction state. -type compaction struct { - s *session - v *version - - sourceLevel int - levels [2]tFiles - maxGPOverlaps int64 - - gp tFiles - gpi int - seenKey bool - gpOverlappedBytes int64 - imin, imax internalKey - tPtrs []int - released bool - - snapGPI int - snapSeenKey bool - snapGPOverlappedBytes int64 - snapTPtrs []int -} - -func (c *compaction) save() { - c.snapGPI = c.gpi - c.snapSeenKey = c.seenKey - c.snapGPOverlappedBytes = c.gpOverlappedBytes - c.snapTPtrs = append(c.snapTPtrs[:0], c.tPtrs...) -} - -func (c *compaction) restore() { - c.gpi = c.snapGPI - c.seenKey = c.snapSeenKey - c.gpOverlappedBytes = c.snapGPOverlappedBytes - c.tPtrs = append(c.tPtrs[:0], c.snapTPtrs...) -} - -func (c *compaction) release() { - if !c.released { - c.released = true - c.v.release() - } -} - -// Expand compacted tables; need external synchronization. -func (c *compaction) expand() { - limit := int64(c.s.o.GetCompactionExpandLimit(c.sourceLevel)) - vt0 := c.v.levels[c.sourceLevel] - vt1 := tFiles{} - if level := c.sourceLevel + 1; level < len(c.v.levels) { - vt1 = c.v.levels[level] - } - - t0, t1 := c.levels[0], c.levels[1] - imin, imax := t0.getRange(c.s.icmp) - // We expand t0 here just incase ukey hop across tables. - t0 = vt0.getOverlaps(t0, c.s.icmp, imin.ukey(), imax.ukey(), c.sourceLevel == 0) - if len(t0) != len(c.levels[0]) { - imin, imax = t0.getRange(c.s.icmp) - } - t1 = vt1.getOverlaps(t1, c.s.icmp, imin.ukey(), imax.ukey(), false) - // Get entire range covered by compaction. - amin, amax := append(t0, t1...).getRange(c.s.icmp) - - // See if we can grow the number of inputs in "sourceLevel" without - // changing the number of "sourceLevel+1" files we pick up. - if len(t1) > 0 { - exp0 := vt0.getOverlaps(nil, c.s.icmp, amin.ukey(), amax.ukey(), c.sourceLevel == 0) - if len(exp0) > len(t0) && t1.size()+exp0.size() < limit { - xmin, xmax := exp0.getRange(c.s.icmp) - exp1 := vt1.getOverlaps(nil, c.s.icmp, xmin.ukey(), xmax.ukey(), false) - if len(exp1) == len(t1) { - c.s.logf("table@compaction expanding L%d+L%d (F·%d S·%s)+(F·%d S·%s) -> (F·%d S·%s)+(F·%d S·%s)", - c.sourceLevel, c.sourceLevel+1, len(t0), shortenb(int(t0.size())), len(t1), shortenb(int(t1.size())), - len(exp0), shortenb(int(exp0.size())), len(exp1), shortenb(int(exp1.size()))) - imin, imax = xmin, xmax - t0, t1 = exp0, exp1 - amin, amax = append(t0, t1...).getRange(c.s.icmp) - } - } - } - - // Compute the set of grandparent files that overlap this compaction - // (parent == sourceLevel+1; grandparent == sourceLevel+2) - if level := c.sourceLevel + 2; level < len(c.v.levels) { - c.gp = c.v.levels[level].getOverlaps(c.gp, c.s.icmp, amin.ukey(), amax.ukey(), false) - } - - c.levels[0], c.levels[1] = t0, t1 - c.imin, c.imax = imin, imax -} - -// Check whether compaction is trivial. -func (c *compaction) trivial() bool { - return len(c.levels[0]) == 1 && len(c.levels[1]) == 0 && c.gp.size() <= c.maxGPOverlaps -} - -func (c *compaction) baseLevelForKey(ukey []byte) bool { - for level := c.sourceLevel + 2; level < len(c.v.levels); level++ { - tables := c.v.levels[level] - for c.tPtrs[level] < len(tables) { - t := tables[c.tPtrs[level]] - if c.s.icmp.uCompare(ukey, t.imax.ukey()) <= 0 { - // We've advanced far enough. - if c.s.icmp.uCompare(ukey, t.imin.ukey()) >= 0 { - // Key falls in this file's range, so definitely not base level. - return false - } - break - } - c.tPtrs[level]++ - } - } - return true -} - -func (c *compaction) shouldStopBefore(ikey internalKey) bool { - for ; c.gpi < len(c.gp); c.gpi++ { - gp := c.gp[c.gpi] - if c.s.icmp.Compare(ikey, gp.imax) <= 0 { - break - } - if c.seenKey { - c.gpOverlappedBytes += gp.size - } - } - c.seenKey = true - - if c.gpOverlappedBytes > c.maxGPOverlaps { - // Too much overlap for current output; start new output. - c.gpOverlappedBytes = 0 - return true - } - return false -} - -// Creates an iterator. -func (c *compaction) newIterator() iterator.Iterator { - // Creates iterator slice. - icap := len(c.levels) - if c.sourceLevel == 0 { - // Special case for level-0. - icap = len(c.levels[0]) + 1 - } - its := make([]iterator.Iterator, 0, icap) - - // Options. - ro := &opt.ReadOptions{ - DontFillCache: true, - Strict: opt.StrictOverride, - } - strict := c.s.o.GetStrict(opt.StrictCompaction) - if strict { - ro.Strict |= opt.StrictReader - } - - for i, tables := range c.levels { - if len(tables) == 0 { - continue - } - - // Level-0 is not sorted and may overlaps each other. - if c.sourceLevel+i == 0 { - for _, t := range tables { - its = append(its, c.s.tops.newIterator(t, nil, ro)) - } - } else { - it := iterator.NewIndexedIterator(tables.newIndexIterator(c.s.tops, c.s.icmp, nil, ro), strict) - its = append(its, it) - } - } - - return iterator.NewMergedIterator(its, c.s.icmp, strict) -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/session_record.go b/vendor/github.com/pingcap/goleveldb/leveldb/session_record.go deleted file mode 100644 index 5c22d8a..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/session_record.go +++ /dev/null @@ -1,323 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "bufio" - "encoding/binary" - "io" - "strings" - - "github.com/pingcap/goleveldb/leveldb/errors" - "github.com/pingcap/goleveldb/leveldb/storage" -) - -type byteReader interface { - io.Reader - io.ByteReader -} - -// These numbers are written to disk and should not be changed. -const ( - recComparer = 1 - recJournalNum = 2 - recNextFileNum = 3 - recSeqNum = 4 - recCompPtr = 5 - recDelTable = 6 - recAddTable = 7 - // 8 was used for large value refs - recPrevJournalNum = 9 -) - -type cpRecord struct { - level int - ikey internalKey -} - -type atRecord struct { - level int - num int64 - size int64 - imin internalKey - imax internalKey -} - -type dtRecord struct { - level int - num int64 -} - -type sessionRecord struct { - hasRec int - comparer string - journalNum int64 - prevJournalNum int64 - nextFileNum int64 - seqNum uint64 - compPtrs []cpRecord - addedTables []atRecord - deletedTables []dtRecord - - scratch [binary.MaxVarintLen64]byte - err error -} - -func (p *sessionRecord) has(rec int) bool { - return p.hasRec&(1< -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "fmt" - "sync/atomic" - - "github.com/pingcap/goleveldb/leveldb/journal" - "github.com/pingcap/goleveldb/leveldb/storage" -) - -// Logging. - -type dropper struct { - s *session - fd storage.FileDesc -} - -func (d dropper) Drop(err error) { - if e, ok := err.(*journal.ErrCorrupted); ok { - d.s.logf("journal@drop %s-%d S·%s %q", d.fd.Type, d.fd.Num, shortenb(e.Size), e.Reason) - } else { - d.s.logf("journal@drop %s-%d %q", d.fd.Type, d.fd.Num, err) - } -} - -func (s *session) log(v ...interface{}) { s.stor.Log(fmt.Sprint(v...)) } -func (s *session) logf(format string, v ...interface{}) { s.stor.Log(fmt.Sprintf(format, v...)) } - -// File utils. - -func (s *session) newTemp() storage.FileDesc { - num := atomic.AddInt64(&s.stTempFileNum, 1) - 1 - return storage.FileDesc{storage.TypeTemp, num} -} - -func (s *session) addFileRef(fd storage.FileDesc, ref int) int { - ref += s.fileRef[fd.Num] - if ref > 0 { - s.fileRef[fd.Num] = ref - } else if ref == 0 { - delete(s.fileRef, fd.Num) - } else { - panic(fmt.Sprintf("negative ref: %v", fd)) - } - return ref -} - -// Session state. - -// Get current version. This will incr version ref, must call -// version.release (exactly once) after use. -func (s *session) version() *version { - s.vmu.Lock() - defer s.vmu.Unlock() - s.stVersion.incref() - return s.stVersion -} - -func (s *session) tLen(level int) int { - s.vmu.Lock() - defer s.vmu.Unlock() - return s.stVersion.tLen(level) -} - -// Set current version to v. -func (s *session) setVersion(v *version) { - s.vmu.Lock() - defer s.vmu.Unlock() - // Hold by session. It is important to call this first before releasing - // current version, otherwise the still used files might get released. - v.incref() - if s.stVersion != nil { - // Release current version. - s.stVersion.releaseNB() - } - s.stVersion = v -} - -// Get current unused file number. -func (s *session) nextFileNum() int64 { - return atomic.LoadInt64(&s.stNextFileNum) -} - -// Set current unused file number to num. -func (s *session) setNextFileNum(num int64) { - atomic.StoreInt64(&s.stNextFileNum, num) -} - -// Mark file number as used. -func (s *session) markFileNum(num int64) { - nextFileNum := num + 1 - for { - old, x := s.stNextFileNum, nextFileNum - if old > x { - x = old - } - if atomic.CompareAndSwapInt64(&s.stNextFileNum, old, x) { - break - } - } -} - -// Allocate a file number. -func (s *session) allocFileNum() int64 { - return atomic.AddInt64(&s.stNextFileNum, 1) - 1 -} - -// Reuse given file number. -func (s *session) reuseFileNum(num int64) { - for { - old, x := s.stNextFileNum, num - if old != x+1 { - x = old - } - if atomic.CompareAndSwapInt64(&s.stNextFileNum, old, x) { - break - } - } -} - -// Set compaction ptr at given level; need external synchronization. -func (s *session) setCompPtr(level int, ik internalKey) { - if level >= len(s.stCompPtrs) { - newCompPtrs := make([]internalKey, level+1) - copy(newCompPtrs, s.stCompPtrs) - s.stCompPtrs = newCompPtrs - } - s.stCompPtrs[level] = append(internalKey{}, ik...) -} - -// Get compaction ptr at given level; need external synchronization. -func (s *session) getCompPtr(level int) internalKey { - if level >= len(s.stCompPtrs) { - return nil - } - return s.stCompPtrs[level] -} - -// Manifest related utils. - -// Fill given session record obj with current states; need external -// synchronization. -func (s *session) fillRecord(r *sessionRecord, snapshot bool) { - r.setNextFileNum(s.nextFileNum()) - - if snapshot { - if !r.has(recJournalNum) { - r.setJournalNum(s.stJournalNum) - } - - if !r.has(recSeqNum) { - r.setSeqNum(s.stSeqNum) - } - - for level, ik := range s.stCompPtrs { - if ik != nil { - r.addCompPtr(level, ik) - } - } - - r.setComparer(s.icmp.uName()) - } -} - -// Mark if record has been committed, this will update session state; -// need external synchronization. -func (s *session) recordCommited(rec *sessionRecord) { - if rec.has(recJournalNum) { - s.stJournalNum = rec.journalNum - } - - if rec.has(recPrevJournalNum) { - s.stPrevJournalNum = rec.prevJournalNum - } - - if rec.has(recSeqNum) { - s.stSeqNum = rec.seqNum - } - - for _, r := range rec.compPtrs { - s.setCompPtr(r.level, internalKey(r.ikey)) - } -} - -// Create a new manifest file; need external synchronization. -func (s *session) newManifest(rec *sessionRecord, v *version) (err error) { - fd := storage.FileDesc{storage.TypeManifest, s.allocFileNum()} - writer, err := s.stor.Create(fd) - if err != nil { - return - } - jw := journal.NewWriter(writer) - - if v == nil { - v = s.version() - defer v.release() - } - if rec == nil { - rec = &sessionRecord{} - } - s.fillRecord(rec, true) - v.fillRecord(rec) - - defer func() { - if err == nil { - s.recordCommited(rec) - if s.manifest != nil { - s.manifest.Close() - } - if s.manifestWriter != nil { - s.manifestWriter.Close() - } - if !s.manifestFd.Zero() { - s.stor.Remove(s.manifestFd) - } - s.manifestFd = fd - s.manifestWriter = writer - s.manifest = jw - } else { - writer.Close() - s.stor.Remove(fd) - s.reuseFileNum(fd.Num) - } - }() - - w, err := jw.Next() - if err != nil { - return - } - err = rec.encode(w) - if err != nil { - return - } - err = jw.Flush() - if err != nil { - return - } - err = s.stor.SetMeta(fd) - return -} - -// Flush record to disk. -func (s *session) flushManifest(rec *sessionRecord) (err error) { - s.fillRecord(rec, false) - w, err := s.manifest.Next() - if err != nil { - return - } - err = rec.encode(w) - if err != nil { - return - } - err = s.manifest.Flush() - if err != nil { - return - } - if !s.o.GetNoSync() { - err = s.manifestWriter.Sync() - if err != nil { - return - } - } - s.recordCommited(rec) - return -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/storage/file_storage.go b/vendor/github.com/pingcap/goleveldb/leveldb/storage/file_storage.go deleted file mode 100644 index 1189dec..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/storage/file_storage.go +++ /dev/null @@ -1,599 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reservefs. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package storage - -import ( - "errors" - "fmt" - "io/ioutil" - "os" - "path/filepath" - "runtime" - "strconv" - "strings" - "sync" - "time" -) - -var ( - errFileOpen = errors.New("leveldb/storage: file still open") - errReadOnly = errors.New("leveldb/storage: storage is read-only") -) - -type fileLock interface { - release() error -} - -type fileStorageLock struct { - fs *fileStorage -} - -func (lock *fileStorageLock) Unlock() { - if lock.fs != nil { - lock.fs.mu.Lock() - defer lock.fs.mu.Unlock() - if lock.fs.slock == lock { - lock.fs.slock = nil - } - } -} - -const logSizeThreshold = 1024 * 1024 // 1 MiB - -// fileStorage is a file-system backed storage. -type fileStorage struct { - path string - readOnly bool - - mu sync.Mutex - flock fileLock - slock *fileStorageLock - logw *os.File - logSize int64 - buf []byte - // Opened file counter; if open < 0 means closed. - open int - day int -} - -// OpenFile returns a new filesytem-backed storage implementation with the given -// path. This also acquire a file lock, so any subsequent attempt to open the -// same path will fail. -// -// The storage must be closed after use, by calling Close method. -func OpenFile(path string, readOnly bool) (Storage, error) { - if fi, err := os.Stat(path); err == nil { - if !fi.IsDir() { - return nil, fmt.Errorf("leveldb/storage: open %s: not a directory", path) - } - } else if os.IsNotExist(err) && !readOnly { - if err := os.MkdirAll(path, 0755); err != nil { - return nil, err - } - } else { - return nil, err - } - - flock, err := newFileLock(filepath.Join(path, "LOCK"), readOnly) - if err != nil { - return nil, err - } - - defer func() { - if err != nil { - flock.release() - } - }() - - var ( - logw *os.File - logSize int64 - ) - if !readOnly { - logw, err = os.OpenFile(filepath.Join(path, "LOG"), os.O_WRONLY|os.O_CREATE, 0644) - if err != nil { - return nil, err - } - logSize, err = logw.Seek(0, os.SEEK_END) - if err != nil { - logw.Close() - return nil, err - } - } - - fs := &fileStorage{ - path: path, - readOnly: readOnly, - flock: flock, - logw: logw, - logSize: logSize, - } - runtime.SetFinalizer(fs, (*fileStorage).Close) - return fs, nil -} - -func (fs *fileStorage) Lock() (Locker, error) { - fs.mu.Lock() - defer fs.mu.Unlock() - if fs.open < 0 { - return nil, ErrClosed - } - if fs.readOnly { - return &fileStorageLock{}, nil - } - if fs.slock != nil { - return nil, ErrLocked - } - fs.slock = &fileStorageLock{fs: fs} - return fs.slock, nil -} - -func itoa(buf []byte, i int, wid int) []byte { - u := uint(i) - if u == 0 && wid <= 1 { - return append(buf, '0') - } - - // Assemble decimal in reverse order. - var b [32]byte - bp := len(b) - for ; u > 0 || wid > 0; u /= 10 { - bp-- - wid-- - b[bp] = byte(u%10) + '0' - } - return append(buf, b[bp:]...) -} - -func (fs *fileStorage) printDay(t time.Time) { - if fs.day == t.Day() { - return - } - fs.day = t.Day() - fs.logw.Write([]byte("=============== " + t.Format("Jan 2, 2006 (MST)") + " ===============\n")) -} - -func (fs *fileStorage) doLog(t time.Time, str string) { - if fs.logSize > logSizeThreshold { - // Rotate log file. - fs.logw.Close() - fs.logw = nil - fs.logSize = 0 - rename(filepath.Join(fs.path, "LOG"), filepath.Join(fs.path, "LOG.old")) - } - if fs.logw == nil { - var err error - fs.logw, err = os.OpenFile(filepath.Join(fs.path, "LOG"), os.O_WRONLY|os.O_CREATE, 0644) - if err != nil { - return - } - // Force printDay on new log file. - fs.day = 0 - } - fs.printDay(t) - hour, min, sec := t.Clock() - msec := t.Nanosecond() / 1e3 - // time - fs.buf = itoa(fs.buf[:0], hour, 2) - fs.buf = append(fs.buf, ':') - fs.buf = itoa(fs.buf, min, 2) - fs.buf = append(fs.buf, ':') - fs.buf = itoa(fs.buf, sec, 2) - fs.buf = append(fs.buf, '.') - fs.buf = itoa(fs.buf, msec, 6) - fs.buf = append(fs.buf, ' ') - // write - fs.buf = append(fs.buf, []byte(str)...) - fs.buf = append(fs.buf, '\n') - fs.logw.Write(fs.buf) -} - -func (fs *fileStorage) Log(str string) { - if !fs.readOnly { - t := time.Now() - fs.mu.Lock() - defer fs.mu.Unlock() - if fs.open < 0 { - return - } - fs.doLog(t, str) - } -} - -func (fs *fileStorage) log(str string) { - if !fs.readOnly { - fs.doLog(time.Now(), str) - } -} - -func (fs *fileStorage) SetMeta(fd FileDesc) (err error) { - if !FileDescOk(fd) { - return ErrInvalidFile - } - if fs.readOnly { - return errReadOnly - } - - fs.mu.Lock() - defer fs.mu.Unlock() - if fs.open < 0 { - return ErrClosed - } - defer func() { - if err != nil { - fs.log(fmt.Sprintf("CURRENT: %v", err)) - } - }() - path := fmt.Sprintf("%s.%d", filepath.Join(fs.path, "CURRENT"), fd.Num) - w, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) - if err != nil { - return - } - _, err = fmt.Fprintln(w, fsGenName(fd)) - if err != nil { - fs.log(fmt.Sprintf("write CURRENT.%d: %v", fd.Num, err)) - return - } - if err = w.Sync(); err != nil { - fs.log(fmt.Sprintf("flush CURRENT.%d: %v", fd.Num, err)) - return - } - if err = w.Close(); err != nil { - fs.log(fmt.Sprintf("close CURRENT.%d: %v", fd.Num, err)) - return - } - if err != nil { - return - } - if err = rename(path, filepath.Join(fs.path, "CURRENT")); err != nil { - fs.log(fmt.Sprintf("rename CURRENT.%d: %v", fd.Num, err)) - return - } - // Sync root directory. - if err = syncDir(fs.path); err != nil { - fs.log(fmt.Sprintf("syncDir: %v", err)) - } - return -} - -func (fs *fileStorage) GetMeta() (fd FileDesc, err error) { - fs.mu.Lock() - defer fs.mu.Unlock() - if fs.open < 0 { - return FileDesc{}, ErrClosed - } - dir, err := os.Open(fs.path) - if err != nil { - return - } - names, err := dir.Readdirnames(0) - // Close the dir first before checking for Readdirnames error. - if ce := dir.Close(); ce != nil { - fs.log(fmt.Sprintf("close dir: %v", ce)) - } - if err != nil { - return - } - // Find latest CURRENT file. - var rem []string - var pend bool - var cerr error - for _, name := range names { - if strings.HasPrefix(name, "CURRENT") { - pend1 := len(name) > 7 - var pendNum int64 - // Make sure it is valid name for a CURRENT file, otherwise skip it. - if pend1 { - if name[7] != '.' || len(name) < 9 { - fs.log(fmt.Sprintf("skipping %s: invalid file name", name)) - continue - } - var e1 error - if pendNum, e1 = strconv.ParseInt(name[8:], 10, 0); e1 != nil { - fs.log(fmt.Sprintf("skipping %s: invalid file num: %v", name, e1)) - continue - } - } - path := filepath.Join(fs.path, name) - r, e1 := os.OpenFile(path, os.O_RDONLY, 0) - if e1 != nil { - return FileDesc{}, e1 - } - b, e1 := ioutil.ReadAll(r) - if e1 != nil { - r.Close() - return FileDesc{}, e1 - } - var fd1 FileDesc - if len(b) < 1 || b[len(b)-1] != '\n' || !fsParseNamePtr(string(b[:len(b)-1]), &fd1) { - fs.log(fmt.Sprintf("skipping %s: corrupted or incomplete", name)) - if pend1 { - rem = append(rem, name) - } - if !pend1 || cerr == nil { - metaFd, _ := fsParseName(name) - cerr = &ErrCorrupted{ - Fd: metaFd, - Err: errors.New("leveldb/storage: corrupted or incomplete meta file"), - } - } - } else if pend1 && pendNum != fd1.Num { - fs.log(fmt.Sprintf("skipping %s: inconsistent pending-file num: %d vs %d", name, pendNum, fd1.Num)) - rem = append(rem, name) - } else if fd1.Num < fd.Num { - fs.log(fmt.Sprintf("skipping %s: obsolete", name)) - if pend1 { - rem = append(rem, name) - } - } else { - fd = fd1 - pend = pend1 - } - if err := r.Close(); err != nil { - fs.log(fmt.Sprintf("close %s: %v", name, err)) - } - } - } - // Don't remove any files if there is no valid CURRENT file. - if fd.Zero() { - if cerr != nil { - err = cerr - } else { - err = os.ErrNotExist - } - return - } - if !fs.readOnly { - // Rename pending CURRENT file to an effective CURRENT. - if pend { - path := fmt.Sprintf("%s.%d", filepath.Join(fs.path, "CURRENT"), fd.Num) - if err := rename(path, filepath.Join(fs.path, "CURRENT")); err != nil { - fs.log(fmt.Sprintf("CURRENT.%d -> CURRENT: %v", fd.Num, err)) - } - } - // Remove obsolete or incomplete pending CURRENT files. - for _, name := range rem { - path := filepath.Join(fs.path, name) - if err := os.Remove(path); err != nil { - fs.log(fmt.Sprintf("remove %s: %v", name, err)) - } - } - } - return -} - -func (fs *fileStorage) List(ft FileType) (fds []FileDesc, err error) { - fs.mu.Lock() - defer fs.mu.Unlock() - if fs.open < 0 { - return nil, ErrClosed - } - dir, err := os.Open(fs.path) - if err != nil { - return - } - names, err := dir.Readdirnames(0) - // Close the dir first before checking for Readdirnames error. - if cerr := dir.Close(); cerr != nil { - fs.log(fmt.Sprintf("close dir: %v", cerr)) - } - if err == nil { - for _, name := range names { - if fd, ok := fsParseName(name); ok && fd.Type&ft != 0 { - fds = append(fds, fd) - } - } - } - return -} - -func (fs *fileStorage) Open(fd FileDesc) (Reader, error) { - if !FileDescOk(fd) { - return nil, ErrInvalidFile - } - - fs.mu.Lock() - defer fs.mu.Unlock() - if fs.open < 0 { - return nil, ErrClosed - } - of, err := os.OpenFile(filepath.Join(fs.path, fsGenName(fd)), os.O_RDONLY, 0) - if err != nil { - if fsHasOldName(fd) && os.IsNotExist(err) { - of, err = os.OpenFile(filepath.Join(fs.path, fsGenOldName(fd)), os.O_RDONLY, 0) - if err == nil { - goto ok - } - } - return nil, err - } -ok: - fs.open++ - return &fileWrap{File: of, fs: fs, fd: fd}, nil -} - -func (fs *fileStorage) Create(fd FileDesc) (Writer, error) { - if !FileDescOk(fd) { - return nil, ErrInvalidFile - } - if fs.readOnly { - return nil, errReadOnly - } - - fs.mu.Lock() - defer fs.mu.Unlock() - if fs.open < 0 { - return nil, ErrClosed - } - of, err := os.OpenFile(filepath.Join(fs.path, fsGenName(fd)), os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) - if err != nil { - return nil, err - } - fs.open++ - return &fileWrap{File: of, fs: fs, fd: fd}, nil -} - -func (fs *fileStorage) Remove(fd FileDesc) error { - if !FileDescOk(fd) { - return ErrInvalidFile - } - if fs.readOnly { - return errReadOnly - } - - fs.mu.Lock() - defer fs.mu.Unlock() - if fs.open < 0 { - return ErrClosed - } - err := os.Remove(filepath.Join(fs.path, fsGenName(fd))) - if err != nil { - if fsHasOldName(fd) && os.IsNotExist(err) { - if e1 := os.Remove(filepath.Join(fs.path, fsGenOldName(fd))); !os.IsNotExist(e1) { - fs.log(fmt.Sprintf("remove %s: %v (old name)", fd, err)) - err = e1 - } - } else { - fs.log(fmt.Sprintf("remove %s: %v", fd, err)) - } - } - return err -} - -func (fs *fileStorage) Rename(oldfd, newfd FileDesc) error { - if !FileDescOk(oldfd) || !FileDescOk(newfd) { - return ErrInvalidFile - } - if oldfd == newfd { - return nil - } - if fs.readOnly { - return errReadOnly - } - - fs.mu.Lock() - defer fs.mu.Unlock() - if fs.open < 0 { - return ErrClosed - } - return rename(filepath.Join(fs.path, fsGenName(oldfd)), filepath.Join(fs.path, fsGenName(newfd))) -} - -func (fs *fileStorage) Close() error { - fs.mu.Lock() - defer fs.mu.Unlock() - if fs.open < 0 { - return ErrClosed - } - // Clear the finalizer. - runtime.SetFinalizer(fs, nil) - - if fs.open > 0 { - fs.log(fmt.Sprintf("close: warning, %d files still open", fs.open)) - } - fs.open = -1 - if fs.logw != nil { - fs.logw.Close() - } - return fs.flock.release() -} - -type fileWrap struct { - *os.File - fs *fileStorage - fd FileDesc - closed bool -} - -func (fw *fileWrap) Sync() error { - if err := fw.File.Sync(); err != nil { - return err - } - if fw.fd.Type == TypeManifest { - // Also sync parent directory if file type is manifest. - // See: https://code.google.com/p/leveldb/issues/detail?id=190. - if err := syncDir(fw.fs.path); err != nil { - fw.fs.log(fmt.Sprintf("syncDir: %v", err)) - return err - } - } - return nil -} - -func (fw *fileWrap) Close() error { - fw.fs.mu.Lock() - defer fw.fs.mu.Unlock() - if fw.closed { - return ErrClosed - } - fw.closed = true - fw.fs.open-- - err := fw.File.Close() - if err != nil { - fw.fs.log(fmt.Sprintf("close %s: %v", fw.fd, err)) - } - return err -} - -func fsGenName(fd FileDesc) string { - switch fd.Type { - case TypeManifest: - return fmt.Sprintf("MANIFEST-%06d", fd.Num) - case TypeJournal: - return fmt.Sprintf("%06d.log", fd.Num) - case TypeTable: - return fmt.Sprintf("%06d.ldb", fd.Num) - case TypeTemp: - return fmt.Sprintf("%06d.tmp", fd.Num) - default: - panic("invalid file type") - } -} - -func fsHasOldName(fd FileDesc) bool { - return fd.Type == TypeTable -} - -func fsGenOldName(fd FileDesc) string { - switch fd.Type { - case TypeTable: - return fmt.Sprintf("%06d.sst", fd.Num) - } - return fsGenName(fd) -} - -func fsParseName(name string) (fd FileDesc, ok bool) { - var tail string - _, err := fmt.Sscanf(name, "%d.%s", &fd.Num, &tail) - if err == nil { - switch tail { - case "log": - fd.Type = TypeJournal - case "ldb", "sst": - fd.Type = TypeTable - case "tmp": - fd.Type = TypeTemp - default: - return - } - return fd, true - } - n, _ := fmt.Sscanf(name, "MANIFEST-%d%s", &fd.Num, &tail) - if n == 1 { - fd.Type = TypeManifest - return fd, true - } - return -} - -func fsParseNamePtr(name string, fd *FileDesc) bool { - _fd, ok := fsParseName(name) - if fd != nil { - *fd = _fd - } - return ok -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/storage/file_storage_nacl.go b/vendor/github.com/pingcap/goleveldb/leveldb/storage/file_storage_nacl.go deleted file mode 100644 index 5545aee..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/storage/file_storage_nacl.go +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// +build nacl - -package storage - -import ( - "os" - "syscall" -) - -func newFileLock(path string, readOnly bool) (fl fileLock, err error) { - return nil, syscall.ENOTSUP -} - -func setFileLock(f *os.File, readOnly, lock bool) error { - return syscall.ENOTSUP -} - -func rename(oldpath, newpath string) error { - return syscall.ENOTSUP -} - -func isErrInvalid(err error) bool { - return false -} - -func syncDir(name string) error { - return syscall.ENOTSUP -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/storage/file_storage_plan9.go b/vendor/github.com/pingcap/goleveldb/leveldb/storage/file_storage_plan9.go deleted file mode 100644 index bab62bf..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/storage/file_storage_plan9.go +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package storage - -import ( - "os" - "path/filepath" -) - -type plan9FileLock struct { - f *os.File -} - -func (fl *plan9FileLock) release() error { - return fl.f.Close() -} - -func newFileLock(path string, readOnly bool) (fl fileLock, err error) { - var ( - flag int - perm os.FileMode - ) - if readOnly { - flag = os.O_RDONLY - } else { - flag = os.O_RDWR - perm = os.ModeExclusive - } - f, err := os.OpenFile(path, flag, perm) - if os.IsNotExist(err) { - f, err = os.OpenFile(path, flag|os.O_CREATE, perm|0644) - } - if err != nil { - return - } - fl = &plan9FileLock{f: f} - return -} - -func rename(oldpath, newpath string) error { - if _, err := os.Stat(newpath); err == nil { - if err := os.Remove(newpath); err != nil { - return err - } - } - - _, fname := filepath.Split(newpath) - return os.Rename(oldpath, fname) -} - -func syncDir(name string) error { - f, err := os.Open(name) - if err != nil { - return err - } - defer f.Close() - if err := f.Sync(); err != nil { - return err - } - return nil -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/storage/file_storage_solaris.go b/vendor/github.com/pingcap/goleveldb/leveldb/storage/file_storage_solaris.go deleted file mode 100644 index 79901ee..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/storage/file_storage_solaris.go +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// +build solaris - -package storage - -import ( - "os" - "syscall" -) - -type unixFileLock struct { - f *os.File -} - -func (fl *unixFileLock) release() error { - if err := setFileLock(fl.f, false, false); err != nil { - return err - } - return fl.f.Close() -} - -func newFileLock(path string, readOnly bool) (fl fileLock, err error) { - var flag int - if readOnly { - flag = os.O_RDONLY - } else { - flag = os.O_RDWR - } - f, err := os.OpenFile(path, flag, 0) - if os.IsNotExist(err) { - f, err = os.OpenFile(path, flag|os.O_CREATE, 0644) - } - if err != nil { - return - } - err = setFileLock(f, readOnly, true) - if err != nil { - f.Close() - return - } - fl = &unixFileLock{f: f} - return -} - -func setFileLock(f *os.File, readOnly, lock bool) error { - flock := syscall.Flock_t{ - Type: syscall.F_UNLCK, - Start: 0, - Len: 0, - Whence: 1, - } - if lock { - if readOnly { - flock.Type = syscall.F_RDLCK - } else { - flock.Type = syscall.F_WRLCK - } - } - return syscall.FcntlFlock(f.Fd(), syscall.F_SETLK, &flock) -} - -func rename(oldpath, newpath string) error { - return os.Rename(oldpath, newpath) -} - -func syncDir(name string) error { - f, err := os.Open(name) - if err != nil { - return err - } - defer f.Close() - if err := f.Sync(); err != nil { - return err - } - return nil -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/storage/file_storage_unix.go b/vendor/github.com/pingcap/goleveldb/leveldb/storage/file_storage_unix.go deleted file mode 100644 index 7e29915..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/storage/file_storage_unix.go +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// +build darwin dragonfly freebsd linux netbsd openbsd - -package storage - -import ( - "os" - "syscall" -) - -type unixFileLock struct { - f *os.File -} - -func (fl *unixFileLock) release() error { - if err := setFileLock(fl.f, false, false); err != nil { - return err - } - return fl.f.Close() -} - -func newFileLock(path string, readOnly bool) (fl fileLock, err error) { - var flag int - if readOnly { - flag = os.O_RDONLY - } else { - flag = os.O_RDWR - } - f, err := os.OpenFile(path, flag, 0) - if os.IsNotExist(err) { - f, err = os.OpenFile(path, flag|os.O_CREATE, 0644) - } - if err != nil { - return - } - err = setFileLock(f, readOnly, true) - if err != nil { - f.Close() - return - } - fl = &unixFileLock{f: f} - return -} - -func setFileLock(f *os.File, readOnly, lock bool) error { - how := syscall.LOCK_UN - if lock { - if readOnly { - how = syscall.LOCK_SH - } else { - how = syscall.LOCK_EX - } - } - return syscall.Flock(int(f.Fd()), how|syscall.LOCK_NB) -} - -func rename(oldpath, newpath string) error { - return os.Rename(oldpath, newpath) -} - -func isErrInvalid(err error) bool { - if err == os.ErrInvalid { - return true - } - if syserr, ok := err.(*os.SyscallError); ok && syserr.Err == syscall.EINVAL { - return true - } - return false -} - -func syncDir(name string) error { - f, err := os.Open(name) - if err != nil { - return err - } - defer f.Close() - if err := f.Sync(); err != nil && !isErrInvalid(err) { - return err - } - return nil -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/storage/file_storage_windows.go b/vendor/github.com/pingcap/goleveldb/leveldb/storage/file_storage_windows.go deleted file mode 100644 index 899335f..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/storage/file_storage_windows.go +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) 2013, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package storage - -import ( - "syscall" - "unsafe" -) - -var ( - modkernel32 = syscall.NewLazyDLL("kernel32.dll") - - procMoveFileExW = modkernel32.NewProc("MoveFileExW") -) - -const ( - _MOVEFILE_REPLACE_EXISTING = 1 -) - -type windowsFileLock struct { - fd syscall.Handle -} - -func (fl *windowsFileLock) release() error { - return syscall.Close(fl.fd) -} - -func newFileLock(path string, readOnly bool) (fl fileLock, err error) { - pathp, err := syscall.UTF16PtrFromString(path) - if err != nil { - return - } - var access, shareMode uint32 - if readOnly { - access = syscall.GENERIC_READ - shareMode = syscall.FILE_SHARE_READ - } else { - access = syscall.GENERIC_READ | syscall.GENERIC_WRITE - } - fd, err := syscall.CreateFile(pathp, access, shareMode, nil, syscall.OPEN_EXISTING, syscall.FILE_ATTRIBUTE_NORMAL, 0) - if err == syscall.ERROR_FILE_NOT_FOUND { - fd, err = syscall.CreateFile(pathp, access, shareMode, nil, syscall.OPEN_ALWAYS, syscall.FILE_ATTRIBUTE_NORMAL, 0) - } - if err != nil { - return - } - fl = &windowsFileLock{fd: fd} - return -} - -func moveFileEx(from *uint16, to *uint16, flags uint32) error { - r1, _, e1 := syscall.Syscall(procMoveFileExW.Addr(), 3, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to)), uintptr(flags)) - if r1 == 0 { - if e1 != 0 { - return error(e1) - } - return syscall.EINVAL - } - return nil -} - -func rename(oldpath, newpath string) error { - from, err := syscall.UTF16PtrFromString(oldpath) - if err != nil { - return err - } - to, err := syscall.UTF16PtrFromString(newpath) - if err != nil { - return err - } - return moveFileEx(from, to, _MOVEFILE_REPLACE_EXISTING) -} - -func syncDir(name string) error { return nil } diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/storage/mem_storage.go b/vendor/github.com/pingcap/goleveldb/leveldb/storage/mem_storage.go deleted file mode 100644 index 9b0421f..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/storage/mem_storage.go +++ /dev/null @@ -1,218 +0,0 @@ -// Copyright (c) 2013, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package storage - -import ( - "bytes" - "os" - "sync" -) - -const typeShift = 3 - -type memStorageLock struct { - ms *memStorage -} - -func (lock *memStorageLock) Unlock() { - ms := lock.ms - ms.mu.Lock() - defer ms.mu.Unlock() - if ms.slock == lock { - ms.slock = nil - } - return -} - -// memStorage is a memory-backed storage. -type memStorage struct { - mu sync.Mutex - slock *memStorageLock - files map[uint64]*memFile - meta FileDesc -} - -// NewMemStorage returns a new memory-backed storage implementation. -func NewMemStorage() Storage { - return &memStorage{ - files: make(map[uint64]*memFile), - } -} - -func (ms *memStorage) Lock() (Locker, error) { - ms.mu.Lock() - defer ms.mu.Unlock() - if ms.slock != nil { - return nil, ErrLocked - } - ms.slock = &memStorageLock{ms: ms} - return ms.slock, nil -} - -func (*memStorage) Log(str string) {} - -func (ms *memStorage) SetMeta(fd FileDesc) error { - if !FileDescOk(fd) { - return ErrInvalidFile - } - - ms.mu.Lock() - ms.meta = fd - ms.mu.Unlock() - return nil -} - -func (ms *memStorage) GetMeta() (FileDesc, error) { - ms.mu.Lock() - defer ms.mu.Unlock() - if ms.meta.Zero() { - return FileDesc{}, os.ErrNotExist - } - return ms.meta, nil -} - -func (ms *memStorage) List(ft FileType) ([]FileDesc, error) { - ms.mu.Lock() - var fds []FileDesc - for x := range ms.files { - fd := unpackFile(x) - if fd.Type&ft != 0 { - fds = append(fds, fd) - } - } - ms.mu.Unlock() - return fds, nil -} - -func (ms *memStorage) Open(fd FileDesc) (Reader, error) { - if !FileDescOk(fd) { - return nil, ErrInvalidFile - } - - ms.mu.Lock() - defer ms.mu.Unlock() - if m, exist := ms.files[packFile(fd)]; exist { - if m.open { - return nil, errFileOpen - } - m.open = true - return &memReader{Reader: bytes.NewReader(m.Bytes()), ms: ms, m: m}, nil - } - return nil, os.ErrNotExist -} - -func (ms *memStorage) Create(fd FileDesc) (Writer, error) { - if !FileDescOk(fd) { - return nil, ErrInvalidFile - } - - x := packFile(fd) - ms.mu.Lock() - defer ms.mu.Unlock() - m, exist := ms.files[x] - if exist { - if m.open { - return nil, errFileOpen - } - m.Reset() - } else { - m = &memFile{} - ms.files[x] = m - } - m.open = true - return &memWriter{memFile: m, ms: ms}, nil -} - -func (ms *memStorage) Remove(fd FileDesc) error { - if !FileDescOk(fd) { - return ErrInvalidFile - } - - x := packFile(fd) - ms.mu.Lock() - defer ms.mu.Unlock() - if _, exist := ms.files[x]; exist { - delete(ms.files, x) - return nil - } - return os.ErrNotExist -} - -func (ms *memStorage) Rename(oldfd, newfd FileDesc) error { - if FileDescOk(oldfd) || FileDescOk(newfd) { - return ErrInvalidFile - } - if oldfd == newfd { - return nil - } - - oldx := packFile(oldfd) - newx := packFile(newfd) - ms.mu.Lock() - defer ms.mu.Unlock() - oldm, exist := ms.files[oldx] - if !exist { - return os.ErrNotExist - } - newm, exist := ms.files[newx] - if (exist && newm.open) || oldm.open { - return errFileOpen - } - delete(ms.files, oldx) - ms.files[newx] = oldm - return nil -} - -func (*memStorage) Close() error { return nil } - -type memFile struct { - bytes.Buffer - open bool -} - -type memReader struct { - *bytes.Reader - ms *memStorage - m *memFile - closed bool -} - -func (mr *memReader) Close() error { - mr.ms.mu.Lock() - defer mr.ms.mu.Unlock() - if mr.closed { - return ErrClosed - } - mr.m.open = false - return nil -} - -type memWriter struct { - *memFile - ms *memStorage - closed bool -} - -func (*memWriter) Sync() error { return nil } - -func (mw *memWriter) Close() error { - mw.ms.mu.Lock() - defer mw.ms.mu.Unlock() - if mw.closed { - return ErrClosed - } - mw.memFile.open = false - return nil -} - -func packFile(fd FileDesc) uint64 { - return uint64(fd.Num)<> typeShift)} -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/storage/storage.go b/vendor/github.com/pingcap/goleveldb/leveldb/storage/storage.go deleted file mode 100644 index c16bce6..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/storage/storage.go +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Package storage provides storage abstraction for LevelDB. -package storage - -import ( - "errors" - "fmt" - "io" -) - -// FileType represent a file type. -type FileType int - -// File types. -const ( - TypeManifest FileType = 1 << iota - TypeJournal - TypeTable - TypeTemp - - TypeAll = TypeManifest | TypeJournal | TypeTable | TypeTemp -) - -func (t FileType) String() string { - switch t { - case TypeManifest: - return "manifest" - case TypeJournal: - return "journal" - case TypeTable: - return "table" - case TypeTemp: - return "temp" - } - return fmt.Sprintf("", t) -} - -// Common error. -var ( - ErrInvalidFile = errors.New("leveldb/storage: invalid file for argument") - ErrLocked = errors.New("leveldb/storage: already locked") - ErrClosed = errors.New("leveldb/storage: closed") -) - -// ErrCorrupted is the type that wraps errors that indicate corruption of -// a file. Package storage has its own type instead of using -// errors.ErrCorrupted to prevent circular import. -type ErrCorrupted struct { - Fd FileDesc - Err error -} - -func (e *ErrCorrupted) Error() string { - if !e.Fd.Zero() { - return fmt.Sprintf("%v [file=%v]", e.Err, e.Fd) - } - return e.Err.Error() -} - -// Syncer is the interface that wraps basic Sync method. -type Syncer interface { - // Sync commits the current contents of the file to stable storage. - Sync() error -} - -// Reader is the interface that groups the basic Read, Seek, ReadAt and Close -// methods. -type Reader interface { - io.ReadSeeker - io.ReaderAt - io.Closer -} - -// Writer is the interface that groups the basic Write, Sync and Close -// methods. -type Writer interface { - io.WriteCloser - Syncer -} - -// Locker is the interface that wraps Unlock method. -type Locker interface { - Unlock() -} - -// FileDesc is a 'file descriptor'. -type FileDesc struct { - Type FileType - Num int64 -} - -func (fd FileDesc) String() string { - switch fd.Type { - case TypeManifest: - return fmt.Sprintf("MANIFEST-%06d", fd.Num) - case TypeJournal: - return fmt.Sprintf("%06d.log", fd.Num) - case TypeTable: - return fmt.Sprintf("%06d.ldb", fd.Num) - case TypeTemp: - return fmt.Sprintf("%06d.tmp", fd.Num) - default: - return fmt.Sprintf("%#x-%d", fd.Type, fd.Num) - } -} - -// Zero returns true if fd == (FileDesc{}). -func (fd FileDesc) Zero() bool { - return fd == (FileDesc{}) -} - -// FileDescOk returns true if fd is a valid 'file descriptor'. -func FileDescOk(fd FileDesc) bool { - switch fd.Type { - case TypeManifest: - case TypeJournal: - case TypeTable: - case TypeTemp: - default: - return false - } - return fd.Num >= 0 -} - -// Storage is the storage. A storage instance must be safe for concurrent use. -type Storage interface { - // Lock locks the storage. Any subsequent attempt to call Lock will fail - // until the last lock released. - // Caller should call Unlock method after use. - Lock() (Locker, error) - - // Log logs a string. This is used for logging. - // An implementation may write to a file, stdout or simply do nothing. - Log(str string) - - // SetMeta store 'file descriptor' that can later be acquired using GetMeta - // method. The 'file descriptor' should point to a valid file. - // SetMeta should be implemented in such way that changes should happen - // atomically. - SetMeta(fd FileDesc) error - - // GetMeta returns 'file descriptor' stored in meta. The 'file descriptor' - // can be updated using SetMeta method. - // Returns os.ErrNotExist if meta doesn't store any 'file descriptor', or - // 'file descriptor' point to nonexistent file. - GetMeta() (FileDesc, error) - - // List returns file descriptors that match the given file types. - // The file types may be OR'ed together. - List(ft FileType) ([]FileDesc, error) - - // Open opens file with the given 'file descriptor' read-only. - // Returns os.ErrNotExist error if the file does not exist. - // Returns ErrClosed if the underlying storage is closed. - Open(fd FileDesc) (Reader, error) - - // Create creates file with the given 'file descriptor', truncate if already - // exist and opens write-only. - // Returns ErrClosed if the underlying storage is closed. - Create(fd FileDesc) (Writer, error) - - // Remove removes file with the given 'file descriptor'. - // Returns ErrClosed if the underlying storage is closed. - Remove(fd FileDesc) error - - // Rename renames file from oldfd to newfd. - // Returns ErrClosed if the underlying storage is closed. - Rename(oldfd, newfd FileDesc) error - - // Close closes the storage. - // It is valid to call Close multiple times. Other methods should not be - // called after the storage has been closed. - Close() error -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/table.go b/vendor/github.com/pingcap/goleveldb/leveldb/table.go deleted file mode 100644 index cab89b8..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/table.go +++ /dev/null @@ -1,529 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "fmt" - "sort" - "sync/atomic" - - "github.com/pingcap/goleveldb/leveldb/cache" - "github.com/pingcap/goleveldb/leveldb/iterator" - "github.com/pingcap/goleveldb/leveldb/opt" - "github.com/pingcap/goleveldb/leveldb/storage" - "github.com/pingcap/goleveldb/leveldb/table" - "github.com/pingcap/goleveldb/leveldb/util" -) - -// tFile holds basic information about a table. -type tFile struct { - fd storage.FileDesc - seekLeft int32 - size int64 - imin, imax internalKey -} - -// Returns true if given key is after largest key of this table. -func (t *tFile) after(icmp *iComparer, ukey []byte) bool { - return ukey != nil && icmp.uCompare(ukey, t.imax.ukey()) > 0 -} - -// Returns true if given key is before smallest key of this table. -func (t *tFile) before(icmp *iComparer, ukey []byte) bool { - return ukey != nil && icmp.uCompare(ukey, t.imin.ukey()) < 0 -} - -// Returns true if given key range overlaps with this table key range. -func (t *tFile) overlaps(icmp *iComparer, umin, umax []byte) bool { - return !t.after(icmp, umin) && !t.before(icmp, umax) -} - -// Cosumes one seek and return current seeks left. -func (t *tFile) consumeSeek() int32 { - return atomic.AddInt32(&t.seekLeft, -1) -} - -// Creates new tFile. -func newTableFile(fd storage.FileDesc, size int64, imin, imax internalKey) *tFile { - f := &tFile{ - fd: fd, - size: size, - imin: imin, - imax: imax, - } - - // We arrange to automatically compact this file after - // a certain number of seeks. Let's assume: - // (1) One seek costs 10ms - // (2) Writing or reading 1MB costs 10ms (100MB/s) - // (3) A compaction of 1MB does 25MB of IO: - // 1MB read from this level - // 10-12MB read from next level (boundaries may be misaligned) - // 10-12MB written to next level - // This implies that 25 seeks cost the same as the compaction - // of 1MB of data. I.e., one seek costs approximately the - // same as the compaction of 40KB of data. We are a little - // conservative and allow approximately one seek for every 16KB - // of data before triggering a compaction. - f.seekLeft = int32(size / 16384) - if f.seekLeft < 100 { - f.seekLeft = 100 - } - - return f -} - -func tableFileFromRecord(r atRecord) *tFile { - return newTableFile(storage.FileDesc{storage.TypeTable, r.num}, r.size, r.imin, r.imax) -} - -// tFiles hold multiple tFile. -type tFiles []*tFile - -func (tf tFiles) Len() int { return len(tf) } -func (tf tFiles) Swap(i, j int) { tf[i], tf[j] = tf[j], tf[i] } - -func (tf tFiles) nums() string { - x := "[ " - for i, f := range tf { - if i != 0 { - x += ", " - } - x += fmt.Sprint(f.fd.Num) - } - x += " ]" - return x -} - -// Returns true if i smallest key is less than j. -// This used for sort by key in ascending order. -func (tf tFiles) lessByKey(icmp *iComparer, i, j int) bool { - a, b := tf[i], tf[j] - n := icmp.Compare(a.imin, b.imin) - if n == 0 { - return a.fd.Num < b.fd.Num - } - return n < 0 -} - -// Returns true if i file number is greater than j. -// This used for sort by file number in descending order. -func (tf tFiles) lessByNum(i, j int) bool { - return tf[i].fd.Num > tf[j].fd.Num -} - -// Sorts tables by key in ascending order. -func (tf tFiles) sortByKey(icmp *iComparer) { - sort.Sort(&tFilesSortByKey{tFiles: tf, icmp: icmp}) -} - -// Sorts tables by file number in descending order. -func (tf tFiles) sortByNum() { - sort.Sort(&tFilesSortByNum{tFiles: tf}) -} - -// Returns sum of all tables size. -func (tf tFiles) size() (sum int64) { - for _, t := range tf { - sum += t.size - } - return sum -} - -// Searches smallest index of tables whose its smallest -// key is after or equal with given key. -func (tf tFiles) searchMin(icmp *iComparer, ikey internalKey) int { - return sort.Search(len(tf), func(i int) bool { - return icmp.Compare(tf[i].imin, ikey) >= 0 - }) -} - -// Searches smallest index of tables whose its largest -// key is after or equal with given key. -func (tf tFiles) searchMax(icmp *iComparer, ikey internalKey) int { - return sort.Search(len(tf), func(i int) bool { - return icmp.Compare(tf[i].imax, ikey) >= 0 - }) -} - -// Returns true if given key range overlaps with one or more -// tables key range. If unsorted is true then binary search will not be used. -func (tf tFiles) overlaps(icmp *iComparer, umin, umax []byte, unsorted bool) bool { - if unsorted { - // Check against all files. - for _, t := range tf { - if t.overlaps(icmp, umin, umax) { - return true - } - } - return false - } - - i := 0 - if len(umin) > 0 { - // Find the earliest possible internal key for min. - i = tf.searchMax(icmp, makeInternalKey(nil, umin, keyMaxSeq, keyTypeSeek)) - } - if i >= len(tf) { - // Beginning of range is after all files, so no overlap. - return false - } - return !tf[i].before(icmp, umax) -} - -// Returns tables whose its key range overlaps with given key range. -// Range will be expanded if ukey found hop across tables. -// If overlapped is true then the search will be restarted if umax -// expanded. -// The dst content will be overwritten. -func (tf tFiles) getOverlaps(dst tFiles, icmp *iComparer, umin, umax []byte, overlapped bool) tFiles { - dst = dst[:0] - for i := 0; i < len(tf); { - t := tf[i] - if t.overlaps(icmp, umin, umax) { - if umin != nil && icmp.uCompare(t.imin.ukey(), umin) < 0 { - umin = t.imin.ukey() - dst = dst[:0] - i = 0 - continue - } else if umax != nil && icmp.uCompare(t.imax.ukey(), umax) > 0 { - umax = t.imax.ukey() - // Restart search if it is overlapped. - if overlapped { - dst = dst[:0] - i = 0 - continue - } - } - - dst = append(dst, t) - } - i++ - } - - return dst -} - -// Returns tables key range. -func (tf tFiles) getRange(icmp *iComparer) (imin, imax internalKey) { - for i, t := range tf { - if i == 0 { - imin, imax = t.imin, t.imax - continue - } - if icmp.Compare(t.imin, imin) < 0 { - imin = t.imin - } - if icmp.Compare(t.imax, imax) > 0 { - imax = t.imax - } - } - - return -} - -// Creates iterator index from tables. -func (tf tFiles) newIndexIterator(tops *tOps, icmp *iComparer, slice *util.Range, ro *opt.ReadOptions) iterator.IteratorIndexer { - if slice != nil { - var start, limit int - if slice.Start != nil { - start = tf.searchMax(icmp, internalKey(slice.Start)) - } - if slice.Limit != nil { - limit = tf.searchMin(icmp, internalKey(slice.Limit)) - } else { - limit = tf.Len() - } - tf = tf[start:limit] - } - return iterator.NewArrayIndexer(&tFilesArrayIndexer{ - tFiles: tf, - tops: tops, - icmp: icmp, - slice: slice, - ro: ro, - }) -} - -// Tables iterator index. -type tFilesArrayIndexer struct { - tFiles - tops *tOps - icmp *iComparer - slice *util.Range - ro *opt.ReadOptions -} - -func (a *tFilesArrayIndexer) Search(key []byte) int { - return a.searchMax(a.icmp, internalKey(key)) -} - -func (a *tFilesArrayIndexer) Get(i int) iterator.Iterator { - if i == 0 || i == a.Len()-1 { - return a.tops.newIterator(a.tFiles[i], a.slice, a.ro) - } - return a.tops.newIterator(a.tFiles[i], nil, a.ro) -} - -// Helper type for sortByKey. -type tFilesSortByKey struct { - tFiles - icmp *iComparer -} - -func (x *tFilesSortByKey) Less(i, j int) bool { - return x.lessByKey(x.icmp, i, j) -} - -// Helper type for sortByNum. -type tFilesSortByNum struct { - tFiles -} - -func (x *tFilesSortByNum) Less(i, j int) bool { - return x.lessByNum(i, j) -} - -// Table operations. -type tOps struct { - s *session - noSync bool - cache *cache.Cache - bcache *cache.Cache - bpool *util.BufferPool -} - -// Creates an empty table and returns table writer. -func (t *tOps) create() (*tWriter, error) { - fd := storage.FileDesc{storage.TypeTable, t.s.allocFileNum()} - fw, err := t.s.stor.Create(fd) - if err != nil { - return nil, err - } - return &tWriter{ - t: t, - fd: fd, - w: fw, - tw: table.NewWriter(fw, t.s.o.Options), - }, nil -} - -// Builds table from src iterator. -func (t *tOps) createFrom(src iterator.Iterator) (f *tFile, n int, err error) { - w, err := t.create() - if err != nil { - return - } - - defer func() { - if err != nil { - w.drop() - } - }() - - for src.Next() { - err = w.append(src.Key(), src.Value()) - if err != nil { - return - } - } - err = src.Error() - if err != nil { - return - } - - n = w.tw.EntriesLen() - f, err = w.finish() - return -} - -// Opens table. It returns a cache handle, which should -// be released after use. -func (t *tOps) open(f *tFile) (ch *cache.Handle, err error) { - ch = t.cache.Get(0, uint64(f.fd.Num), func() (size int, value cache.Value) { - var r storage.Reader - r, err = t.s.stor.Open(f.fd) - if err != nil { - return 0, nil - } - - var bcache *cache.NamespaceGetter - if t.bcache != nil { - bcache = &cache.NamespaceGetter{Cache: t.bcache, NS: uint64(f.fd.Num)} - } - - var tr *table.Reader - tr, err = table.NewReader(r, f.size, f.fd, bcache, t.bpool, t.s.o.Options) - if err != nil { - r.Close() - return 0, nil - } - return 1, tr - - }) - if ch == nil && err == nil { - err = ErrClosed - } - return -} - -// Finds key/value pair whose key is greater than or equal to the -// given key. -func (t *tOps) find(f *tFile, key []byte, ro *opt.ReadOptions) (rkey, rvalue []byte, err error) { - ch, err := t.open(f) - if err != nil { - return nil, nil, err - } - defer ch.Release() - return ch.Value().(*table.Reader).Find(key, true, ro) -} - -// Finds key that is greater than or equal to the given key. -func (t *tOps) findKey(f *tFile, key []byte, ro *opt.ReadOptions) (rkey []byte, err error) { - ch, err := t.open(f) - if err != nil { - return nil, err - } - defer ch.Release() - return ch.Value().(*table.Reader).FindKey(key, true, ro) -} - -// Returns approximate offset of the given key. -func (t *tOps) offsetOf(f *tFile, key []byte) (offset int64, err error) { - ch, err := t.open(f) - if err != nil { - return - } - defer ch.Release() - return ch.Value().(*table.Reader).OffsetOf(key) -} - -// Creates an iterator from the given table. -func (t *tOps) newIterator(f *tFile, slice *util.Range, ro *opt.ReadOptions) iterator.Iterator { - ch, err := t.open(f) - if err != nil { - return iterator.NewEmptyIterator(err) - } - iter := ch.Value().(*table.Reader).NewIterator(slice, ro) - iter.SetReleaser(ch) - return iter -} - -// Removes table from persistent storage. It waits until -// no one use the the table. -func (t *tOps) remove(f *tFile) { - t.cache.Delete(0, uint64(f.fd.Num), func() { - if err := t.s.stor.Remove(f.fd); err != nil { - t.s.logf("table@remove removing @%d %q", f.fd.Num, err) - } else { - t.s.logf("table@remove removed @%d", f.fd.Num) - } - if t.bcache != nil { - t.bcache.EvictNS(uint64(f.fd.Num)) - } - }) -} - -// Closes the table ops instance. It will close all tables, -// regadless still used or not. -func (t *tOps) close() { - t.bpool.Close() - t.cache.Close() - if t.bcache != nil { - t.bcache.CloseWeak() - } -} - -// Creates new initialized table ops instance. -func newTableOps(s *session) *tOps { - var ( - cacher cache.Cacher - bcache *cache.Cache - bpool *util.BufferPool - ) - if s.o.GetOpenFilesCacheCapacity() > 0 { - cacher = cache.NewLRU(s.o.GetOpenFilesCacheCapacity()) - } - if !s.o.GetDisableBlockCache() { - var bcacher cache.Cacher - if s.o.GetBlockCacheCapacity() > 0 { - bcacher = cache.NewLRU(s.o.GetBlockCacheCapacity()) - } - bcache = cache.NewCache(bcacher) - } - if !s.o.GetDisableBufferPool() { - bpool = util.NewBufferPool(s.o.GetBlockSize() + 5) - } - return &tOps{ - s: s, - noSync: s.o.GetNoSync(), - cache: cache.NewCache(cacher), - bcache: bcache, - bpool: bpool, - } -} - -// tWriter wraps the table writer. It keep track of file descriptor -// and added key range. -type tWriter struct { - t *tOps - - fd storage.FileDesc - w storage.Writer - tw *table.Writer - - first, last []byte -} - -// Append key/value pair to the table. -func (w *tWriter) append(key, value []byte) error { - if w.first == nil { - w.first = append([]byte{}, key...) - } - w.last = append(w.last[:0], key...) - return w.tw.Append(key, value) -} - -// Returns true if the table is empty. -func (w *tWriter) empty() bool { - return w.first == nil -} - -// Closes the storage.Writer. -func (w *tWriter) close() { - if w.w != nil { - w.w.Close() - w.w = nil - } -} - -// Finalizes the table and returns table file. -func (w *tWriter) finish() (f *tFile, err error) { - defer w.close() - err = w.tw.Close() - if err != nil { - return - } - if !w.t.noSync { - err = w.w.Sync() - if err != nil { - return - } - } - f = newTableFile(w.fd, int64(w.tw.BytesLen()), internalKey(w.first), internalKey(w.last)) - return -} - -// Drops the table. -func (w *tWriter) drop() { - w.close() - w.t.s.stor.Remove(w.fd) - w.t.s.reuseFileNum(w.fd.Num) - w.tw = nil - w.first = nil - w.last = nil -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/table/reader.go b/vendor/github.com/pingcap/goleveldb/leveldb/table/reader.go deleted file mode 100644 index 3d6d3ea..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/table/reader.go +++ /dev/null @@ -1,1135 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package table - -import ( - "encoding/binary" - "fmt" - "io" - "sort" - "strings" - "sync" - - "github.com/golang/snappy" - - "github.com/pingcap/goleveldb/leveldb/cache" - "github.com/pingcap/goleveldb/leveldb/comparer" - "github.com/pingcap/goleveldb/leveldb/errors" - "github.com/pingcap/goleveldb/leveldb/filter" - "github.com/pingcap/goleveldb/leveldb/iterator" - "github.com/pingcap/goleveldb/leveldb/opt" - "github.com/pingcap/goleveldb/leveldb/storage" - "github.com/pingcap/goleveldb/leveldb/util" -) - -// Reader errors. -var ( - ErrNotFound = errors.ErrNotFound - ErrReaderReleased = errors.New("leveldb/table: reader released") - ErrIterReleased = errors.New("leveldb/table: iterator released") -) - -// ErrCorrupted describes error due to corruption. This error will be wrapped -// with errors.ErrCorrupted. -type ErrCorrupted struct { - Pos int64 - Size int64 - Kind string - Reason string -} - -func (e *ErrCorrupted) Error() string { - return fmt.Sprintf("leveldb/table: corruption on %s (pos=%d): %s", e.Kind, e.Pos, e.Reason) -} - -func max(x, y int) int { - if x > y { - return x - } - return y -} - -type block struct { - bpool *util.BufferPool - bh blockHandle - data []byte - restartsLen int - restartsOffset int -} - -func (b *block) seek(cmp comparer.Comparer, rstart, rlimit int, key []byte) (index, offset int, err error) { - index = sort.Search(b.restartsLen-rstart-(b.restartsLen-rlimit), func(i int) bool { - offset := int(binary.LittleEndian.Uint32(b.data[b.restartsOffset+4*(rstart+i):])) - offset++ // shared always zero, since this is a restart point - v1, n1 := binary.Uvarint(b.data[offset:]) // key length - _, n2 := binary.Uvarint(b.data[offset+n1:]) // value length - m := offset + n1 + n2 - return cmp.Compare(b.data[m:m+int(v1)], key) > 0 - }) + rstart - 1 - if index < rstart { - // The smallest key is greater-than key sought. - index = rstart - } - offset = int(binary.LittleEndian.Uint32(b.data[b.restartsOffset+4*index:])) - return -} - -func (b *block) restartIndex(rstart, rlimit, offset int) int { - return sort.Search(b.restartsLen-rstart-(b.restartsLen-rlimit), func(i int) bool { - return int(binary.LittleEndian.Uint32(b.data[b.restartsOffset+4*(rstart+i):])) > offset - }) + rstart - 1 -} - -func (b *block) restartOffset(index int) int { - return int(binary.LittleEndian.Uint32(b.data[b.restartsOffset+4*index:])) -} - -func (b *block) entry(offset int) (key, value []byte, nShared, n int, err error) { - if offset >= b.restartsOffset { - if offset != b.restartsOffset { - err = &ErrCorrupted{Reason: "entries offset not aligned"} - } - return - } - v0, n0 := binary.Uvarint(b.data[offset:]) // Shared prefix length - v1, n1 := binary.Uvarint(b.data[offset+n0:]) // Key length - v2, n2 := binary.Uvarint(b.data[offset+n0+n1:]) // Value length - m := n0 + n1 + n2 - n = m + int(v1) + int(v2) - if n0 <= 0 || n1 <= 0 || n2 <= 0 || offset+n > b.restartsOffset { - err = &ErrCorrupted{Reason: "entries corrupted"} - return - } - key = b.data[offset+m : offset+m+int(v1)] - value = b.data[offset+m+int(v1) : offset+n] - nShared = int(v0) - return -} - -func (b *block) Release() { - b.bpool.Put(b.data) - b.bpool = nil - b.data = nil -} - -type dir int - -const ( - dirReleased dir = iota - 1 - dirSOI - dirEOI - dirBackward - dirForward -) - -type blockIter struct { - tr *Reader - block *block - blockReleaser util.Releaser - releaser util.Releaser - key, value []byte - offset int - // Previous offset, only filled by Next. - prevOffset int - prevNode []int - prevKeys []byte - restartIndex int - // Iterator direction. - dir dir - // Restart index slice range. - riStart int - riLimit int - // Offset slice range. - offsetStart int - offsetRealStart int - offsetLimit int - // Error. - err error -} - -func (i *blockIter) sErr(err error) { - i.err = err - i.key = nil - i.value = nil - i.prevNode = nil - i.prevKeys = nil -} - -func (i *blockIter) reset() { - if i.dir == dirBackward { - i.prevNode = i.prevNode[:0] - i.prevKeys = i.prevKeys[:0] - } - i.restartIndex = i.riStart - i.offset = i.offsetStart - i.dir = dirSOI - i.key = i.key[:0] - i.value = nil -} - -func (i *blockIter) isFirst() bool { - switch i.dir { - case dirForward: - return i.prevOffset == i.offsetRealStart - case dirBackward: - return len(i.prevNode) == 1 && i.restartIndex == i.riStart - } - return false -} - -func (i *blockIter) isLast() bool { - switch i.dir { - case dirForward, dirBackward: - return i.offset == i.offsetLimit - } - return false -} - -func (i *blockIter) First() bool { - if i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - if i.dir == dirBackward { - i.prevNode = i.prevNode[:0] - i.prevKeys = i.prevKeys[:0] - } - i.dir = dirSOI - return i.Next() -} - -func (i *blockIter) Last() bool { - if i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - if i.dir == dirBackward { - i.prevNode = i.prevNode[:0] - i.prevKeys = i.prevKeys[:0] - } - i.dir = dirEOI - return i.Prev() -} - -func (i *blockIter) Seek(key []byte) bool { - if i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - ri, offset, err := i.block.seek(i.tr.cmp, i.riStart, i.riLimit, key) - if err != nil { - i.sErr(err) - return false - } - i.restartIndex = ri - i.offset = max(i.offsetStart, offset) - if i.dir == dirSOI || i.dir == dirEOI { - i.dir = dirForward - } - for i.Next() { - if i.tr.cmp.Compare(i.key, key) >= 0 { - return true - } - } - return false -} - -func (i *blockIter) Next() bool { - if i.dir == dirEOI || i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - if i.dir == dirSOI { - i.restartIndex = i.riStart - i.offset = i.offsetStart - } else if i.dir == dirBackward { - i.prevNode = i.prevNode[:0] - i.prevKeys = i.prevKeys[:0] - } - for i.offset < i.offsetRealStart { - key, value, nShared, n, err := i.block.entry(i.offset) - if err != nil { - i.sErr(i.tr.fixErrCorruptedBH(i.block.bh, err)) - return false - } - if n == 0 { - i.dir = dirEOI - return false - } - i.key = append(i.key[:nShared], key...) - i.value = value - i.offset += n - } - if i.offset >= i.offsetLimit { - i.dir = dirEOI - if i.offset != i.offsetLimit { - i.sErr(i.tr.newErrCorruptedBH(i.block.bh, "entries offset not aligned")) - } - return false - } - key, value, nShared, n, err := i.block.entry(i.offset) - if err != nil { - i.sErr(i.tr.fixErrCorruptedBH(i.block.bh, err)) - return false - } - if n == 0 { - i.dir = dirEOI - return false - } - i.key = append(i.key[:nShared], key...) - i.value = value - i.prevOffset = i.offset - i.offset += n - i.dir = dirForward - return true -} - -func (i *blockIter) Prev() bool { - if i.dir == dirSOI || i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - var ri int - if i.dir == dirForward { - // Change direction. - i.offset = i.prevOffset - if i.offset == i.offsetRealStart { - i.dir = dirSOI - return false - } - ri = i.block.restartIndex(i.restartIndex, i.riLimit, i.offset) - i.dir = dirBackward - } else if i.dir == dirEOI { - // At the end of iterator. - i.restartIndex = i.riLimit - i.offset = i.offsetLimit - if i.offset == i.offsetRealStart { - i.dir = dirSOI - return false - } - ri = i.riLimit - 1 - i.dir = dirBackward - } else if len(i.prevNode) == 1 { - // This is the end of a restart range. - i.offset = i.prevNode[0] - i.prevNode = i.prevNode[:0] - if i.restartIndex == i.riStart { - i.dir = dirSOI - return false - } - i.restartIndex-- - ri = i.restartIndex - } else { - // In the middle of restart range, get from cache. - n := len(i.prevNode) - 3 - node := i.prevNode[n:] - i.prevNode = i.prevNode[:n] - // Get the key. - ko := node[0] - i.key = append(i.key[:0], i.prevKeys[ko:]...) - i.prevKeys = i.prevKeys[:ko] - // Get the value. - vo := node[1] - vl := vo + node[2] - i.value = i.block.data[vo:vl] - i.offset = vl - return true - } - // Build entries cache. - i.key = i.key[:0] - i.value = nil - offset := i.block.restartOffset(ri) - if offset == i.offset { - ri-- - if ri < 0 { - i.dir = dirSOI - return false - } - offset = i.block.restartOffset(ri) - } - i.prevNode = append(i.prevNode, offset) - for { - key, value, nShared, n, err := i.block.entry(offset) - if err != nil { - i.sErr(i.tr.fixErrCorruptedBH(i.block.bh, err)) - return false - } - if offset >= i.offsetRealStart { - if i.value != nil { - // Appends 3 variables: - // 1. Previous keys offset - // 2. Value offset in the data block - // 3. Value length - i.prevNode = append(i.prevNode, len(i.prevKeys), offset-len(i.value), len(i.value)) - i.prevKeys = append(i.prevKeys, i.key...) - } - i.value = value - } - i.key = append(i.key[:nShared], key...) - offset += n - // Stop if target offset reached. - if offset >= i.offset { - if offset != i.offset { - i.sErr(i.tr.newErrCorruptedBH(i.block.bh, "entries offset not aligned")) - return false - } - - break - } - } - i.restartIndex = ri - i.offset = offset - return true -} - -func (i *blockIter) Key() []byte { - if i.err != nil || i.dir <= dirEOI { - return nil - } - return i.key -} - -func (i *blockIter) Value() []byte { - if i.err != nil || i.dir <= dirEOI { - return nil - } - return i.value -} - -func (i *blockIter) Release() { - if i.dir != dirReleased { - i.tr = nil - i.block = nil - i.prevNode = nil - i.prevKeys = nil - i.key = nil - i.value = nil - i.dir = dirReleased - if i.blockReleaser != nil { - i.blockReleaser.Release() - i.blockReleaser = nil - } - if i.releaser != nil { - i.releaser.Release() - i.releaser = nil - } - } -} - -func (i *blockIter) SetReleaser(releaser util.Releaser) { - if i.dir == dirReleased { - panic(util.ErrReleased) - } - if i.releaser != nil && releaser != nil { - panic(util.ErrHasReleaser) - } - i.releaser = releaser -} - -func (i *blockIter) Valid() bool { - return i.err == nil && (i.dir == dirBackward || i.dir == dirForward) -} - -func (i *blockIter) Error() error { - return i.err -} - -type filterBlock struct { - bpool *util.BufferPool - data []byte - oOffset int - baseLg uint - filtersNum int -} - -func (b *filterBlock) contains(filter filter.Filter, offset uint64, key []byte) bool { - i := int(offset >> b.baseLg) - if i < b.filtersNum { - o := b.data[b.oOffset+i*4:] - n := int(binary.LittleEndian.Uint32(o)) - m := int(binary.LittleEndian.Uint32(o[4:])) - if n < m && m <= b.oOffset { - return filter.Contains(b.data[n:m], key) - } else if n == m { - return false - } - } - return true -} - -func (b *filterBlock) Release() { - b.bpool.Put(b.data) - b.bpool = nil - b.data = nil -} - -type indexIter struct { - *blockIter - tr *Reader - slice *util.Range - // Options - fillCache bool -} - -func (i *indexIter) Get() iterator.Iterator { - value := i.Value() - if value == nil { - return nil - } - dataBH, n := decodeBlockHandle(value) - if n == 0 { - return iterator.NewEmptyIterator(i.tr.newErrCorruptedBH(i.tr.indexBH, "bad data block handle")) - } - - var slice *util.Range - if i.slice != nil && (i.blockIter.isFirst() || i.blockIter.isLast()) { - slice = i.slice - } - return i.tr.getDataIterErr(dataBH, slice, i.tr.verifyChecksum, i.fillCache) -} - -// Reader is a table reader. -type Reader struct { - mu sync.RWMutex - fd storage.FileDesc - reader io.ReaderAt - cache *cache.NamespaceGetter - err error - bpool *util.BufferPool - // Options - o *opt.Options - cmp comparer.Comparer - filter filter.Filter - verifyChecksum bool - - dataEnd int64 - metaBH, indexBH, filterBH blockHandle - indexBlock *block - filterBlock *filterBlock -} - -func (r *Reader) blockKind(bh blockHandle) string { - switch bh.offset { - case r.metaBH.offset: - return "meta-block" - case r.indexBH.offset: - return "index-block" - case r.filterBH.offset: - if r.filterBH.length > 0 { - return "filter-block" - } - } - return "data-block" -} - -func (r *Reader) newErrCorrupted(pos, size int64, kind, reason string) error { - return &errors.ErrCorrupted{Fd: r.fd, Err: &ErrCorrupted{Pos: pos, Size: size, Kind: kind, Reason: reason}} -} - -func (r *Reader) newErrCorruptedBH(bh blockHandle, reason string) error { - return r.newErrCorrupted(int64(bh.offset), int64(bh.length), r.blockKind(bh), reason) -} - -func (r *Reader) fixErrCorruptedBH(bh blockHandle, err error) error { - if cerr, ok := err.(*ErrCorrupted); ok { - cerr.Pos = int64(bh.offset) - cerr.Size = int64(bh.length) - cerr.Kind = r.blockKind(bh) - return &errors.ErrCorrupted{Fd: r.fd, Err: cerr} - } - return err -} - -func (r *Reader) readRawBlock(bh blockHandle, verifyChecksum bool) ([]byte, error) { - data := r.bpool.Get(int(bh.length + blockTrailerLen)) - if _, err := r.reader.ReadAt(data, int64(bh.offset)); err != nil && err != io.EOF { - return nil, err - } - - if verifyChecksum { - n := bh.length + 1 - checksum0 := binary.LittleEndian.Uint32(data[n:]) - checksum1 := util.NewCRC(data[:n]).Value() - if checksum0 != checksum1 { - r.bpool.Put(data) - return nil, r.newErrCorruptedBH(bh, fmt.Sprintf("checksum mismatch, want=%#x got=%#x", checksum0, checksum1)) - } - } - - switch data[bh.length] { - case blockTypeNoCompression: - data = data[:bh.length] - case blockTypeSnappyCompression: - decLen, err := snappy.DecodedLen(data[:bh.length]) - if err != nil { - r.bpool.Put(data) - return nil, r.newErrCorruptedBH(bh, err.Error()) - } - decData := r.bpool.Get(decLen) - decData, err = snappy.Decode(decData, data[:bh.length]) - r.bpool.Put(data) - if err != nil { - r.bpool.Put(decData) - return nil, r.newErrCorruptedBH(bh, err.Error()) - } - data = decData - default: - r.bpool.Put(data) - return nil, r.newErrCorruptedBH(bh, fmt.Sprintf("unknown compression type %#x", data[bh.length])) - } - return data, nil -} - -func (r *Reader) readBlock(bh blockHandle, verifyChecksum bool) (*block, error) { - data, err := r.readRawBlock(bh, verifyChecksum) - if err != nil { - return nil, err - } - restartsLen := int(binary.LittleEndian.Uint32(data[len(data)-4:])) - b := &block{ - bpool: r.bpool, - bh: bh, - data: data, - restartsLen: restartsLen, - restartsOffset: len(data) - (restartsLen+1)*4, - } - return b, nil -} - -func (r *Reader) readBlockCached(bh blockHandle, verifyChecksum, fillCache bool) (*block, util.Releaser, error) { - if r.cache != nil { - var ( - err error - ch *cache.Handle - ) - if fillCache { - ch = r.cache.Get(bh.offset, func() (size int, value cache.Value) { - var b *block - b, err = r.readBlock(bh, verifyChecksum) - if err != nil { - return 0, nil - } - return cap(b.data), b - }) - } else { - ch = r.cache.Get(bh.offset, nil) - } - if ch != nil { - b, ok := ch.Value().(*block) - if !ok { - ch.Release() - return nil, nil, errors.New("leveldb/table: inconsistent block type") - } - return b, ch, err - } else if err != nil { - return nil, nil, err - } - } - - b, err := r.readBlock(bh, verifyChecksum) - return b, b, err -} - -func (r *Reader) readFilterBlock(bh blockHandle) (*filterBlock, error) { - data, err := r.readRawBlock(bh, true) - if err != nil { - return nil, err - } - n := len(data) - if n < 5 { - return nil, r.newErrCorruptedBH(bh, "too short") - } - m := n - 5 - oOffset := int(binary.LittleEndian.Uint32(data[m:])) - if oOffset > m { - return nil, r.newErrCorruptedBH(bh, "invalid data-offsets offset") - } - b := &filterBlock{ - bpool: r.bpool, - data: data, - oOffset: oOffset, - baseLg: uint(data[n-1]), - filtersNum: (m - oOffset) / 4, - } - return b, nil -} - -func (r *Reader) readFilterBlockCached(bh blockHandle, fillCache bool) (*filterBlock, util.Releaser, error) { - if r.cache != nil { - var ( - err error - ch *cache.Handle - ) - if fillCache { - ch = r.cache.Get(bh.offset, func() (size int, value cache.Value) { - var b *filterBlock - b, err = r.readFilterBlock(bh) - if err != nil { - return 0, nil - } - return cap(b.data), b - }) - } else { - ch = r.cache.Get(bh.offset, nil) - } - if ch != nil { - b, ok := ch.Value().(*filterBlock) - if !ok { - ch.Release() - return nil, nil, errors.New("leveldb/table: inconsistent block type") - } - return b, ch, err - } else if err != nil { - return nil, nil, err - } - } - - b, err := r.readFilterBlock(bh) - return b, b, err -} - -func (r *Reader) getIndexBlock(fillCache bool) (b *block, rel util.Releaser, err error) { - if r.indexBlock == nil { - return r.readBlockCached(r.indexBH, true, fillCache) - } - return r.indexBlock, util.NoopReleaser{}, nil -} - -func (r *Reader) getFilterBlock(fillCache bool) (*filterBlock, util.Releaser, error) { - if r.filterBlock == nil { - return r.readFilterBlockCached(r.filterBH, fillCache) - } - return r.filterBlock, util.NoopReleaser{}, nil -} - -func (r *Reader) newBlockIter(b *block, bReleaser util.Releaser, slice *util.Range, inclLimit bool) *blockIter { - bi := &blockIter{ - tr: r, - block: b, - blockReleaser: bReleaser, - // Valid key should never be nil. - key: make([]byte, 0), - dir: dirSOI, - riStart: 0, - riLimit: b.restartsLen, - offsetStart: 0, - offsetRealStart: 0, - offsetLimit: b.restartsOffset, - } - if slice != nil { - if slice.Start != nil { - if bi.Seek(slice.Start) { - bi.riStart = b.restartIndex(bi.restartIndex, b.restartsLen, bi.prevOffset) - bi.offsetStart = b.restartOffset(bi.riStart) - bi.offsetRealStart = bi.prevOffset - } else { - bi.riStart = b.restartsLen - bi.offsetStart = b.restartsOffset - bi.offsetRealStart = b.restartsOffset - } - } - if slice.Limit != nil { - if bi.Seek(slice.Limit) && (!inclLimit || bi.Next()) { - bi.offsetLimit = bi.prevOffset - bi.riLimit = bi.restartIndex + 1 - } - } - bi.reset() - if bi.offsetStart > bi.offsetLimit { - bi.sErr(errors.New("leveldb/table: invalid slice range")) - } - } - return bi -} - -func (r *Reader) getDataIter(dataBH blockHandle, slice *util.Range, verifyChecksum, fillCache bool) iterator.Iterator { - b, rel, err := r.readBlockCached(dataBH, verifyChecksum, fillCache) - if err != nil { - return iterator.NewEmptyIterator(err) - } - return r.newBlockIter(b, rel, slice, false) -} - -func (r *Reader) getDataIterErr(dataBH blockHandle, slice *util.Range, verifyChecksum, fillCache bool) iterator.Iterator { - r.mu.RLock() - defer r.mu.RUnlock() - - if r.err != nil { - return iterator.NewEmptyIterator(r.err) - } - - return r.getDataIter(dataBH, slice, verifyChecksum, fillCache) -} - -// NewIterator creates an iterator from the table. -// -// Slice allows slicing the iterator to only contains keys in the given -// range. A nil Range.Start is treated as a key before all keys in the -// table. And a nil Range.Limit is treated as a key after all keys in -// the table. -// -// The returned iterator is not safe for concurrent use and should be released -// after use. -// -// Also read Iterator documentation of the leveldb/iterator package. -func (r *Reader) NewIterator(slice *util.Range, ro *opt.ReadOptions) iterator.Iterator { - r.mu.RLock() - defer r.mu.RUnlock() - - if r.err != nil { - return iterator.NewEmptyIterator(r.err) - } - - fillCache := !ro.GetDontFillCache() - indexBlock, rel, err := r.getIndexBlock(fillCache) - if err != nil { - return iterator.NewEmptyIterator(err) - } - index := &indexIter{ - blockIter: r.newBlockIter(indexBlock, rel, slice, true), - tr: r, - slice: slice, - fillCache: !ro.GetDontFillCache(), - } - return iterator.NewIndexedIterator(index, opt.GetStrict(r.o, ro, opt.StrictReader)) -} - -func (r *Reader) find(key []byte, filtered bool, ro *opt.ReadOptions, noValue bool) (rkey, value []byte, err error) { - r.mu.RLock() - defer r.mu.RUnlock() - - if r.err != nil { - err = r.err - return - } - - indexBlock, rel, err := r.getIndexBlock(true) - if err != nil { - return - } - defer rel.Release() - - index := r.newBlockIter(indexBlock, nil, nil, true) - defer index.Release() - - if !index.Seek(key) { - if err = index.Error(); err == nil { - err = ErrNotFound - } - return - } - - dataBH, n := decodeBlockHandle(index.Value()) - if n == 0 { - r.err = r.newErrCorruptedBH(r.indexBH, "bad data block handle") - return nil, nil, r.err - } - - // The filter should only used for exact match. - if filtered && r.filter != nil { - filterBlock, frel, ferr := r.getFilterBlock(true) - if ferr == nil { - if !filterBlock.contains(r.filter, dataBH.offset, key) { - frel.Release() - return nil, nil, ErrNotFound - } - frel.Release() - } else if !errors.IsCorrupted(ferr) { - return nil, nil, ferr - } - } - - data := r.getDataIter(dataBH, nil, r.verifyChecksum, !ro.GetDontFillCache()) - if !data.Seek(key) { - data.Release() - if err = data.Error(); err != nil { - return - } - - // The nearest greater-than key is the first key of the next block. - if !index.Next() { - if err = index.Error(); err == nil { - err = ErrNotFound - } - return - } - - dataBH, n = decodeBlockHandle(index.Value()) - if n == 0 { - r.err = r.newErrCorruptedBH(r.indexBH, "bad data block handle") - return nil, nil, r.err - } - - data = r.getDataIter(dataBH, nil, r.verifyChecksum, !ro.GetDontFillCache()) - if !data.Next() { - data.Release() - if err = data.Error(); err == nil { - err = ErrNotFound - } - return - } - } - - // Key doesn't use block buffer, no need to copy the buffer. - rkey = data.Key() - if !noValue { - if r.bpool == nil { - value = data.Value() - } else { - // Value does use block buffer, and since the buffer will be - // recycled, it need to be copied. - value = append([]byte{}, data.Value()...) - } - } - data.Release() - return -} - -// Find finds key/value pair whose key is greater than or equal to the -// given key. It returns ErrNotFound if the table doesn't contain -// such pair. -// If filtered is true then the nearest 'block' will be checked against -// 'filter data' (if present) and will immediately return ErrNotFound if -// 'filter data' indicates that such pair doesn't exist. -// -// The caller may modify the contents of the returned slice as it is its -// own copy. -// It is safe to modify the contents of the argument after Find returns. -func (r *Reader) Find(key []byte, filtered bool, ro *opt.ReadOptions) (rkey, value []byte, err error) { - return r.find(key, filtered, ro, false) -} - -// FindKey finds key that is greater than or equal to the given key. -// It returns ErrNotFound if the table doesn't contain such key. -// If filtered is true then the nearest 'block' will be checked against -// 'filter data' (if present) and will immediately return ErrNotFound if -// 'filter data' indicates that such key doesn't exist. -// -// The caller may modify the contents of the returned slice as it is its -// own copy. -// It is safe to modify the contents of the argument after Find returns. -func (r *Reader) FindKey(key []byte, filtered bool, ro *opt.ReadOptions) (rkey []byte, err error) { - rkey, _, err = r.find(key, filtered, ro, true) - return -} - -// Get gets the value for the given key. It returns errors.ErrNotFound -// if the table does not contain the key. -// -// The caller may modify the contents of the returned slice as it is its -// own copy. -// It is safe to modify the contents of the argument after Find returns. -func (r *Reader) Get(key []byte, ro *opt.ReadOptions) (value []byte, err error) { - r.mu.RLock() - defer r.mu.RUnlock() - - if r.err != nil { - err = r.err - return - } - - rkey, value, err := r.find(key, false, ro, false) - if err == nil && r.cmp.Compare(rkey, key) != 0 { - value = nil - err = ErrNotFound - } - return -} - -// OffsetOf returns approximate offset for the given key. -// -// It is safe to modify the contents of the argument after Get returns. -func (r *Reader) OffsetOf(key []byte) (offset int64, err error) { - r.mu.RLock() - defer r.mu.RUnlock() - - if r.err != nil { - err = r.err - return - } - - indexBlock, rel, err := r.readBlockCached(r.indexBH, true, true) - if err != nil { - return - } - defer rel.Release() - - index := r.newBlockIter(indexBlock, nil, nil, true) - defer index.Release() - if index.Seek(key) { - dataBH, n := decodeBlockHandle(index.Value()) - if n == 0 { - r.err = r.newErrCorruptedBH(r.indexBH, "bad data block handle") - return - } - offset = int64(dataBH.offset) - return - } - err = index.Error() - if err == nil { - offset = r.dataEnd - } - return -} - -// Release implements util.Releaser. -// It also close the file if it is an io.Closer. -func (r *Reader) Release() { - r.mu.Lock() - defer r.mu.Unlock() - - if closer, ok := r.reader.(io.Closer); ok { - closer.Close() - } - if r.indexBlock != nil { - r.indexBlock.Release() - r.indexBlock = nil - } - if r.filterBlock != nil { - r.filterBlock.Release() - r.filterBlock = nil - } - r.reader = nil - r.cache = nil - r.bpool = nil - r.err = ErrReaderReleased -} - -// NewReader creates a new initialized table reader for the file. -// The fi, cache and bpool is optional and can be nil. -// -// The returned table reader instance is safe for concurrent use. -func NewReader(f io.ReaderAt, size int64, fd storage.FileDesc, cache *cache.NamespaceGetter, bpool *util.BufferPool, o *opt.Options) (*Reader, error) { - if f == nil { - return nil, errors.New("leveldb/table: nil file") - } - - r := &Reader{ - fd: fd, - reader: f, - cache: cache, - bpool: bpool, - o: o, - cmp: o.GetComparer(), - verifyChecksum: o.GetStrict(opt.StrictBlockChecksum), - } - - if size < footerLen { - r.err = r.newErrCorrupted(0, size, "table", "too small") - return r, nil - } - - footerPos := size - footerLen - var footer [footerLen]byte - if _, err := r.reader.ReadAt(footer[:], footerPos); err != nil && err != io.EOF { - return nil, err - } - if string(footer[footerLen-len(magic):footerLen]) != magic { - r.err = r.newErrCorrupted(footerPos, footerLen, "table-footer", "bad magic number") - return r, nil - } - - var n int - // Decode the metaindex block handle. - r.metaBH, n = decodeBlockHandle(footer[:]) - if n == 0 { - r.err = r.newErrCorrupted(footerPos, footerLen, "table-footer", "bad metaindex block handle") - return r, nil - } - - // Decode the index block handle. - r.indexBH, n = decodeBlockHandle(footer[n:]) - if n == 0 { - r.err = r.newErrCorrupted(footerPos, footerLen, "table-footer", "bad index block handle") - return r, nil - } - - // Read metaindex block. - metaBlock, err := r.readBlock(r.metaBH, true) - if err != nil { - if errors.IsCorrupted(err) { - r.err = err - return r, nil - } - return nil, err - } - - // Set data end. - r.dataEnd = int64(r.metaBH.offset) - - // Read metaindex. - metaIter := r.newBlockIter(metaBlock, nil, nil, true) - for metaIter.Next() { - key := string(metaIter.Key()) - if !strings.HasPrefix(key, "filter.") { - continue - } - fn := key[7:] - if f0 := o.GetFilter(); f0 != nil && f0.Name() == fn { - r.filter = f0 - } else { - for _, f0 := range o.GetAltFilters() { - if f0.Name() == fn { - r.filter = f0 - break - } - } - } - if r.filter != nil { - filterBH, n := decodeBlockHandle(metaIter.Value()) - if n == 0 { - continue - } - r.filterBH = filterBH - // Update data end. - r.dataEnd = int64(filterBH.offset) - break - } - } - metaIter.Release() - metaBlock.Release() - - // Cache index and filter block locally, since we don't have global cache. - if cache == nil { - r.indexBlock, err = r.readBlock(r.indexBH, true) - if err != nil { - if errors.IsCorrupted(err) { - r.err = err - return r, nil - } - return nil, err - } - if r.filter != nil { - r.filterBlock, err = r.readFilterBlock(r.filterBH) - if err != nil { - if !errors.IsCorrupted(err) { - return nil, err - } - - // Don't use filter then. - r.filter = nil - } - } - } - - return r, nil -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/table/table.go b/vendor/github.com/pingcap/goleveldb/leveldb/table/table.go deleted file mode 100644 index beacdc1..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/table/table.go +++ /dev/null @@ -1,177 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Package table allows read and write sorted key/value. -package table - -import ( - "encoding/binary" -) - -/* -Table: - -Table is consist of one or more data blocks, an optional filter block -a metaindex block, an index block and a table footer. Metaindex block -is a special block used to keep parameters of the table, such as filter -block name and its block handle. Index block is a special block used to -keep record of data blocks offset and length, index block use one as -restart interval. The key used by index block are the last key of preceding -block, shorter separator of adjacent blocks or shorter successor of the -last key of the last block. Filter block is an optional block contains -sequence of filter data generated by a filter generator. - -Table data structure: - + optional - / - +--------------+--------------+--------------+------+-------+-----------------+-------------+--------+ - | data block 1 | ... | data block n | filter block | metaindex block | index block | footer | - +--------------+--------------+--------------+--------------+-----------------+-------------+--------+ - - Each block followed by a 5-bytes trailer contains compression type and checksum. - -Table block trailer: - - +---------------------------+-------------------+ - | compression type (1-byte) | checksum (4-byte) | - +---------------------------+-------------------+ - - The checksum is a CRC-32 computed using Castagnoli's polynomial. Compression - type also included in the checksum. - -Table footer: - - +------------------- 40-bytes -------------------+ - / \ - +------------------------+--------------------+------+-----------------+ - | metaindex block handle / index block handle / ---- | magic (8-bytes) | - +------------------------+--------------------+------+-----------------+ - - The magic are first 64-bit of SHA-1 sum of "http://code.google.com/p/leveldb/". - -NOTE: All fixed-length integer are little-endian. -*/ - -/* -Block: - -Block is consist of one or more key/value entries and a block trailer. -Block entry shares key prefix with its preceding key until a restart -point reached. A block should contains at least one restart point. -First restart point are always zero. - -Block data structure: - - + restart point + restart point (depends on restart interval) - / / - +---------------+---------------+---------------+---------------+---------+ - | block entry 1 | block entry 2 | ... | block entry n | trailer | - +---------------+---------------+---------------+---------------+---------+ - -Key/value entry: - - +---- key len ----+ - / \ - +-------+---------+-----------+---------+--------------------+--------------+----------------+ - | shared (varint) | not shared (varint) | value len (varint) | key (varlen) | value (varlen) | - +-----------------+---------------------+--------------------+--------------+----------------+ - - Block entry shares key prefix with its preceding key: - Conditions: - restart_interval=2 - entry one : key=deck,value=v1 - entry two : key=dock,value=v2 - entry three: key=duck,value=v3 - The entries will be encoded as follow: - - + restart point (offset=0) + restart point (offset=16) - / / - +-----+-----+-----+----------+--------+-----+-----+-----+---------+--------+-----+-----+-----+----------+--------+ - | 0 | 4 | 2 | "deck" | "v1" | 1 | 3 | 2 | "ock" | "v2" | 0 | 4 | 2 | "duck" | "v3" | - +-----+-----+-----+----------+--------+-----+-----+-----+---------+--------+-----+-----+-----+----------+--------+ - \ / \ / \ / - +----------- entry one -----------+ +----------- entry two ----------+ +---------- entry three ----------+ - - The block trailer will contains two restart points: - - +------------+-----------+--------+ - | 0 | 16 | 2 | - +------------+-----------+---+----+ - \ / \ - +-- restart points --+ + restart points length - -Block trailer: - - +-- 4-bytes --+ - / \ - +-----------------+-----------------+-----------------+------------------------------+ - | restart point 1 | .... | restart point n | restart points len (4-bytes) | - +-----------------+-----------------+-----------------+------------------------------+ - - -NOTE: All fixed-length integer are little-endian. -*/ - -/* -Filter block: - -Filter block consist of one or more filter data and a filter block trailer. -The trailer contains filter data offsets, a trailer offset and a 1-byte base Lg. - -Filter block data structure: - - + offset 1 + offset 2 + offset n + trailer offset - / / / / - +---------------+---------------+---------------+---------+ - | filter data 1 | ... | filter data n | trailer | - +---------------+---------------+---------------+---------+ - -Filter block trailer: - - +- 4-bytes -+ - / \ - +---------------+---------------+---------------+-------------------------------+------------------+ - | data 1 offset | .... | data n offset | data-offsets offset (4-bytes) | base Lg (1-byte) | - +-------------- +---------------+---------------+-------------------------------+------------------+ - - -NOTE: All fixed-length integer are little-endian. -*/ - -const ( - blockTrailerLen = 5 - footerLen = 48 - - magic = "\x57\xfb\x80\x8b\x24\x75\x47\xdb" - - // The block type gives the per-block compression format. - // These constants are part of the file format and should not be changed. - blockTypeNoCompression = 0 - blockTypeSnappyCompression = 1 - - // Generate new filter every 2KB of data - filterBaseLg = 11 - filterBase = 1 << filterBaseLg -) - -type blockHandle struct { - offset, length uint64 -} - -func decodeBlockHandle(src []byte) (blockHandle, int) { - offset, n := binary.Uvarint(src) - length, m := binary.Uvarint(src[n:]) - if n == 0 || m == 0 { - return blockHandle{}, 0 - } - return blockHandle{offset, length}, n + m -} - -func encodeBlockHandle(dst []byte, b blockHandle) int { - n := binary.PutUvarint(dst, b.offset) - m := binary.PutUvarint(dst[n:], b.length) - return n + m -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/table/writer.go b/vendor/github.com/pingcap/goleveldb/leveldb/table/writer.go deleted file mode 100644 index ca84fcb..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/table/writer.go +++ /dev/null @@ -1,375 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package table - -import ( - "encoding/binary" - "errors" - "fmt" - "io" - - "github.com/golang/snappy" - - "github.com/pingcap/goleveldb/leveldb/comparer" - "github.com/pingcap/goleveldb/leveldb/filter" - "github.com/pingcap/goleveldb/leveldb/opt" - "github.com/pingcap/goleveldb/leveldb/util" -) - -func sharedPrefixLen(a, b []byte) int { - i, n := 0, len(a) - if n > len(b) { - n = len(b) - } - for i < n && a[i] == b[i] { - i++ - } - return i -} - -type blockWriter struct { - restartInterval int - buf util.Buffer - nEntries int - prevKey []byte - restarts []uint32 - scratch []byte -} - -func (w *blockWriter) append(key, value []byte) { - nShared := 0 - if w.nEntries%w.restartInterval == 0 { - w.restarts = append(w.restarts, uint32(w.buf.Len())) - } else { - nShared = sharedPrefixLen(w.prevKey, key) - } - n := binary.PutUvarint(w.scratch[0:], uint64(nShared)) - n += binary.PutUvarint(w.scratch[n:], uint64(len(key)-nShared)) - n += binary.PutUvarint(w.scratch[n:], uint64(len(value))) - w.buf.Write(w.scratch[:n]) - w.buf.Write(key[nShared:]) - w.buf.Write(value) - w.prevKey = append(w.prevKey[:0], key...) - w.nEntries++ -} - -func (w *blockWriter) finish() { - // Write restarts entry. - if w.nEntries == 0 { - // Must have at least one restart entry. - w.restarts = append(w.restarts, 0) - } - w.restarts = append(w.restarts, uint32(len(w.restarts))) - for _, x := range w.restarts { - buf4 := w.buf.Alloc(4) - binary.LittleEndian.PutUint32(buf4, x) - } -} - -func (w *blockWriter) reset() { - w.buf.Reset() - w.nEntries = 0 - w.restarts = w.restarts[:0] -} - -func (w *blockWriter) bytesLen() int { - restartsLen := len(w.restarts) - if restartsLen == 0 { - restartsLen = 1 - } - return w.buf.Len() + 4*restartsLen + 4 -} - -type filterWriter struct { - generator filter.FilterGenerator - buf util.Buffer - nKeys int - offsets []uint32 -} - -func (w *filterWriter) add(key []byte) { - if w.generator == nil { - return - } - w.generator.Add(key) - w.nKeys++ -} - -func (w *filterWriter) flush(offset uint64) { - if w.generator == nil { - return - } - for x := int(offset / filterBase); x > len(w.offsets); { - w.generate() - } -} - -func (w *filterWriter) finish() { - if w.generator == nil { - return - } - // Generate last keys. - - if w.nKeys > 0 { - w.generate() - } - w.offsets = append(w.offsets, uint32(w.buf.Len())) - for _, x := range w.offsets { - buf4 := w.buf.Alloc(4) - binary.LittleEndian.PutUint32(buf4, x) - } - w.buf.WriteByte(filterBaseLg) -} - -func (w *filterWriter) generate() { - // Record offset. - w.offsets = append(w.offsets, uint32(w.buf.Len())) - // Generate filters. - if w.nKeys > 0 { - w.generator.Generate(&w.buf) - w.nKeys = 0 - } -} - -// Writer is a table writer. -type Writer struct { - writer io.Writer - err error - // Options - cmp comparer.Comparer - filter filter.Filter - compression opt.Compression - blockSize int - - dataBlock blockWriter - indexBlock blockWriter - filterBlock filterWriter - pendingBH blockHandle - offset uint64 - nEntries int - // Scratch allocated enough for 5 uvarint. Block writer should not use - // first 20-bytes since it will be used to encode block handle, which - // then passed to the block writer itself. - scratch [50]byte - comparerScratch []byte - compressionScratch []byte -} - -func (w *Writer) writeBlock(buf *util.Buffer, compression opt.Compression) (bh blockHandle, err error) { - // Compress the buffer if necessary. - var b []byte - if compression == opt.SnappyCompression { - // Allocate scratch enough for compression and block trailer. - if n := snappy.MaxEncodedLen(buf.Len()) + blockTrailerLen; len(w.compressionScratch) < n { - w.compressionScratch = make([]byte, n) - } - compressed := snappy.Encode(w.compressionScratch, buf.Bytes()) - n := len(compressed) - b = compressed[:n+blockTrailerLen] - b[n] = blockTypeSnappyCompression - } else { - tmp := buf.Alloc(blockTrailerLen) - tmp[0] = blockTypeNoCompression - b = buf.Bytes() - } - - // Calculate the checksum. - n := len(b) - 4 - checksum := util.NewCRC(b[:n]).Value() - binary.LittleEndian.PutUint32(b[n:], checksum) - - // Write the buffer to the file. - _, err = w.writer.Write(b) - if err != nil { - return - } - bh = blockHandle{w.offset, uint64(len(b) - blockTrailerLen)} - w.offset += uint64(len(b)) - return -} - -func (w *Writer) flushPendingBH(key []byte) { - if w.pendingBH.length == 0 { - return - } - var separator []byte - if len(key) == 0 { - separator = w.cmp.Successor(w.comparerScratch[:0], w.dataBlock.prevKey) - } else { - separator = w.cmp.Separator(w.comparerScratch[:0], w.dataBlock.prevKey, key) - } - if separator == nil { - separator = w.dataBlock.prevKey - } else { - w.comparerScratch = separator - } - n := encodeBlockHandle(w.scratch[:20], w.pendingBH) - // Append the block handle to the index block. - w.indexBlock.append(separator, w.scratch[:n]) - // Reset prev key of the data block. - w.dataBlock.prevKey = w.dataBlock.prevKey[:0] - // Clear pending block handle. - w.pendingBH = blockHandle{} -} - -func (w *Writer) finishBlock() error { - w.dataBlock.finish() - bh, err := w.writeBlock(&w.dataBlock.buf, w.compression) - if err != nil { - return err - } - w.pendingBH = bh - // Reset the data block. - w.dataBlock.reset() - // Flush the filter block. - w.filterBlock.flush(w.offset) - return nil -} - -// Append appends key/value pair to the table. The keys passed must -// be in increasing order. -// -// It is safe to modify the contents of the arguments after Append returns. -func (w *Writer) Append(key, value []byte) error { - if w.err != nil { - return w.err - } - if w.nEntries > 0 && w.cmp.Compare(w.dataBlock.prevKey, key) >= 0 { - w.err = fmt.Errorf("leveldb/table: Writer: keys are not in increasing order: %q, %q", w.dataBlock.prevKey, key) - return w.err - } - - w.flushPendingBH(key) - // Append key/value pair to the data block. - w.dataBlock.append(key, value) - // Add key to the filter block. - w.filterBlock.add(key) - - // Finish the data block if block size target reached. - if w.dataBlock.bytesLen() >= w.blockSize { - if err := w.finishBlock(); err != nil { - w.err = err - return w.err - } - } - w.nEntries++ - return nil -} - -// BlocksLen returns number of blocks written so far. -func (w *Writer) BlocksLen() int { - n := w.indexBlock.nEntries - if w.pendingBH.length > 0 { - // Includes the pending block. - n++ - } - return n -} - -// EntriesLen returns number of entries added so far. -func (w *Writer) EntriesLen() int { - return w.nEntries -} - -// BytesLen returns number of bytes written so far. -func (w *Writer) BytesLen() int { - return int(w.offset) -} - -// Close will finalize the table. Calling Append is not possible -// after Close, but calling BlocksLen, EntriesLen and BytesLen -// is still possible. -func (w *Writer) Close() error { - if w.err != nil { - return w.err - } - - // Write the last data block. Or empty data block if there - // aren't any data blocks at all. - if w.dataBlock.nEntries > 0 || w.nEntries == 0 { - if err := w.finishBlock(); err != nil { - w.err = err - return w.err - } - } - w.flushPendingBH(nil) - - // Write the filter block. - var filterBH blockHandle - w.filterBlock.finish() - if buf := &w.filterBlock.buf; buf.Len() > 0 { - filterBH, w.err = w.writeBlock(buf, opt.NoCompression) - if w.err != nil { - return w.err - } - } - - // Write the metaindex block. - if filterBH.length > 0 { - key := []byte("filter." + w.filter.Name()) - n := encodeBlockHandle(w.scratch[:20], filterBH) - w.dataBlock.append(key, w.scratch[:n]) - } - w.dataBlock.finish() - metaindexBH, err := w.writeBlock(&w.dataBlock.buf, w.compression) - if err != nil { - w.err = err - return w.err - } - - // Write the index block. - w.indexBlock.finish() - indexBH, err := w.writeBlock(&w.indexBlock.buf, w.compression) - if err != nil { - w.err = err - return w.err - } - - // Write the table footer. - footer := w.scratch[:footerLen] - for i := range footer { - footer[i] = 0 - } - n := encodeBlockHandle(footer, metaindexBH) - encodeBlockHandle(footer[n:], indexBH) - copy(footer[footerLen-len(magic):], magic) - if _, err := w.writer.Write(footer); err != nil { - w.err = err - return w.err - } - w.offset += footerLen - - w.err = errors.New("leveldb/table: writer is closed") - return nil -} - -// NewWriter creates a new initialized table writer for the file. -// -// Table writer is not safe for concurrent use. -func NewWriter(f io.Writer, o *opt.Options) *Writer { - w := &Writer{ - writer: f, - cmp: o.GetComparer(), - filter: o.GetFilter(), - compression: o.GetCompression(), - blockSize: o.GetBlockSize(), - comparerScratch: make([]byte, 0), - } - // data block - w.dataBlock.restartInterval = o.GetBlockRestartInterval() - // The first 20-bytes are used for encoding block handle. - w.dataBlock.scratch = w.scratch[20:] - // index block - w.indexBlock.restartInterval = 1 - w.indexBlock.scratch = w.scratch[20:] - // filter block - if w.filter != nil { - w.filterBlock.generator = w.filter.NewGenerator() - w.filterBlock.flush(0) - } - return w -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/util.go b/vendor/github.com/pingcap/goleveldb/leveldb/util.go deleted file mode 100644 index 2d71c7f..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/util.go +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "fmt" - "sort" - - "github.com/pingcap/goleveldb/leveldb/storage" -) - -func shorten(str string) string { - if len(str) <= 8 { - return str - } - return str[:3] + ".." + str[len(str)-3:] -} - -var bunits = [...]string{"", "Ki", "Mi", "Gi"} - -func shortenb(bytes int) string { - i := 0 - for ; bytes > 1024 && i < 4; i++ { - bytes /= 1024 - } - return fmt.Sprintf("%d%sB", bytes, bunits[i]) -} - -func sshortenb(bytes int) string { - if bytes == 0 { - return "~" - } - sign := "+" - if bytes < 0 { - sign = "-" - bytes *= -1 - } - i := 0 - for ; bytes > 1024 && i < 4; i++ { - bytes /= 1024 - } - return fmt.Sprintf("%s%d%sB", sign, bytes, bunits[i]) -} - -func sint(x int) string { - if x == 0 { - return "~" - } - sign := "+" - if x < 0 { - sign = "-" - x *= -1 - } - return fmt.Sprintf("%s%d", sign, x) -} - -func minInt(a, b int) int { - if a < b { - return a - } - return b -} - -func maxInt(a, b int) int { - if a > b { - return a - } - return b -} - -type fdSorter []storage.FileDesc - -func (p fdSorter) Len() int { - return len(p) -} - -func (p fdSorter) Less(i, j int) bool { - return p[i].Num < p[j].Num -} - -func (p fdSorter) Swap(i, j int) { - p[i], p[j] = p[j], p[i] -} - -func sortFds(fds []storage.FileDesc) { - sort.Sort(fdSorter(fds)) -} - -func ensureBuffer(b []byte, n int) []byte { - if cap(b) < n { - return make([]byte, n) - } - return b[:n] -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/util/buffer.go b/vendor/github.com/pingcap/goleveldb/leveldb/util/buffer.go deleted file mode 100644 index 21de242..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/util/buffer.go +++ /dev/null @@ -1,293 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package util - -// This a copy of Go std bytes.Buffer with some modification -// and some features stripped. - -import ( - "bytes" - "io" -) - -// A Buffer is a variable-sized buffer of bytes with Read and Write methods. -// The zero value for Buffer is an empty buffer ready to use. -type Buffer struct { - buf []byte // contents are the bytes buf[off : len(buf)] - off int // read at &buf[off], write at &buf[len(buf)] - bootstrap [64]byte // memory to hold first slice; helps small buffers (Printf) avoid allocation. -} - -// Bytes returns a slice of the contents of the unread portion of the buffer; -// len(b.Bytes()) == b.Len(). If the caller changes the contents of the -// returned slice, the contents of the buffer will change provided there -// are no intervening method calls on the Buffer. -func (b *Buffer) Bytes() []byte { return b.buf[b.off:] } - -// String returns the contents of the unread portion of the buffer -// as a string. If the Buffer is a nil pointer, it returns "". -func (b *Buffer) String() string { - if b == nil { - // Special case, useful in debugging. - return "" - } - return string(b.buf[b.off:]) -} - -// Len returns the number of bytes of the unread portion of the buffer; -// b.Len() == len(b.Bytes()). -func (b *Buffer) Len() int { return len(b.buf) - b.off } - -// Truncate discards all but the first n unread bytes from the buffer. -// It panics if n is negative or greater than the length of the buffer. -func (b *Buffer) Truncate(n int) { - switch { - case n < 0 || n > b.Len(): - panic("leveldb/util.Buffer: truncation out of range") - case n == 0: - // Reuse buffer space. - b.off = 0 - } - b.buf = b.buf[0 : b.off+n] -} - -// Reset resets the buffer so it has no content. -// b.Reset() is the same as b.Truncate(0). -func (b *Buffer) Reset() { b.Truncate(0) } - -// grow grows the buffer to guarantee space for n more bytes. -// It returns the index where bytes should be written. -// If the buffer can't grow it will panic with bytes.ErrTooLarge. -func (b *Buffer) grow(n int) int { - m := b.Len() - // If buffer is empty, reset to recover space. - if m == 0 && b.off != 0 { - b.Truncate(0) - } - if len(b.buf)+n > cap(b.buf) { - var buf []byte - if b.buf == nil && n <= len(b.bootstrap) { - buf = b.bootstrap[0:] - } else if m+n <= cap(b.buf)/2 { - // We can slide things down instead of allocating a new - // slice. We only need m+n <= cap(b.buf) to slide, but - // we instead let capacity get twice as large so we - // don't spend all our time copying. - copy(b.buf[:], b.buf[b.off:]) - buf = b.buf[:m] - } else { - // not enough space anywhere - buf = makeSlice(2*cap(b.buf) + n) - copy(buf, b.buf[b.off:]) - } - b.buf = buf - b.off = 0 - } - b.buf = b.buf[0 : b.off+m+n] - return b.off + m -} - -// Alloc allocs n bytes of slice from the buffer, growing the buffer as -// needed. If n is negative, Alloc will panic. -// If the buffer can't grow it will panic with bytes.ErrTooLarge. -func (b *Buffer) Alloc(n int) []byte { - if n < 0 { - panic("leveldb/util.Buffer.Alloc: negative count") - } - m := b.grow(n) - return b.buf[m:] -} - -// Grow grows the buffer's capacity, if necessary, to guarantee space for -// another n bytes. After Grow(n), at least n bytes can be written to the -// buffer without another allocation. -// If n is negative, Grow will panic. -// If the buffer can't grow it will panic with bytes.ErrTooLarge. -func (b *Buffer) Grow(n int) { - if n < 0 { - panic("leveldb/util.Buffer.Grow: negative count") - } - m := b.grow(n) - b.buf = b.buf[0:m] -} - -// Write appends the contents of p to the buffer, growing the buffer as -// needed. The return value n is the length of p; err is always nil. If the -// buffer becomes too large, Write will panic with bytes.ErrTooLarge. -func (b *Buffer) Write(p []byte) (n int, err error) { - m := b.grow(len(p)) - return copy(b.buf[m:], p), nil -} - -// MinRead is the minimum slice size passed to a Read call by -// Buffer.ReadFrom. As long as the Buffer has at least MinRead bytes beyond -// what is required to hold the contents of r, ReadFrom will not grow the -// underlying buffer. -const MinRead = 512 - -// ReadFrom reads data from r until EOF and appends it to the buffer, growing -// the buffer as needed. The return value n is the number of bytes read. Any -// error except io.EOF encountered during the read is also returned. If the -// buffer becomes too large, ReadFrom will panic with bytes.ErrTooLarge. -func (b *Buffer) ReadFrom(r io.Reader) (n int64, err error) { - // If buffer is empty, reset to recover space. - if b.off >= len(b.buf) { - b.Truncate(0) - } - for { - if free := cap(b.buf) - len(b.buf); free < MinRead { - // not enough space at end - newBuf := b.buf - if b.off+free < MinRead { - // not enough space using beginning of buffer; - // double buffer capacity - newBuf = makeSlice(2*cap(b.buf) + MinRead) - } - copy(newBuf, b.buf[b.off:]) - b.buf = newBuf[:len(b.buf)-b.off] - b.off = 0 - } - m, e := r.Read(b.buf[len(b.buf):cap(b.buf)]) - b.buf = b.buf[0 : len(b.buf)+m] - n += int64(m) - if e == io.EOF { - break - } - if e != nil { - return n, e - } - } - return n, nil // err is EOF, so return nil explicitly -} - -// makeSlice allocates a slice of size n. If the allocation fails, it panics -// with bytes.ErrTooLarge. -func makeSlice(n int) []byte { - // If the make fails, give a known error. - defer func() { - if recover() != nil { - panic(bytes.ErrTooLarge) - } - }() - return make([]byte, n) -} - -// WriteTo writes data to w until the buffer is drained or an error occurs. -// The return value n is the number of bytes written; it always fits into an -// int, but it is int64 to match the io.WriterTo interface. Any error -// encountered during the write is also returned. -func (b *Buffer) WriteTo(w io.Writer) (n int64, err error) { - if b.off < len(b.buf) { - nBytes := b.Len() - m, e := w.Write(b.buf[b.off:]) - if m > nBytes { - panic("leveldb/util.Buffer.WriteTo: invalid Write count") - } - b.off += m - n = int64(m) - if e != nil { - return n, e - } - // all bytes should have been written, by definition of - // Write method in io.Writer - if m != nBytes { - return n, io.ErrShortWrite - } - } - // Buffer is now empty; reset. - b.Truncate(0) - return -} - -// WriteByte appends the byte c to the buffer, growing the buffer as needed. -// The returned error is always nil, but is included to match bufio.Writer's -// WriteByte. If the buffer becomes too large, WriteByte will panic with -// bytes.ErrTooLarge. -func (b *Buffer) WriteByte(c byte) error { - m := b.grow(1) - b.buf[m] = c - return nil -} - -// Read reads the next len(p) bytes from the buffer or until the buffer -// is drained. The return value n is the number of bytes read. If the -// buffer has no data to return, err is io.EOF (unless len(p) is zero); -// otherwise it is nil. -func (b *Buffer) Read(p []byte) (n int, err error) { - if b.off >= len(b.buf) { - // Buffer is empty, reset to recover space. - b.Truncate(0) - if len(p) == 0 { - return - } - return 0, io.EOF - } - n = copy(p, b.buf[b.off:]) - b.off += n - return -} - -// Next returns a slice containing the next n bytes from the buffer, -// advancing the buffer as if the bytes had been returned by Read. -// If there are fewer than n bytes in the buffer, Next returns the entire buffer. -// The slice is only valid until the next call to a read or write method. -func (b *Buffer) Next(n int) []byte { - m := b.Len() - if n > m { - n = m - } - data := b.buf[b.off : b.off+n] - b.off += n - return data -} - -// ReadByte reads and returns the next byte from the buffer. -// If no byte is available, it returns error io.EOF. -func (b *Buffer) ReadByte() (c byte, err error) { - if b.off >= len(b.buf) { - // Buffer is empty, reset to recover space. - b.Truncate(0) - return 0, io.EOF - } - c = b.buf[b.off] - b.off++ - return c, nil -} - -// ReadBytes reads until the first occurrence of delim in the input, -// returning a slice containing the data up to and including the delimiter. -// If ReadBytes encounters an error before finding a delimiter, -// it returns the data read before the error and the error itself (often io.EOF). -// ReadBytes returns err != nil if and only if the returned data does not end in -// delim. -func (b *Buffer) ReadBytes(delim byte) (line []byte, err error) { - slice, err := b.readSlice(delim) - // return a copy of slice. The buffer's backing array may - // be overwritten by later calls. - line = append(line, slice...) - return -} - -// readSlice is like ReadBytes but returns a reference to internal buffer data. -func (b *Buffer) readSlice(delim byte) (line []byte, err error) { - i := bytes.IndexByte(b.buf[b.off:], delim) - end := b.off + i + 1 - if i < 0 { - end = len(b.buf) - err = io.EOF - } - line = b.buf[b.off:end] - b.off = end - return line, err -} - -// NewBuffer creates and initializes a new Buffer using buf as its initial -// contents. It is intended to prepare a Buffer to read existing data. It -// can also be used to size the internal buffer for writing. To do that, -// buf should have the desired capacity but a length of zero. -// -// In most cases, new(Buffer) (or just declaring a Buffer variable) is -// sufficient to initialize a Buffer. -func NewBuffer(buf []byte) *Buffer { return &Buffer{buf: buf} } diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/util/buffer_pool.go b/vendor/github.com/pingcap/goleveldb/leveldb/util/buffer_pool.go deleted file mode 100644 index 2f3db97..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/util/buffer_pool.go +++ /dev/null @@ -1,239 +0,0 @@ -// Copyright (c) 2014, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package util - -import ( - "fmt" - "sync" - "sync/atomic" - "time" -) - -type buffer struct { - b []byte - miss int -} - -// BufferPool is a 'buffer pool'. -type BufferPool struct { - pool [6]chan []byte - size [5]uint32 - sizeMiss [5]uint32 - sizeHalf [5]uint32 - baseline [4]int - baseline0 int - - mu sync.RWMutex - closed bool - closeC chan struct{} - - get uint32 - put uint32 - half uint32 - less uint32 - equal uint32 - greater uint32 - miss uint32 -} - -func (p *BufferPool) poolNum(n int) int { - if n <= p.baseline0 && n > p.baseline0/2 { - return 0 - } - for i, x := range p.baseline { - if n <= x { - return i + 1 - } - } - return len(p.baseline) + 1 -} - -// Get returns buffer with length of n. -func (p *BufferPool) Get(n int) []byte { - if p == nil { - return make([]byte, n) - } - - p.mu.RLock() - defer p.mu.RUnlock() - - if p.closed { - return make([]byte, n) - } - - atomic.AddUint32(&p.get, 1) - - poolNum := p.poolNum(n) - pool := p.pool[poolNum] - if poolNum == 0 { - // Fast path. - select { - case b := <-pool: - switch { - case cap(b) > n: - if cap(b)-n >= n { - atomic.AddUint32(&p.half, 1) - select { - case pool <- b: - default: - } - return make([]byte, n) - } else { - atomic.AddUint32(&p.less, 1) - return b[:n] - } - case cap(b) == n: - atomic.AddUint32(&p.equal, 1) - return b[:n] - default: - atomic.AddUint32(&p.greater, 1) - } - default: - atomic.AddUint32(&p.miss, 1) - } - - return make([]byte, n, p.baseline0) - } else { - sizePtr := &p.size[poolNum-1] - - select { - case b := <-pool: - switch { - case cap(b) > n: - if cap(b)-n >= n { - atomic.AddUint32(&p.half, 1) - sizeHalfPtr := &p.sizeHalf[poolNum-1] - if atomic.AddUint32(sizeHalfPtr, 1) == 20 { - atomic.StoreUint32(sizePtr, uint32(cap(b)/2)) - atomic.StoreUint32(sizeHalfPtr, 0) - } else { - select { - case pool <- b: - default: - } - } - return make([]byte, n) - } else { - atomic.AddUint32(&p.less, 1) - return b[:n] - } - case cap(b) == n: - atomic.AddUint32(&p.equal, 1) - return b[:n] - default: - atomic.AddUint32(&p.greater, 1) - if uint32(cap(b)) >= atomic.LoadUint32(sizePtr) { - select { - case pool <- b: - default: - } - } - } - default: - atomic.AddUint32(&p.miss, 1) - } - - if size := atomic.LoadUint32(sizePtr); uint32(n) > size { - if size == 0 { - atomic.CompareAndSwapUint32(sizePtr, 0, uint32(n)) - } else { - sizeMissPtr := &p.sizeMiss[poolNum-1] - if atomic.AddUint32(sizeMissPtr, 1) == 20 { - atomic.StoreUint32(sizePtr, uint32(n)) - atomic.StoreUint32(sizeMissPtr, 0) - } - } - return make([]byte, n) - } else { - return make([]byte, n, size) - } - } -} - -// Put adds given buffer to the pool. -func (p *BufferPool) Put(b []byte) { - if p == nil { - return - } - - p.mu.RLock() - defer p.mu.RUnlock() - - if p.closed { - return - } - - atomic.AddUint32(&p.put, 1) - - pool := p.pool[p.poolNum(cap(b))] - select { - case pool <- b: - default: - } - -} - -func (p *BufferPool) Close() { - if p == nil { - return - } - - p.mu.Lock() - if !p.closed { - p.closed = true - p.closeC <- struct{}{} - } - p.mu.Unlock() -} - -func (p *BufferPool) String() string { - if p == nil { - return "" - } - - return fmt.Sprintf("BufferPool{B·%d Z·%v Zm·%v Zh·%v G·%d P·%d H·%d <·%d =·%d >·%d M·%d}", - p.baseline0, p.size, p.sizeMiss, p.sizeHalf, p.get, p.put, p.half, p.less, p.equal, p.greater, p.miss) -} - -func (p *BufferPool) drain() { - ticker := time.NewTicker(2 * time.Second) - defer ticker.Stop() - for { - select { - case <-ticker.C: - for _, ch := range p.pool { - select { - case <-ch: - default: - } - } - case <-p.closeC: - close(p.closeC) - for _, ch := range p.pool { - close(ch) - } - return - } - } -} - -// NewBufferPool creates a new initialized 'buffer pool'. -func NewBufferPool(baseline int) *BufferPool { - if baseline <= 0 { - panic("baseline can't be <= 0") - } - p := &BufferPool{ - baseline0: baseline, - baseline: [...]int{baseline / 4, baseline / 2, baseline * 2, baseline * 4}, - closeC: make(chan struct{}, 1), - } - for i, cap := range []int{2, 2, 4, 4, 2, 1} { - p.pool[i] = make(chan []byte, cap) - } - go p.drain() - return p -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/util/crc32.go b/vendor/github.com/pingcap/goleveldb/leveldb/util/crc32.go deleted file mode 100644 index 631c9d6..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/util/crc32.go +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2011 The LevelDB-Go Authors. All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package util - -import ( - "hash/crc32" -) - -var table = crc32.MakeTable(crc32.Castagnoli) - -// CRC is a CRC-32 checksum computed using Castagnoli's polynomial. -type CRC uint32 - -// NewCRC creates a new crc based on the given bytes. -func NewCRC(b []byte) CRC { - return CRC(0).Update(b) -} - -// Update updates the crc with the given bytes. -func (c CRC) Update(b []byte) CRC { - return CRC(crc32.Update(uint32(c), table, b)) -} - -// Value returns a masked crc. -func (c CRC) Value() uint32 { - return uint32(c>>15|c<<17) + 0xa282ead8 -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/util/hash.go b/vendor/github.com/pingcap/goleveldb/leveldb/util/hash.go deleted file mode 100644 index 7f3fa4e..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/util/hash.go +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package util - -import ( - "encoding/binary" -) - -// Hash return hash of the given data. -func Hash(data []byte, seed uint32) uint32 { - // Similar to murmur hash - const ( - m = uint32(0xc6a4a793) - r = uint32(24) - ) - var ( - h = seed ^ (uint32(len(data)) * m) - i int - ) - - for n := len(data) - len(data)%4; i < n; i += 4 { - h += binary.LittleEndian.Uint32(data[i:]) - h *= m - h ^= (h >> 16) - } - - switch len(data) - i { - default: - panic("not reached") - case 3: - h += uint32(data[i+2]) << 16 - fallthrough - case 2: - h += uint32(data[i+1]) << 8 - fallthrough - case 1: - h += uint32(data[i]) - h *= m - h ^= (h >> r) - case 0: - } - - return h -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/util/range.go b/vendor/github.com/pingcap/goleveldb/leveldb/util/range.go deleted file mode 100644 index 8515958..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/util/range.go +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2014, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package util - -// Range is a key range. -type Range struct { - // Start of the key range, include in the range. - Start []byte - - // Limit of the key range, not include in the range. - Limit []byte -} - -// BytesPrefix returns key range that satisfy the given prefix. -// This only applicable for the standard 'bytes comparer'. -func BytesPrefix(prefix []byte) *Range { - var limit []byte - for i := len(prefix) - 1; i >= 0; i-- { - c := prefix[i] - if c < 0xff { - limit = make([]byte, i+1) - copy(limit, prefix) - limit[i] = c + 1 - break - } - } - return &Range{prefix, limit} -} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/util/util.go b/vendor/github.com/pingcap/goleveldb/leveldb/util/util.go deleted file mode 100644 index f359768..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/util/util.go +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (c) 2013, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Package util provides utilities used throughout leveldb. -package util - -import ( - "errors" -) - -var ( - ErrReleased = errors.New("leveldb: resource already relesed") - ErrHasReleaser = errors.New("leveldb: releaser already defined") -) - -// Releaser is the interface that wraps the basic Release method. -type Releaser interface { - // Release releases associated resources. Release should always success - // and can be called multipe times without causing error. - Release() -} - -// ReleaseSetter is the interface that wraps the basic SetReleaser method. -type ReleaseSetter interface { - // SetReleaser associates the given releaser to the resources. The - // releaser will be called once coresponding resources released. - // Calling SetReleaser with nil will clear the releaser. - // - // This will panic if a releaser already present or coresponding - // resource is already released. Releaser should be cleared first - // before assigned a new one. - SetReleaser(releaser Releaser) -} - -// BasicReleaser provides basic implementation of Releaser and ReleaseSetter. -type BasicReleaser struct { - releaser Releaser - released bool -} - -// Released returns whether Release method already called. -func (r *BasicReleaser) Released() bool { - return r.released -} - -// Release implements Releaser.Release. -func (r *BasicReleaser) Release() { - if !r.released { - if r.releaser != nil { - r.releaser.Release() - r.releaser = nil - } - r.released = true - } -} - -// SetReleaser implements ReleaseSetter.SetReleaser. -func (r *BasicReleaser) SetReleaser(releaser Releaser) { - if r.released { - panic(ErrReleased) - } - if r.releaser != nil && releaser != nil { - panic(ErrHasReleaser) - } - r.releaser = releaser -} - -type NoopReleaser struct{} - -func (NoopReleaser) Release() {} diff --git a/vendor/github.com/pingcap/goleveldb/leveldb/version.go b/vendor/github.com/pingcap/goleveldb/leveldb/version.go deleted file mode 100644 index 3bc7c85..0000000 --- a/vendor/github.com/pingcap/goleveldb/leveldb/version.go +++ /dev/null @@ -1,528 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "fmt" - "sync/atomic" - "unsafe" - - "github.com/pingcap/goleveldb/leveldb/iterator" - "github.com/pingcap/goleveldb/leveldb/opt" - "github.com/pingcap/goleveldb/leveldb/util" -) - -type tSet struct { - level int - table *tFile -} - -type version struct { - s *session - - levels []tFiles - - // Level that should be compacted next and its compaction score. - // Score < 1 means compaction is not strictly needed. These fields - // are initialized by computeCompaction() - cLevel int - cScore float64 - - cSeek unsafe.Pointer - - closing bool - ref int - released bool -} - -func newVersion(s *session) *version { - return &version{s: s} -} - -func (v *version) incref() { - if v.released { - panic("already released") - } - - v.ref++ - if v.ref == 1 { - // Incr file ref. - for _, tt := range v.levels { - for _, t := range tt { - v.s.addFileRef(t.fd, 1) - } - } - } -} - -func (v *version) releaseNB() { - v.ref-- - if v.ref > 0 { - return - } else if v.ref < 0 { - panic("negative version ref") - } - - for _, tt := range v.levels { - for _, t := range tt { - if v.s.addFileRef(t.fd, -1) == 0 { - v.s.tops.remove(t) - } - } - } - - v.released = true -} - -func (v *version) release() { - v.s.vmu.Lock() - v.releaseNB() - v.s.vmu.Unlock() -} - -func (v *version) walkOverlapping(aux tFiles, ikey internalKey, f func(level int, t *tFile) bool, lf func(level int) bool) { - ukey := ikey.ukey() - - // Aux level. - if aux != nil { - for _, t := range aux { - if t.overlaps(v.s.icmp, ukey, ukey) { - if !f(-1, t) { - return - } - } - } - - if lf != nil && !lf(-1) { - return - } - } - - // Walk tables level-by-level. - for level, tables := range v.levels { - if len(tables) == 0 { - continue - } - - if level == 0 { - // Level-0 files may overlap each other. Find all files that - // overlap ukey. - for _, t := range tables { - if t.overlaps(v.s.icmp, ukey, ukey) { - if !f(level, t) { - return - } - } - } - } else { - if i := tables.searchMax(v.s.icmp, ikey); i < len(tables) { - t := tables[i] - if v.s.icmp.uCompare(ukey, t.imin.ukey()) >= 0 { - if !f(level, t) { - return - } - } - } - } - - if lf != nil && !lf(level) { - return - } - } -} - -func (v *version) get(aux tFiles, ikey internalKey, ro *opt.ReadOptions, noValue bool) (value []byte, tcomp bool, err error) { - if v.closing { - return nil, false, ErrClosed - } - - ukey := ikey.ukey() - - var ( - tset *tSet - tseek bool - - // Level-0. - zfound bool - zseq uint64 - zkt keyType - zval []byte - ) - - err = ErrNotFound - - // Since entries never hop across level, finding key/value - // in smaller level make later levels irrelevant. - v.walkOverlapping(aux, ikey, func(level int, t *tFile) bool { - if level >= 0 && !tseek { - if tset == nil { - tset = &tSet{level, t} - } else { - tseek = true - } - } - - var ( - fikey, fval []byte - ferr error - ) - if noValue { - fikey, ferr = v.s.tops.findKey(t, ikey, ro) - } else { - fikey, fval, ferr = v.s.tops.find(t, ikey, ro) - } - - switch ferr { - case nil: - case ErrNotFound: - return true - default: - err = ferr - return false - } - - if fukey, fseq, fkt, fkerr := parseInternalKey(fikey); fkerr == nil { - if v.s.icmp.uCompare(ukey, fukey) == 0 { - // Level <= 0 may overlaps each-other. - if level <= 0 { - if fseq >= zseq { - zfound = true - zseq = fseq - zkt = fkt - zval = fval - } - } else { - switch fkt { - case keyTypeVal: - value = fval - err = nil - case keyTypeDel: - default: - panic("leveldb: invalid internalKey type") - } - return false - } - } - } else { - err = fkerr - return false - } - - return true - }, func(level int) bool { - if zfound { - switch zkt { - case keyTypeVal: - value = zval - err = nil - case keyTypeDel: - default: - panic("leveldb: invalid internalKey type") - } - return false - } - - return true - }) - - if tseek && tset.table.consumeSeek() <= 0 { - tcomp = atomic.CompareAndSwapPointer(&v.cSeek, nil, unsafe.Pointer(tset)) - } - - return -} - -func (v *version) sampleSeek(ikey internalKey) (tcomp bool) { - var tset *tSet - - v.walkOverlapping(nil, ikey, func(level int, t *tFile) bool { - if tset == nil { - tset = &tSet{level, t} - return true - } - if tset.table.consumeSeek() <= 0 { - tcomp = atomic.CompareAndSwapPointer(&v.cSeek, nil, unsafe.Pointer(tset)) - } - return false - }, nil) - - return -} - -func (v *version) getIterators(slice *util.Range, ro *opt.ReadOptions) (its []iterator.Iterator) { - strict := opt.GetStrict(v.s.o.Options, ro, opt.StrictReader) - for level, tables := range v.levels { - if level == 0 { - // Merge all level zero files together since they may overlap. - for _, t := range tables { - its = append(its, v.s.tops.newIterator(t, slice, ro)) - } - } else if len(tables) != 0 { - its = append(its, iterator.NewIndexedIterator(tables.newIndexIterator(v.s.tops, v.s.icmp, slice, ro), strict)) - } - } - return -} - -func (v *version) newStaging() *versionStaging { - return &versionStaging{base: v} -} - -// Spawn a new version based on this version. -func (v *version) spawn(r *sessionRecord) *version { - staging := v.newStaging() - staging.commit(r) - return staging.finish() -} - -func (v *version) fillRecord(r *sessionRecord) { - for level, tables := range v.levels { - for _, t := range tables { - r.addTableFile(level, t) - } - } -} - -func (v *version) tLen(level int) int { - if level < len(v.levels) { - return len(v.levels[level]) - } - return 0 -} - -func (v *version) offsetOf(ikey internalKey) (n int64, err error) { - for level, tables := range v.levels { - for _, t := range tables { - if v.s.icmp.Compare(t.imax, ikey) <= 0 { - // Entire file is before "ikey", so just add the file size - n += t.size - } else if v.s.icmp.Compare(t.imin, ikey) > 0 { - // Entire file is after "ikey", so ignore - if level > 0 { - // Files other than level 0 are sorted by meta->min, so - // no further files in this level will contain data for - // "ikey". - break - } - } else { - // "ikey" falls in the range for this table. Add the - // approximate offset of "ikey" within the table. - if m, err := v.s.tops.offsetOf(t, ikey); err == nil { - n += m - } else { - return 0, err - } - } - } - } - - return -} - -func (v *version) pickMemdbLevel(umin, umax []byte, maxLevel int) (level int) { - if maxLevel > 0 { - if len(v.levels) == 0 { - return maxLevel - } - if !v.levels[0].overlaps(v.s.icmp, umin, umax, true) { - var overlaps tFiles - for ; level < maxLevel; level++ { - if pLevel := level + 1; pLevel >= len(v.levels) { - return maxLevel - } else if v.levels[pLevel].overlaps(v.s.icmp, umin, umax, false) { - break - } - if gpLevel := level + 2; gpLevel < len(v.levels) { - overlaps = v.levels[gpLevel].getOverlaps(overlaps, v.s.icmp, umin, umax, false) - if overlaps.size() > int64(v.s.o.GetCompactionGPOverlaps(level)) { - break - } - } - } - } - } - return -} - -func (v *version) computeCompaction() { - // Precomputed best level for next compaction - bestLevel := int(-1) - bestScore := float64(-1) - - statFiles := make([]int, len(v.levels)) - statSizes := make([]string, len(v.levels)) - statScore := make([]string, len(v.levels)) - statTotSize := int64(0) - - for level, tables := range v.levels { - var score float64 - size := tables.size() - if level == 0 { - // We treat level-0 specially by bounding the number of files - // instead of number of bytes for two reasons: - // - // (1) With larger write-buffer sizes, it is nice not to do too - // many level-0 compaction. - // - // (2) The files in level-0 are merged on every read and - // therefore we wish to avoid too many files when the individual - // file size is small (perhaps because of a small write-buffer - // setting, or very high compression ratios, or lots of - // overwrites/deletions). - score = float64(len(tables)) / float64(v.s.o.GetCompactionL0Trigger()) - } else { - score = float64(size) / float64(v.s.o.GetCompactionTotalSize(level)) - } - - if score > bestScore { - bestLevel = level - bestScore = score - } - - statFiles[level] = len(tables) - statSizes[level] = shortenb(int(size)) - statScore[level] = fmt.Sprintf("%.2f", score) - statTotSize += size - } - - v.cLevel = bestLevel - v.cScore = bestScore - - v.s.logf("version@stat F·%v S·%s%v Sc·%v", statFiles, shortenb(int(statTotSize)), statSizes, statScore) -} - -func (v *version) needCompaction() bool { - return v.cScore >= 1 || atomic.LoadPointer(&v.cSeek) != nil -} - -type tablesScratch struct { - added map[int64]atRecord - deleted map[int64]struct{} -} - -type versionStaging struct { - base *version - levels []tablesScratch -} - -func (p *versionStaging) getScratch(level int) *tablesScratch { - if level >= len(p.levels) { - newLevels := make([]tablesScratch, level+1) - copy(newLevels, p.levels) - p.levels = newLevels - } - return &(p.levels[level]) -} - -func (p *versionStaging) commit(r *sessionRecord) { - // Deleted tables. - for _, r := range r.deletedTables { - scratch := p.getScratch(r.level) - if r.level < len(p.base.levels) && len(p.base.levels[r.level]) > 0 { - if scratch.deleted == nil { - scratch.deleted = make(map[int64]struct{}) - } - scratch.deleted[r.num] = struct{}{} - } - if scratch.added != nil { - delete(scratch.added, r.num) - } - } - - // New tables. - for _, r := range r.addedTables { - scratch := p.getScratch(r.level) - if scratch.added == nil { - scratch.added = make(map[int64]atRecord) - } - scratch.added[r.num] = r - if scratch.deleted != nil { - delete(scratch.deleted, r.num) - } - } -} - -func (p *versionStaging) finish() *version { - // Build new version. - nv := newVersion(p.base.s) - numLevel := len(p.levels) - if len(p.base.levels) > numLevel { - numLevel = len(p.base.levels) - } - nv.levels = make([]tFiles, numLevel) - for level := 0; level < numLevel; level++ { - var baseTabels tFiles - if level < len(p.base.levels) { - baseTabels = p.base.levels[level] - } - - if level < len(p.levels) { - scratch := p.levels[level] - - var nt tFiles - // Prealloc list if possible. - if n := len(baseTabels) + len(scratch.added) - len(scratch.deleted); n > 0 { - nt = make(tFiles, 0, n) - } - - // Base tables. - for _, t := range baseTabels { - if _, ok := scratch.deleted[t.fd.Num]; ok { - continue - } - if _, ok := scratch.added[t.fd.Num]; ok { - continue - } - nt = append(nt, t) - } - - // New tables. - for _, r := range scratch.added { - nt = append(nt, tableFileFromRecord(r)) - } - - if len(nt) != 0 { - // Sort tables. - if level == 0 { - nt.sortByNum() - } else { - nt.sortByKey(p.base.s.icmp) - } - - nv.levels[level] = nt - } - } else { - nv.levels[level] = baseTabels - } - } - - // Trim levels. - n := len(nv.levels) - for ; n > 0 && nv.levels[n-1] == nil; n-- { - } - nv.levels = nv.levels[:n] - - // Compute compaction score for new version. - nv.computeCompaction() - - return nv -} - -type versionReleaser struct { - v *version - once bool -} - -func (vr *versionReleaser) Release() { - v := vr.v - v.s.vmu.Lock() - if !vr.once { - v.releaseNB() - vr.once = true - } - v.s.vmu.Unlock() -} diff --git a/vendor/github.com/pingcap/kvproto/LICENSE b/vendor/github.com/pingcap/kvproto/LICENSE deleted file mode 100644 index b67d909..0000000 --- a/vendor/github.com/pingcap/kvproto/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/pingcap/kvproto/_vendor/src/github.com/gogo/protobuf/LICENSE b/vendor/github.com/pingcap/kvproto/_vendor/src/github.com/gogo/protobuf/LICENSE deleted file mode 100644 index 7be0cc7..0000000 --- a/vendor/github.com/pingcap/kvproto/_vendor/src/github.com/gogo/protobuf/LICENSE +++ /dev/null @@ -1,36 +0,0 @@ -Protocol Buffers for Go with Gadgets - -Copyright (c) 2013, The GoGo Authors. All rights reserved. -http://github.com/gogo/protobuf - -Go support for Protocol Buffers - Google's data interchange format - -Copyright 2010 The Go Authors. All rights reserved. -https://github.com/golang/protobuf - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - diff --git a/vendor/github.com/pingcap/kvproto/_vendor/src/github.com/golang/protobuf/LICENSE b/vendor/github.com/pingcap/kvproto/_vendor/src/github.com/golang/protobuf/LICENSE deleted file mode 100644 index 1b1b192..0000000 --- a/vendor/github.com/pingcap/kvproto/_vendor/src/github.com/golang/protobuf/LICENSE +++ /dev/null @@ -1,31 +0,0 @@ -Go support for Protocol Buffers - Google's data interchange format - -Copyright 2010 The Go Authors. All rights reserved. -https://github.com/golang/protobuf - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - diff --git a/vendor/github.com/pingcap/kvproto/_vendor/src/github.com/juju/errors/LICENSE b/vendor/github.com/pingcap/kvproto/_vendor/src/github.com/juju/errors/LICENSE deleted file mode 100644 index ade9307..0000000 --- a/vendor/github.com/pingcap/kvproto/_vendor/src/github.com/juju/errors/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ -All files in this repository are licensed as follows. If you contribute -to this repository, it is assumed that you license your contribution -under the same license unless you state otherwise. - -All files Copyright (C) 2015 Canonical Ltd. unless otherwise specified in the file. - -This software is licensed under the LGPLv3, included below. - -As a special exception to the GNU Lesser General Public License version 3 -("LGPL3"), the copyright holders of this Library give you permission to -convey to a third party a Combined Work that links statically or dynamically -to this Library without providing any Minimal Corresponding Source or -Minimal Application Code as set out in 4d or providing the installation -information set out in section 4e, provided that you comply with the other -provisions of LGPL3 and provided that you meet, for the Application the -terms and conditions of the license(s) which apply to the Application. - -Except as stated in this special exception, the provisions of LGPL3 will -continue to comply in full to this Library. If you modify this Library, you -may apply this exception to your version of this Library, but you are not -obliged to do so. If you do not wish to do so, delete this exception -statement from your version. This exception does not (and cannot) modify any -license terms which apply to the Application, with which you must still -comply. - - - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. diff --git a/vendor/github.com/pingcap/kvproto/_vendor/src/github.com/pingcap/kvproto b/vendor/github.com/pingcap/kvproto/_vendor/src/github.com/pingcap/kvproto deleted file mode 120000 index c866b86..0000000 --- a/vendor/github.com/pingcap/kvproto/_vendor/src/github.com/pingcap/kvproto +++ /dev/null @@ -1 +0,0 @@ -../../../.. \ No newline at end of file diff --git a/vendor/github.com/pingcap/kvproto/_vendor/src/github.com/pingcap/tipb/LICENSE b/vendor/github.com/pingcap/kvproto/_vendor/src/github.com/pingcap/tipb/LICENSE deleted file mode 100644 index 8dada3e..0000000 --- a/vendor/github.com/pingcap/kvproto/_vendor/src/github.com/pingcap/tipb/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/pingcap/kvproto/_vendor/src/golang.org/x/net/LICENSE b/vendor/github.com/pingcap/kvproto/_vendor/src/golang.org/x/net/LICENSE deleted file mode 100644 index 6a66aea..0000000 --- a/vendor/github.com/pingcap/kvproto/_vendor/src/golang.org/x/net/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/pingcap/kvproto/_vendor/src/golang.org/x/net/PATENTS b/vendor/github.com/pingcap/kvproto/_vendor/src/golang.org/x/net/PATENTS deleted file mode 100644 index 7330990..0000000 --- a/vendor/github.com/pingcap/kvproto/_vendor/src/golang.org/x/net/PATENTS +++ /dev/null @@ -1,22 +0,0 @@ -Additional IP Rights Grant (Patents) - -"This implementation" means the copyrightable works distributed by -Google as part of the Go project. - -Google hereby grants to You a perpetual, worldwide, non-exclusive, -no-charge, royalty-free, irrevocable (except as stated in this section) -patent license to make, have made, use, offer to sell, sell, import, -transfer and otherwise run, modify and propagate the contents of this -implementation of Go, where such license applies only to those patent -claims, both currently owned or controlled by Google and acquired in -the future, licensable by Google that are necessarily infringed by this -implementation of Go. This grant does not include claims that would be -infringed only as a consequence of further modification of this -implementation. If you or your agent or exclusive licensee institute or -order or agree to the institution of patent litigation against any -entity (including a cross-claim or counterclaim in a lawsuit) alleging -that this implementation of Go or any code incorporated within this -implementation of Go constitutes direct or contributory patent -infringement, or inducement of patent infringement, then any patent -rights granted to you under this License for this implementation of Go -shall terminate as of the date such litigation is filed. diff --git a/vendor/github.com/pingcap/kvproto/_vendor/src/golang.org/x/text/LICENSE b/vendor/github.com/pingcap/kvproto/_vendor/src/golang.org/x/text/LICENSE deleted file mode 100644 index 6a66aea..0000000 --- a/vendor/github.com/pingcap/kvproto/_vendor/src/golang.org/x/text/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/pingcap/kvproto/_vendor/src/golang.org/x/tools/LICENSE b/vendor/github.com/pingcap/kvproto/_vendor/src/golang.org/x/tools/LICENSE deleted file mode 100644 index 6a66aea..0000000 --- a/vendor/github.com/pingcap/kvproto/_vendor/src/golang.org/x/tools/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/pingcap/kvproto/_vendor/src/golang.org/x/tools/PATENTS b/vendor/github.com/pingcap/kvproto/_vendor/src/golang.org/x/tools/PATENTS deleted file mode 100644 index 7330990..0000000 --- a/vendor/github.com/pingcap/kvproto/_vendor/src/golang.org/x/tools/PATENTS +++ /dev/null @@ -1,22 +0,0 @@ -Additional IP Rights Grant (Patents) - -"This implementation" means the copyrightable works distributed by -Google as part of the Go project. - -Google hereby grants to You a perpetual, worldwide, non-exclusive, -no-charge, royalty-free, irrevocable (except as stated in this section) -patent license to make, have made, use, offer to sell, sell, import, -transfer and otherwise run, modify and propagate the contents of this -implementation of Go, where such license applies only to those patent -claims, both currently owned or controlled by Google and acquired in -the future, licensable by Google that are necessarily infringed by this -implementation of Go. This grant does not include claims that would be -infringed only as a consequence of further modification of this -implementation. If you or your agent or exclusive licensee institute or -order or agree to the institution of patent litigation against any -entity (including a cross-claim or counterclaim in a lawsuit) alleging -that this implementation of Go or any code incorporated within this -implementation of Go constitutes direct or contributory patent -infringement, or inducement of patent infringement, then any patent -rights granted to you under this License for this implementation of Go -shall terminate as of the date such litigation is filed. diff --git a/vendor/github.com/pingcap/kvproto/_vendor/src/google.golang.org/grpc/LICENSE b/vendor/github.com/pingcap/kvproto/_vendor/src/google.golang.org/grpc/LICENSE deleted file mode 100644 index f4988b4..0000000 --- a/vendor/github.com/pingcap/kvproto/_vendor/src/google.golang.org/grpc/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ -Copyright 2014, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/pingcap/kvproto/_vendor/src/google.golang.org/grpc/PATENTS b/vendor/github.com/pingcap/kvproto/_vendor/src/google.golang.org/grpc/PATENTS deleted file mode 100644 index 69b4795..0000000 --- a/vendor/github.com/pingcap/kvproto/_vendor/src/google.golang.org/grpc/PATENTS +++ /dev/null @@ -1,22 +0,0 @@ -Additional IP Rights Grant (Patents) - -"This implementation" means the copyrightable works distributed by -Google as part of the gRPC project. - -Google hereby grants to You a perpetual, worldwide, non-exclusive, -no-charge, royalty-free, irrevocable (except as stated in this section) -patent license to make, have made, use, offer to sell, sell, import, -transfer and otherwise run, modify and propagate the contents of this -implementation of gRPC, where such license applies only to those patent -claims, both currently owned or controlled by Google and acquired in -the future, licensable by Google that are necessarily infringed by this -implementation of gRPC. This grant does not include claims that would be -infringed only as a consequence of further modification of this -implementation. If you or your agent or exclusive licensee institute or -order or agree to the institution of patent litigation against any -entity (including a cross-claim or counterclaim in a lawsuit) alleging -that this implementation of gRPC or any code incorporated within this -implementation of gRPC constitutes direct or contributory patent -infringement, or inducement of patent infringement, then any patent -rights granted to you under this License for this implementation of gRPC -shall terminate as of the date such litigation is filed. diff --git a/vendor/github.com/pingcap/kvproto/pkg/coprocessor/coprocessor.pb.go b/vendor/github.com/pingcap/kvproto/pkg/coprocessor/coprocessor.pb.go deleted file mode 100644 index 03a1644..0000000 --- a/vendor/github.com/pingcap/kvproto/pkg/coprocessor/coprocessor.pb.go +++ /dev/null @@ -1,1073 +0,0 @@ -// Code generated by protoc-gen-gogo. -// source: coprocessor.proto -// DO NOT EDIT! - -/* - Package coprocessor is a generated protocol buffer package. - - It is generated from these files: - coprocessor.proto - - It has these top-level messages: - KeyRange - Request - Response -*/ -package coprocessor - -import ( - "fmt" - "io" - "math" - - proto "github.com/golang/protobuf/proto" - - errorpb "github.com/pingcap/kvproto/pkg/errorpb" - - kvrpcpb "github.com/pingcap/kvproto/pkg/kvrpcpb" - - github_com_pingcap_tipb_sharedbytes "github.com/pingcap/tipb/sharedbytes" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -// [start, end) -type KeyRange struct { - Start []byte `protobuf:"bytes,1,opt,name=start,proto3" json:"start,omitempty"` - End []byte `protobuf:"bytes,2,opt,name=end,proto3" json:"end,omitempty"` -} - -func (m *KeyRange) Reset() { *m = KeyRange{} } -func (m *KeyRange) String() string { return proto.CompactTextString(m) } -func (*KeyRange) ProtoMessage() {} -func (*KeyRange) Descriptor() ([]byte, []int) { return fileDescriptorCoprocessor, []int{0} } - -func (m *KeyRange) GetStart() []byte { - if m != nil { - return m.Start - } - return nil -} - -func (m *KeyRange) GetEnd() []byte { - if m != nil { - return m.End - } - return nil -} - -type Request struct { - Context *kvrpcpb.Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` - Tp int64 `protobuf:"varint,2,opt,name=tp,proto3" json:"tp,omitempty"` - Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` - Ranges []*KeyRange `protobuf:"bytes,4,rep,name=ranges" json:"ranges,omitempty"` -} - -func (m *Request) Reset() { *m = Request{} } -func (m *Request) String() string { return proto.CompactTextString(m) } -func (*Request) ProtoMessage() {} -func (*Request) Descriptor() ([]byte, []int) { return fileDescriptorCoprocessor, []int{1} } - -func (m *Request) GetContext() *kvrpcpb.Context { - if m != nil { - return m.Context - } - return nil -} - -func (m *Request) GetTp() int64 { - if m != nil { - return m.Tp - } - return 0 -} - -func (m *Request) GetData() []byte { - if m != nil { - return m.Data - } - return nil -} - -func (m *Request) GetRanges() []*KeyRange { - if m != nil { - return m.Ranges - } - return nil -} - -type Response struct { - Data github_com_pingcap_tipb_sharedbytes.SharedBytes `protobuf:"bytes,1,opt,name=data,proto3,customtype=github.com/pingcap/tipb/sharedbytes.SharedBytes" json:"data"` - RegionError *errorpb.Error `protobuf:"bytes,2,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Locked *kvrpcpb.LockInfo `protobuf:"bytes,3,opt,name=locked" json:"locked,omitempty"` - OtherError string `protobuf:"bytes,4,opt,name=other_error,json=otherError,proto3" json:"other_error,omitempty"` - Range *KeyRange `protobuf:"bytes,5,opt,name=range" json:"range,omitempty"` - ExecDetails *kvrpcpb.ExecDetails `protobuf:"bytes,6,opt,name=exec_details,json=execDetails" json:"exec_details,omitempty"` -} - -func (m *Response) Reset() { *m = Response{} } -func (m *Response) String() string { return proto.CompactTextString(m) } -func (*Response) ProtoMessage() {} -func (*Response) Descriptor() ([]byte, []int) { return fileDescriptorCoprocessor, []int{2} } - -func (m *Response) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *Response) GetLocked() *kvrpcpb.LockInfo { - if m != nil { - return m.Locked - } - return nil -} - -func (m *Response) GetOtherError() string { - if m != nil { - return m.OtherError - } - return "" -} - -func (m *Response) GetRange() *KeyRange { - if m != nil { - return m.Range - } - return nil -} - -func (m *Response) GetExecDetails() *kvrpcpb.ExecDetails { - if m != nil { - return m.ExecDetails - } - return nil -} - -func init() { - proto.RegisterType((*KeyRange)(nil), "coprocessor.KeyRange") - proto.RegisterType((*Request)(nil), "coprocessor.Request") - proto.RegisterType((*Response)(nil), "coprocessor.Response") -} -func (m *KeyRange) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *KeyRange) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Start) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintCoprocessor(dAtA, i, uint64(len(m.Start))) - i += copy(dAtA[i:], m.Start) - } - if len(m.End) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintCoprocessor(dAtA, i, uint64(len(m.End))) - i += copy(dAtA[i:], m.End) - } - return i, nil -} - -func (m *Request) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Request) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Context != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintCoprocessor(dAtA, i, uint64(m.Context.Size())) - n1, err := m.Context.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if m.Tp != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintCoprocessor(dAtA, i, uint64(m.Tp)) - } - if len(m.Data) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintCoprocessor(dAtA, i, uint64(len(m.Data))) - i += copy(dAtA[i:], m.Data) - } - if len(m.Ranges) > 0 { - for _, msg := range m.Ranges { - dAtA[i] = 0x22 - i++ - i = encodeVarintCoprocessor(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *Response) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Response) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintCoprocessor(dAtA, i, uint64(m.Data.Size())) - n2, err := m.Data.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - if m.RegionError != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintCoprocessor(dAtA, i, uint64(m.RegionError.Size())) - n3, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.Locked != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintCoprocessor(dAtA, i, uint64(m.Locked.Size())) - n4, err := m.Locked.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if len(m.OtherError) > 0 { - dAtA[i] = 0x22 - i++ - i = encodeVarintCoprocessor(dAtA, i, uint64(len(m.OtherError))) - i += copy(dAtA[i:], m.OtherError) - } - if m.Range != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintCoprocessor(dAtA, i, uint64(m.Range.Size())) - n5, err := m.Range.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if m.ExecDetails != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintCoprocessor(dAtA, i, uint64(m.ExecDetails.Size())) - n6, err := m.ExecDetails.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - return i, nil -} - -func encodeFixed64Coprocessor(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Coprocessor(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintCoprocessor(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *KeyRange) Size() (n int) { - var l int - _ = l - l = len(m.Start) - if l > 0 { - n += 1 + l + sovCoprocessor(uint64(l)) - } - l = len(m.End) - if l > 0 { - n += 1 + l + sovCoprocessor(uint64(l)) - } - return n -} - -func (m *Request) Size() (n int) { - var l int - _ = l - if m.Context != nil { - l = m.Context.Size() - n += 1 + l + sovCoprocessor(uint64(l)) - } - if m.Tp != 0 { - n += 1 + sovCoprocessor(uint64(m.Tp)) - } - l = len(m.Data) - if l > 0 { - n += 1 + l + sovCoprocessor(uint64(l)) - } - if len(m.Ranges) > 0 { - for _, e := range m.Ranges { - l = e.Size() - n += 1 + l + sovCoprocessor(uint64(l)) - } - } - return n -} - -func (m *Response) Size() (n int) { - var l int - _ = l - l = m.Data.Size() - n += 1 + l + sovCoprocessor(uint64(l)) - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovCoprocessor(uint64(l)) - } - if m.Locked != nil { - l = m.Locked.Size() - n += 1 + l + sovCoprocessor(uint64(l)) - } - l = len(m.OtherError) - if l > 0 { - n += 1 + l + sovCoprocessor(uint64(l)) - } - if m.Range != nil { - l = m.Range.Size() - n += 1 + l + sovCoprocessor(uint64(l)) - } - if m.ExecDetails != nil { - l = m.ExecDetails.Size() - n += 1 + l + sovCoprocessor(uint64(l)) - } - return n -} - -func sovCoprocessor(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozCoprocessor(x uint64) (n int) { - return sovCoprocessor(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *KeyRange) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCoprocessor - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: KeyRange: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: KeyRange: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCoprocessor - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthCoprocessor - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Start = append(m.Start[:0], dAtA[iNdEx:postIndex]...) - if m.Start == nil { - m.Start = []byte{} - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field End", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCoprocessor - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthCoprocessor - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.End = append(m.End[:0], dAtA[iNdEx:postIndex]...) - if m.End == nil { - m.End = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCoprocessor(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCoprocessor - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Request) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCoprocessor - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Request: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCoprocessor - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCoprocessor - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Context == nil { - m.Context = &kvrpcpb.Context{} - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Tp", wireType) - } - m.Tp = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCoprocessor - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Tp |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCoprocessor - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthCoprocessor - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...) - if m.Data == nil { - m.Data = []byte{} - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Ranges", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCoprocessor - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCoprocessor - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Ranges = append(m.Ranges, &KeyRange{}) - if err := m.Ranges[len(m.Ranges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCoprocessor(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCoprocessor - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Response) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCoprocessor - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Response: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Response: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCoprocessor - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthCoprocessor - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Data.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCoprocessor - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCoprocessor - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Locked", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCoprocessor - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCoprocessor - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Locked == nil { - m.Locked = &kvrpcpb.LockInfo{} - } - if err := m.Locked.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field OtherError", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCoprocessor - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthCoprocessor - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.OtherError = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Range", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCoprocessor - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCoprocessor - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Range == nil { - m.Range = &KeyRange{} - } - if err := m.Range.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ExecDetails", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCoprocessor - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCoprocessor - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ExecDetails == nil { - m.ExecDetails = &kvrpcpb.ExecDetails{} - } - if err := m.ExecDetails.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCoprocessor(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCoprocessor - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipCoprocessor(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowCoprocessor - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowCoprocessor - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowCoprocessor - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - iNdEx += length - if length < 0 { - return 0, ErrInvalidLengthCoprocessor - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowCoprocessor - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipCoprocessor(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthCoprocessor = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowCoprocessor = fmt.Errorf("proto: integer overflow") -) - -func init() { proto.RegisterFile("coprocessor.proto", fileDescriptorCoprocessor) } - -var fileDescriptorCoprocessor = []byte{ - // 424 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x52, 0x4b, 0x6e, 0xdb, 0x30, - 0x14, 0x8c, 0xfc, 0x4b, 0x4a, 0x39, 0x41, 0x42, 0xb8, 0x80, 0x90, 0x85, 0x6d, 0x78, 0xe5, 0xa6, - 0x28, 0x85, 0xaa, 0x8b, 0xec, 0xdd, 0x66, 0x51, 0xa4, 0x2b, 0xf6, 0x00, 0x81, 0x44, 0xbd, 0xca, - 0x82, 0x12, 0x3d, 0x96, 0x64, 0x0c, 0xe7, 0x06, 0x3d, 0x42, 0x0f, 0xd3, 0x03, 0x64, 0xd9, 0x75, - 0x17, 0x41, 0xe1, 0x5e, 0xa4, 0xd0, 0xa3, 0xe4, 0x66, 0xd3, 0x95, 0xe6, 0x0d, 0x87, 0xc3, 0x79, - 0x03, 0xb1, 0x33, 0x85, 0xda, 0xa0, 0x02, 0x6b, 0xd1, 0x08, 0x6d, 0xd0, 0x21, 0x0f, 0x9f, 0x51, - 0xe7, 0xc7, 0x60, 0x0c, 0x1a, 0x9d, 0xf9, 0xb3, 0xf3, 0xe3, 0x6a, 0x63, 0xb4, 0xda, 0x8f, 0x93, - 0x02, 0x0b, 0x24, 0x18, 0x37, 0xc8, 0xb3, 0x8b, 0x84, 0x1d, 0x5d, 0xc3, 0x83, 0x4c, 0xeb, 0x02, - 0xf8, 0x84, 0x0d, 0xad, 0x4b, 0x8d, 0x8b, 0x82, 0x79, 0xb0, 0x1c, 0x4b, 0x3f, 0xf0, 0x53, 0xd6, - 0x87, 0x3a, 0x8f, 0x7a, 0xc4, 0x35, 0x70, 0xf1, 0x2d, 0x60, 0x87, 0x12, 0xbe, 0xde, 0x83, 0x75, - 0xfc, 0x82, 0x1d, 0x2a, 0xac, 0x1d, 0x6c, 0xfd, 0xad, 0x30, 0x39, 0x15, 0xdd, 0xb3, 0xef, 0x3d, - 0x2f, 0x3b, 0x01, 0x3f, 0x61, 0x3d, 0xa7, 0xc9, 0xa8, 0x2f, 0x7b, 0x4e, 0x73, 0xce, 0x06, 0x79, - 0xea, 0xd2, 0xa8, 0x4f, 0xd6, 0x84, 0xf9, 0x1b, 0x36, 0x32, 0x4d, 0x18, 0x1b, 0x0d, 0xe6, 0xfd, - 0x65, 0x98, 0xbc, 0x14, 0xcf, 0x97, 0xee, 0xa2, 0xca, 0x56, 0xb4, 0xf8, 0xd1, 0x63, 0x47, 0x12, - 0xac, 0xc6, 0xda, 0x02, 0xbf, 0x6e, 0xfd, 0x28, 0xfe, 0xea, 0xf2, 0xf1, 0x69, 0x76, 0xf0, 0xeb, - 0x69, 0x16, 0x17, 0xa5, 0x5b, 0xdf, 0x67, 0x42, 0xe1, 0x5d, 0xac, 0xcb, 0xba, 0x50, 0xa9, 0x8e, - 0x5d, 0xa9, 0xb3, 0xd8, 0xae, 0x53, 0x03, 0x79, 0xf6, 0xe0, 0xc0, 0x8a, 0xcf, 0x84, 0x57, 0x0d, - 0x6e, 0x83, 0xbc, 0x65, 0x63, 0x03, 0x45, 0x89, 0xf5, 0x0d, 0xb5, 0x4a, 0xb1, 0xc3, 0xe4, 0x44, - 0x74, 0x1d, 0x5f, 0x35, 0x5f, 0x19, 0x7a, 0x0d, 0x0d, 0xfc, 0x15, 0x1b, 0xdd, 0xa2, 0xaa, 0x20, - 0xa7, 0x8d, 0xc2, 0xe4, 0x6c, 0x5f, 0xc5, 0x27, 0x54, 0xd5, 0xc7, 0xfa, 0x0b, 0xca, 0x56, 0xc0, - 0x67, 0x2c, 0x44, 0xb7, 0x06, 0xd3, 0x9a, 0x0f, 0xe6, 0xc1, 0xf2, 0x85, 0x64, 0x44, 0x79, 0xaf, - 0xd7, 0x6c, 0x48, 0x2b, 0x46, 0x43, 0xb2, 0xfa, 0x4f, 0x0d, 0x5e, 0xc3, 0x2f, 0xd9, 0x18, 0xb6, - 0xa0, 0x6e, 0x72, 0x70, 0x69, 0x79, 0x6b, 0xa3, 0x11, 0xdd, 0x99, 0xec, 0x9f, 0xbf, 0xda, 0x82, - 0xfa, 0xe0, 0xcf, 0x64, 0x08, 0xff, 0x86, 0xd5, 0xc5, 0xe3, 0x6e, 0x1a, 0xfc, 0xdc, 0x4d, 0x83, - 0xdf, 0xbb, 0x69, 0xf0, 0xfd, 0xcf, 0xf4, 0x80, 0x45, 0x0a, 0xef, 0x44, 0x5b, 0x93, 0x70, 0x65, - 0xb5, 0x11, 0xd5, 0x86, 0xfe, 0x94, 0x6c, 0x44, 0x9f, 0x77, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, - 0x12, 0x5b, 0x89, 0x3d, 0x86, 0x02, 0x00, 0x00, -} diff --git a/vendor/github.com/pingcap/kvproto/pkg/eraftpb/eraftpb.pb.go b/vendor/github.com/pingcap/kvproto/pkg/eraftpb/eraftpb.pb.go deleted file mode 100644 index 5d35067..0000000 --- a/vendor/github.com/pingcap/kvproto/pkg/eraftpb/eraftpb.pb.go +++ /dev/null @@ -1,2349 +0,0 @@ -// Code generated by protoc-gen-gogo. -// source: eraftpb.proto -// DO NOT EDIT! - -/* - Package eraftpb is a generated protocol buffer package. - - It is generated from these files: - eraftpb.proto - - It has these top-level messages: - Entry - SnapshotMetadata - Snapshot - Message - HardState - ConfState - ConfChange -*/ -package eraftpb - -import ( - "fmt" - "io" - "math" - - proto "github.com/golang/protobuf/proto" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -type EntryType int32 - -const ( - EntryType_EntryNormal EntryType = 0 - EntryType_EntryConfChange EntryType = 1 -) - -var EntryType_name = map[int32]string{ - 0: "EntryNormal", - 1: "EntryConfChange", -} -var EntryType_value = map[string]int32{ - "EntryNormal": 0, - "EntryConfChange": 1, -} - -func (x EntryType) String() string { - return proto.EnumName(EntryType_name, int32(x)) -} -func (EntryType) EnumDescriptor() ([]byte, []int) { return fileDescriptorEraftpb, []int{0} } - -type MessageType int32 - -const ( - MessageType_MsgHup MessageType = 0 - MessageType_MsgBeat MessageType = 1 - MessageType_MsgPropose MessageType = 2 - MessageType_MsgAppend MessageType = 3 - MessageType_MsgAppendResponse MessageType = 4 - MessageType_MsgRequestVote MessageType = 5 - MessageType_MsgRequestVoteResponse MessageType = 6 - MessageType_MsgSnapshot MessageType = 7 - MessageType_MsgHeartbeat MessageType = 8 - MessageType_MsgHeartbeatResponse MessageType = 9 - MessageType_MsgUnreachable MessageType = 10 - MessageType_MsgSnapStatus MessageType = 11 - MessageType_MsgCheckQuorum MessageType = 12 - MessageType_MsgTransferLeader MessageType = 13 - MessageType_MsgTimeoutNow MessageType = 14 - MessageType_MsgReadIndex MessageType = 15 - MessageType_MsgReadIndexResp MessageType = 16 - MessageType_MsgRequestPreVote MessageType = 17 - MessageType_MsgRequestPreVoteResponse MessageType = 18 -) - -var MessageType_name = map[int32]string{ - 0: "MsgHup", - 1: "MsgBeat", - 2: "MsgPropose", - 3: "MsgAppend", - 4: "MsgAppendResponse", - 5: "MsgRequestVote", - 6: "MsgRequestVoteResponse", - 7: "MsgSnapshot", - 8: "MsgHeartbeat", - 9: "MsgHeartbeatResponse", - 10: "MsgUnreachable", - 11: "MsgSnapStatus", - 12: "MsgCheckQuorum", - 13: "MsgTransferLeader", - 14: "MsgTimeoutNow", - 15: "MsgReadIndex", - 16: "MsgReadIndexResp", - 17: "MsgRequestPreVote", - 18: "MsgRequestPreVoteResponse", -} -var MessageType_value = map[string]int32{ - "MsgHup": 0, - "MsgBeat": 1, - "MsgPropose": 2, - "MsgAppend": 3, - "MsgAppendResponse": 4, - "MsgRequestVote": 5, - "MsgRequestVoteResponse": 6, - "MsgSnapshot": 7, - "MsgHeartbeat": 8, - "MsgHeartbeatResponse": 9, - "MsgUnreachable": 10, - "MsgSnapStatus": 11, - "MsgCheckQuorum": 12, - "MsgTransferLeader": 13, - "MsgTimeoutNow": 14, - "MsgReadIndex": 15, - "MsgReadIndexResp": 16, - "MsgRequestPreVote": 17, - "MsgRequestPreVoteResponse": 18, -} - -func (x MessageType) String() string { - return proto.EnumName(MessageType_name, int32(x)) -} -func (MessageType) EnumDescriptor() ([]byte, []int) { return fileDescriptorEraftpb, []int{1} } - -type ConfChangeType int32 - -const ( - ConfChangeType_AddNode ConfChangeType = 0 - ConfChangeType_RemoveNode ConfChangeType = 1 - ConfChangeType_AddLearnerNode ConfChangeType = 2 -) - -var ConfChangeType_name = map[int32]string{ - 0: "AddNode", - 1: "RemoveNode", - 2: "AddLearnerNode", -} -var ConfChangeType_value = map[string]int32{ - "AddNode": 0, - "RemoveNode": 1, - "AddLearnerNode": 2, -} - -func (x ConfChangeType) String() string { - return proto.EnumName(ConfChangeType_name, int32(x)) -} -func (ConfChangeType) EnumDescriptor() ([]byte, []int) { return fileDescriptorEraftpb, []int{2} } - -type Entry struct { - EntryType EntryType `protobuf:"varint,1,opt,name=entry_type,json=entryType,proto3,enum=eraftpb.EntryType" json:"entry_type,omitempty"` - Term uint64 `protobuf:"varint,2,opt,name=term,proto3" json:"term,omitempty"` - Index uint64 `protobuf:"varint,3,opt,name=index,proto3" json:"index,omitempty"` - Data []byte `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` - Context []byte `protobuf:"bytes,6,opt,name=context,proto3" json:"context,omitempty"` - // Deprecated! It is kept for backward compatibility. - // TODO: remove it in the next major release. - SyncLog bool `protobuf:"varint,5,opt,name=sync_log,json=syncLog,proto3" json:"sync_log,omitempty"` -} - -func (m *Entry) Reset() { *m = Entry{} } -func (m *Entry) String() string { return proto.CompactTextString(m) } -func (*Entry) ProtoMessage() {} -func (*Entry) Descriptor() ([]byte, []int) { return fileDescriptorEraftpb, []int{0} } - -func (m *Entry) GetEntryType() EntryType { - if m != nil { - return m.EntryType - } - return EntryType_EntryNormal -} - -func (m *Entry) GetTerm() uint64 { - if m != nil { - return m.Term - } - return 0 -} - -func (m *Entry) GetIndex() uint64 { - if m != nil { - return m.Index - } - return 0 -} - -func (m *Entry) GetData() []byte { - if m != nil { - return m.Data - } - return nil -} - -func (m *Entry) GetContext() []byte { - if m != nil { - return m.Context - } - return nil -} - -func (m *Entry) GetSyncLog() bool { - if m != nil { - return m.SyncLog - } - return false -} - -type SnapshotMetadata struct { - ConfState *ConfState `protobuf:"bytes,1,opt,name=conf_state,json=confState" json:"conf_state,omitempty"` - Index uint64 `protobuf:"varint,2,opt,name=index,proto3" json:"index,omitempty"` - Term uint64 `protobuf:"varint,3,opt,name=term,proto3" json:"term,omitempty"` -} - -func (m *SnapshotMetadata) Reset() { *m = SnapshotMetadata{} } -func (m *SnapshotMetadata) String() string { return proto.CompactTextString(m) } -func (*SnapshotMetadata) ProtoMessage() {} -func (*SnapshotMetadata) Descriptor() ([]byte, []int) { return fileDescriptorEraftpb, []int{1} } - -func (m *SnapshotMetadata) GetConfState() *ConfState { - if m != nil { - return m.ConfState - } - return nil -} - -func (m *SnapshotMetadata) GetIndex() uint64 { - if m != nil { - return m.Index - } - return 0 -} - -func (m *SnapshotMetadata) GetTerm() uint64 { - if m != nil { - return m.Term - } - return 0 -} - -type Snapshot struct { - Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - Metadata *SnapshotMetadata `protobuf:"bytes,2,opt,name=metadata" json:"metadata,omitempty"` -} - -func (m *Snapshot) Reset() { *m = Snapshot{} } -func (m *Snapshot) String() string { return proto.CompactTextString(m) } -func (*Snapshot) ProtoMessage() {} -func (*Snapshot) Descriptor() ([]byte, []int) { return fileDescriptorEraftpb, []int{2} } - -func (m *Snapshot) GetData() []byte { - if m != nil { - return m.Data - } - return nil -} - -func (m *Snapshot) GetMetadata() *SnapshotMetadata { - if m != nil { - return m.Metadata - } - return nil -} - -type Message struct { - MsgType MessageType `protobuf:"varint,1,opt,name=msg_type,json=msgType,proto3,enum=eraftpb.MessageType" json:"msg_type,omitempty"` - To uint64 `protobuf:"varint,2,opt,name=to,proto3" json:"to,omitempty"` - From uint64 `protobuf:"varint,3,opt,name=from,proto3" json:"from,omitempty"` - Term uint64 `protobuf:"varint,4,opt,name=term,proto3" json:"term,omitempty"` - LogTerm uint64 `protobuf:"varint,5,opt,name=log_term,json=logTerm,proto3" json:"log_term,omitempty"` - Index uint64 `protobuf:"varint,6,opt,name=index,proto3" json:"index,omitempty"` - Entries []*Entry `protobuf:"bytes,7,rep,name=entries" json:"entries,omitempty"` - Commit uint64 `protobuf:"varint,8,opt,name=commit,proto3" json:"commit,omitempty"` - Snapshot *Snapshot `protobuf:"bytes,9,opt,name=snapshot" json:"snapshot,omitempty"` - Reject bool `protobuf:"varint,10,opt,name=reject,proto3" json:"reject,omitempty"` - RejectHint uint64 `protobuf:"varint,11,opt,name=reject_hint,json=rejectHint,proto3" json:"reject_hint,omitempty"` - Context []byte `protobuf:"bytes,12,opt,name=context,proto3" json:"context,omitempty"` -} - -func (m *Message) Reset() { *m = Message{} } -func (m *Message) String() string { return proto.CompactTextString(m) } -func (*Message) ProtoMessage() {} -func (*Message) Descriptor() ([]byte, []int) { return fileDescriptorEraftpb, []int{3} } - -func (m *Message) GetMsgType() MessageType { - if m != nil { - return m.MsgType - } - return MessageType_MsgHup -} - -func (m *Message) GetTo() uint64 { - if m != nil { - return m.To - } - return 0 -} - -func (m *Message) GetFrom() uint64 { - if m != nil { - return m.From - } - return 0 -} - -func (m *Message) GetTerm() uint64 { - if m != nil { - return m.Term - } - return 0 -} - -func (m *Message) GetLogTerm() uint64 { - if m != nil { - return m.LogTerm - } - return 0 -} - -func (m *Message) GetIndex() uint64 { - if m != nil { - return m.Index - } - return 0 -} - -func (m *Message) GetEntries() []*Entry { - if m != nil { - return m.Entries - } - return nil -} - -func (m *Message) GetCommit() uint64 { - if m != nil { - return m.Commit - } - return 0 -} - -func (m *Message) GetSnapshot() *Snapshot { - if m != nil { - return m.Snapshot - } - return nil -} - -func (m *Message) GetReject() bool { - if m != nil { - return m.Reject - } - return false -} - -func (m *Message) GetRejectHint() uint64 { - if m != nil { - return m.RejectHint - } - return 0 -} - -func (m *Message) GetContext() []byte { - if m != nil { - return m.Context - } - return nil -} - -type HardState struct { - Term uint64 `protobuf:"varint,1,opt,name=term,proto3" json:"term,omitempty"` - Vote uint64 `protobuf:"varint,2,opt,name=vote,proto3" json:"vote,omitempty"` - Commit uint64 `protobuf:"varint,3,opt,name=commit,proto3" json:"commit,omitempty"` -} - -func (m *HardState) Reset() { *m = HardState{} } -func (m *HardState) String() string { return proto.CompactTextString(m) } -func (*HardState) ProtoMessage() {} -func (*HardState) Descriptor() ([]byte, []int) { return fileDescriptorEraftpb, []int{4} } - -func (m *HardState) GetTerm() uint64 { - if m != nil { - return m.Term - } - return 0 -} - -func (m *HardState) GetVote() uint64 { - if m != nil { - return m.Vote - } - return 0 -} - -func (m *HardState) GetCommit() uint64 { - if m != nil { - return m.Commit - } - return 0 -} - -type ConfState struct { - Nodes []uint64 `protobuf:"varint,1,rep,packed,name=nodes" json:"nodes,omitempty"` - Learners []uint64 `protobuf:"varint,2,rep,packed,name=learners" json:"learners,omitempty"` -} - -func (m *ConfState) Reset() { *m = ConfState{} } -func (m *ConfState) String() string { return proto.CompactTextString(m) } -func (*ConfState) ProtoMessage() {} -func (*ConfState) Descriptor() ([]byte, []int) { return fileDescriptorEraftpb, []int{5} } - -func (m *ConfState) GetNodes() []uint64 { - if m != nil { - return m.Nodes - } - return nil -} - -func (m *ConfState) GetLearners() []uint64 { - if m != nil { - return m.Learners - } - return nil -} - -type ConfChange struct { - Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - ChangeType ConfChangeType `protobuf:"varint,2,opt,name=change_type,json=changeType,proto3,enum=eraftpb.ConfChangeType" json:"change_type,omitempty"` - NodeId uint64 `protobuf:"varint,3,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` - Context []byte `protobuf:"bytes,4,opt,name=context,proto3" json:"context,omitempty"` -} - -func (m *ConfChange) Reset() { *m = ConfChange{} } -func (m *ConfChange) String() string { return proto.CompactTextString(m) } -func (*ConfChange) ProtoMessage() {} -func (*ConfChange) Descriptor() ([]byte, []int) { return fileDescriptorEraftpb, []int{6} } - -func (m *ConfChange) GetId() uint64 { - if m != nil { - return m.Id - } - return 0 -} - -func (m *ConfChange) GetChangeType() ConfChangeType { - if m != nil { - return m.ChangeType - } - return ConfChangeType_AddNode -} - -func (m *ConfChange) GetNodeId() uint64 { - if m != nil { - return m.NodeId - } - return 0 -} - -func (m *ConfChange) GetContext() []byte { - if m != nil { - return m.Context - } - return nil -} - -func init() { - proto.RegisterType((*Entry)(nil), "eraftpb.Entry") - proto.RegisterType((*SnapshotMetadata)(nil), "eraftpb.SnapshotMetadata") - proto.RegisterType((*Snapshot)(nil), "eraftpb.Snapshot") - proto.RegisterType((*Message)(nil), "eraftpb.Message") - proto.RegisterType((*HardState)(nil), "eraftpb.HardState") - proto.RegisterType((*ConfState)(nil), "eraftpb.ConfState") - proto.RegisterType((*ConfChange)(nil), "eraftpb.ConfChange") - proto.RegisterEnum("eraftpb.EntryType", EntryType_name, EntryType_value) - proto.RegisterEnum("eraftpb.MessageType", MessageType_name, MessageType_value) - proto.RegisterEnum("eraftpb.ConfChangeType", ConfChangeType_name, ConfChangeType_value) -} -func (m *Entry) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Entry) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.EntryType != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(m.EntryType)) - } - if m.Term != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(m.Term)) - } - if m.Index != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(m.Index)) - } - if len(m.Data) > 0 { - dAtA[i] = 0x22 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(len(m.Data))) - i += copy(dAtA[i:], m.Data) - } - if m.SyncLog { - dAtA[i] = 0x28 - i++ - if m.SyncLog { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if len(m.Context) > 0 { - dAtA[i] = 0x32 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(len(m.Context))) - i += copy(dAtA[i:], m.Context) - } - return i, nil -} - -func (m *SnapshotMetadata) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *SnapshotMetadata) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.ConfState != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(m.ConfState.Size())) - n1, err := m.ConfState.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if m.Index != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(m.Index)) - } - if m.Term != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(m.Term)) - } - return i, nil -} - -func (m *Snapshot) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Snapshot) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Data) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(len(m.Data))) - i += copy(dAtA[i:], m.Data) - } - if m.Metadata != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(m.Metadata.Size())) - n2, err := m.Metadata.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - return i, nil -} - -func (m *Message) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Message) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.MsgType != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(m.MsgType)) - } - if m.To != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(m.To)) - } - if m.From != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(m.From)) - } - if m.Term != 0 { - dAtA[i] = 0x20 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(m.Term)) - } - if m.LogTerm != 0 { - dAtA[i] = 0x28 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(m.LogTerm)) - } - if m.Index != 0 { - dAtA[i] = 0x30 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(m.Index)) - } - if len(m.Entries) > 0 { - for _, msg := range m.Entries { - dAtA[i] = 0x3a - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.Commit != 0 { - dAtA[i] = 0x40 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(m.Commit)) - } - if m.Snapshot != nil { - dAtA[i] = 0x4a - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(m.Snapshot.Size())) - n3, err := m.Snapshot.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.Reject { - dAtA[i] = 0x50 - i++ - if m.Reject { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.RejectHint != 0 { - dAtA[i] = 0x58 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(m.RejectHint)) - } - if len(m.Context) > 0 { - dAtA[i] = 0x62 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(len(m.Context))) - i += copy(dAtA[i:], m.Context) - } - return i, nil -} - -func (m *HardState) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HardState) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Term != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(m.Term)) - } - if m.Vote != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(m.Vote)) - } - if m.Commit != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(m.Commit)) - } - return i, nil -} - -func (m *ConfState) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ConfState) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Nodes) > 0 { - dAtA5 := make([]byte, len(m.Nodes)*10) - var j4 int - for _, num := range m.Nodes { - for num >= 1<<7 { - dAtA5[j4] = uint8(uint64(num)&0x7f | 0x80) - num >>= 7 - j4++ - } - dAtA5[j4] = uint8(num) - j4++ - } - dAtA[i] = 0xa - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(j4)) - i += copy(dAtA[i:], dAtA5[:j4]) - } - if len(m.Learners) > 0 { - dAtA7 := make([]byte, len(m.Learners)*10) - var j6 int - for _, num := range m.Learners { - for num >= 1<<7 { - dAtA7[j6] = uint8(uint64(num)&0x7f | 0x80) - num >>= 7 - j6++ - } - dAtA7[j6] = uint8(num) - j6++ - } - dAtA[i] = 0x12 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(j6)) - i += copy(dAtA[i:], dAtA7[:j6]) - } - return i, nil -} - -func (m *ConfChange) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ConfChange) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Id != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(m.Id)) - } - if m.ChangeType != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(m.ChangeType)) - } - if m.NodeId != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(m.NodeId)) - } - if len(m.Context) > 0 { - dAtA[i] = 0x22 - i++ - i = encodeVarintEraftpb(dAtA, i, uint64(len(m.Context))) - i += copy(dAtA[i:], m.Context) - } - return i, nil -} - -func encodeFixed64Eraftpb(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Eraftpb(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintEraftpb(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *Entry) Size() (n int) { - var l int - _ = l - if m.EntryType != 0 { - n += 1 + sovEraftpb(uint64(m.EntryType)) - } - if m.Term != 0 { - n += 1 + sovEraftpb(uint64(m.Term)) - } - if m.Index != 0 { - n += 1 + sovEraftpb(uint64(m.Index)) - } - l = len(m.Data) - if l > 0 { - n += 1 + l + sovEraftpb(uint64(l)) - } - if m.SyncLog { - n += 2 - } - l = len(m.Context) - if l > 0 { - n += 1 + l + sovEraftpb(uint64(l)) - } - return n -} - -func (m *SnapshotMetadata) Size() (n int) { - var l int - _ = l - if m.ConfState != nil { - l = m.ConfState.Size() - n += 1 + l + sovEraftpb(uint64(l)) - } - if m.Index != 0 { - n += 1 + sovEraftpb(uint64(m.Index)) - } - if m.Term != 0 { - n += 1 + sovEraftpb(uint64(m.Term)) - } - return n -} - -func (m *Snapshot) Size() (n int) { - var l int - _ = l - l = len(m.Data) - if l > 0 { - n += 1 + l + sovEraftpb(uint64(l)) - } - if m.Metadata != nil { - l = m.Metadata.Size() - n += 1 + l + sovEraftpb(uint64(l)) - } - return n -} - -func (m *Message) Size() (n int) { - var l int - _ = l - if m.MsgType != 0 { - n += 1 + sovEraftpb(uint64(m.MsgType)) - } - if m.To != 0 { - n += 1 + sovEraftpb(uint64(m.To)) - } - if m.From != 0 { - n += 1 + sovEraftpb(uint64(m.From)) - } - if m.Term != 0 { - n += 1 + sovEraftpb(uint64(m.Term)) - } - if m.LogTerm != 0 { - n += 1 + sovEraftpb(uint64(m.LogTerm)) - } - if m.Index != 0 { - n += 1 + sovEraftpb(uint64(m.Index)) - } - if len(m.Entries) > 0 { - for _, e := range m.Entries { - l = e.Size() - n += 1 + l + sovEraftpb(uint64(l)) - } - } - if m.Commit != 0 { - n += 1 + sovEraftpb(uint64(m.Commit)) - } - if m.Snapshot != nil { - l = m.Snapshot.Size() - n += 1 + l + sovEraftpb(uint64(l)) - } - if m.Reject { - n += 2 - } - if m.RejectHint != 0 { - n += 1 + sovEraftpb(uint64(m.RejectHint)) - } - l = len(m.Context) - if l > 0 { - n += 1 + l + sovEraftpb(uint64(l)) - } - return n -} - -func (m *HardState) Size() (n int) { - var l int - _ = l - if m.Term != 0 { - n += 1 + sovEraftpb(uint64(m.Term)) - } - if m.Vote != 0 { - n += 1 + sovEraftpb(uint64(m.Vote)) - } - if m.Commit != 0 { - n += 1 + sovEraftpb(uint64(m.Commit)) - } - return n -} - -func (m *ConfState) Size() (n int) { - var l int - _ = l - if len(m.Nodes) > 0 { - l = 0 - for _, e := range m.Nodes { - l += sovEraftpb(uint64(e)) - } - n += 1 + sovEraftpb(uint64(l)) + l - } - if len(m.Learners) > 0 { - l = 0 - for _, e := range m.Learners { - l += sovEraftpb(uint64(e)) - } - n += 1 + sovEraftpb(uint64(l)) + l - } - return n -} - -func (m *ConfChange) Size() (n int) { - var l int - _ = l - if m.Id != 0 { - n += 1 + sovEraftpb(uint64(m.Id)) - } - if m.ChangeType != 0 { - n += 1 + sovEraftpb(uint64(m.ChangeType)) - } - if m.NodeId != 0 { - n += 1 + sovEraftpb(uint64(m.NodeId)) - } - l = len(m.Context) - if l > 0 { - n += 1 + l + sovEraftpb(uint64(l)) - } - return n -} - -func sovEraftpb(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozEraftpb(x uint64) (n int) { - return sovEraftpb(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *Entry) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Entry: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Entry: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field EntryType", wireType) - } - m.EntryType = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.EntryType |= (EntryType(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Term", wireType) - } - m.Term = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Term |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Index", wireType) - } - m.Index = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Index |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthEraftpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...) - if m.Data == nil { - m.Data = []byte{} - } - iNdEx = postIndex - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field SyncLog", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.SyncLog = bool(v != 0) - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthEraftpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Context = append(m.Context[:0], dAtA[iNdEx:postIndex]...) - if m.Context == nil { - m.Context = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipEraftpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthEraftpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SnapshotMetadata) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SnapshotMetadata: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SnapshotMetadata: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConfState", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEraftpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ConfState == nil { - m.ConfState = &ConfState{} - } - if err := m.ConfState.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Index", wireType) - } - m.Index = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Index |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Term", wireType) - } - m.Term = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Term |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipEraftpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthEraftpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Snapshot) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Snapshot: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Snapshot: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthEraftpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...) - if m.Data == nil { - m.Data = []byte{} - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEraftpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Metadata == nil { - m.Metadata = &SnapshotMetadata{} - } - if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipEraftpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthEraftpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Message) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Message: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Message: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MsgType", wireType) - } - m.MsgType = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.MsgType |= (MessageType(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field To", wireType) - } - m.To = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.To |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field From", wireType) - } - m.From = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.From |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Term", wireType) - } - m.Term = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Term |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field LogTerm", wireType) - } - m.LogTerm = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.LogTerm |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Index", wireType) - } - m.Index = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Index |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Entries", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEraftpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Entries = append(m.Entries, &Entry{}) - if err := m.Entries[len(m.Entries)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Commit", wireType) - } - m.Commit = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Commit |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Snapshot", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEraftpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Snapshot == nil { - m.Snapshot = &Snapshot{} - } - if err := m.Snapshot.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 10: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Reject", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Reject = bool(v != 0) - case 11: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RejectHint", wireType) - } - m.RejectHint = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RejectHint |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 12: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthEraftpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Context = append(m.Context[:0], dAtA[iNdEx:postIndex]...) - if m.Context == nil { - m.Context = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipEraftpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthEraftpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HardState) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HardState: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HardState: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Term", wireType) - } - m.Term = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Term |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Vote", wireType) - } - m.Vote = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Vote |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Commit", wireType) - } - m.Commit = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Commit |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipEraftpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthEraftpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ConfState) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ConfState: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ConfState: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType == 2 { - var packedLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - packedLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if packedLen < 0 { - return ErrInvalidLengthEraftpb - } - postIndex := iNdEx + packedLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - for iNdEx < postIndex { - var v uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Nodes = append(m.Nodes, v) - } - } else if wireType == 0 { - var v uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Nodes = append(m.Nodes, v) - } else { - return fmt.Errorf("proto: wrong wireType = %d for field Nodes", wireType) - } - case 2: - if wireType == 2 { - var packedLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - packedLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if packedLen < 0 { - return ErrInvalidLengthEraftpb - } - postIndex := iNdEx + packedLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - for iNdEx < postIndex { - var v uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Learners = append(m.Learners, v) - } - } else if wireType == 0 { - var v uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Learners = append(m.Learners, v) - } else { - return fmt.Errorf("proto: wrong wireType = %d for field Learners", wireType) - } - default: - iNdEx = preIndex - skippy, err := skipEraftpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthEraftpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ConfChange) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ConfChange: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ConfChange: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) - } - m.Id = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Id |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ChangeType", wireType) - } - m.ChangeType = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ChangeType |= (ConfChangeType(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeId", wireType) - } - m.NodeId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.NodeId |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthEraftpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Context = append(m.Context[:0], dAtA[iNdEx:postIndex]...) - if m.Context == nil { - m.Context = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipEraftpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthEraftpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipEraftpb(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowEraftpb - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowEraftpb - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowEraftpb - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - iNdEx += length - if length < 0 { - return 0, ErrInvalidLengthEraftpb - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowEraftpb - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipEraftpb(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthEraftpb = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowEraftpb = fmt.Errorf("proto: integer overflow") -) - -func init() { proto.RegisterFile("eraftpb.proto", fileDescriptorEraftpb) } - -var fileDescriptorEraftpb = []byte{ - // 821 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x55, 0xcd, 0x6e, 0xe4, 0x44, - 0x10, 0x8e, 0x3d, 0x3f, 0xf6, 0x94, 0x93, 0x49, 0xa7, 0x08, 0xbb, 0xce, 0x4a, 0x84, 0xd1, 0x9c, - 0x46, 0x91, 0x58, 0x94, 0x20, 0x24, 0x2e, 0x1c, 0xb2, 0x11, 0x52, 0x56, 0x64, 0xa2, 0xc5, 0x9b, - 0xe5, 0x3a, 0xea, 0xd8, 0x35, 0x1e, 0xc3, 0xd8, 0x6d, 0xba, 0x7b, 0x96, 0x9d, 0x47, 0x40, 0xe2, - 0x01, 0x78, 0x09, 0xde, 0x83, 0x23, 0x8f, 0x80, 0xc2, 0x81, 0xd7, 0x40, 0xdd, 0xfe, 0x89, 0x67, - 0x73, 0xab, 0xaf, 0xba, 0xba, 0xfa, 0xab, 0xaf, 0x3e, 0xcb, 0x70, 0x40, 0x92, 0x2f, 0x75, 0x79, - 0xff, 0xb2, 0x94, 0x42, 0x0b, 0xf4, 0x6a, 0x38, 0xfd, 0xd3, 0x81, 0xc1, 0x77, 0x85, 0x96, 0x5b, - 0x3c, 0x07, 0x20, 0x13, 0x2c, 0xf4, 0xb6, 0xa4, 0xd0, 0x99, 0x38, 0xb3, 0xf1, 0x05, 0xbe, 0x6c, - 0xae, 0xd9, 0x9a, 0xbb, 0x6d, 0x49, 0xd1, 0x88, 0x9a, 0x10, 0x11, 0xfa, 0x9a, 0x64, 0x1e, 0xba, - 0x13, 0x67, 0xd6, 0x8f, 0x6c, 0x8c, 0xc7, 0x30, 0xc8, 0x8a, 0x84, 0x3e, 0x84, 0x3d, 0x9b, 0xac, - 0x80, 0xa9, 0x4c, 0xb8, 0xe6, 0x61, 0x7f, 0xe2, 0xcc, 0xf6, 0x23, 0x1b, 0xe3, 0x09, 0xf8, 0x6a, - 0x5b, 0xc4, 0x8b, 0xb5, 0x48, 0xc3, 0xc1, 0xc4, 0x99, 0xf9, 0x91, 0x67, 0xf0, 0x8d, 0x48, 0x31, - 0x04, 0x2f, 0x16, 0x85, 0xa6, 0x0f, 0x3a, 0x1c, 0xda, 0x1b, 0x0d, 0x9c, 0x0a, 0x60, 0x6f, 0x0b, - 0x5e, 0xaa, 0x95, 0xd0, 0x73, 0xd2, 0xdc, 0x36, 0x3a, 0x07, 0x88, 0x45, 0xb1, 0x5c, 0x28, 0xcd, - 0x75, 0xc5, 0x3c, 0xe8, 0x30, 0xbf, 0x12, 0xc5, 0xf2, 0xad, 0x39, 0x89, 0x46, 0x71, 0x13, 0x3e, - 0xb2, 0x74, 0x3f, 0x62, 0x69, 0xe7, 0xe9, 0x3d, 0xce, 0x33, 0x7d, 0x07, 0x7e, 0xf3, 0x60, 0x3b, - 0x85, 0xd3, 0x99, 0xe2, 0x6b, 0xf0, 0xf3, 0x9a, 0x88, 0x6d, 0x16, 0x5c, 0x9c, 0xb4, 0x4f, 0x7f, - 0xcc, 0x34, 0x6a, 0x4b, 0xa7, 0xff, 0xb9, 0xe0, 0xcd, 0x49, 0x29, 0x9e, 0x12, 0x7e, 0x09, 0x7e, - 0xae, 0xd2, 0xae, 0xee, 0xc7, 0x6d, 0x8b, 0xba, 0xc6, 0x2a, 0xef, 0xe5, 0x2a, 0xb5, 0xba, 0x8f, - 0xc1, 0xd5, 0xa2, 0xa6, 0xee, 0x6a, 0x61, 0x78, 0x2d, 0xa5, 0x68, 0x79, 0x9b, 0xb8, 0x9d, 0xa5, - 0xdf, 0xd9, 0xcd, 0x09, 0xf8, 0x6b, 0x91, 0x2e, 0x6c, 0x7e, 0x60, 0xf3, 0xde, 0x5a, 0xa4, 0x77, - 0x3b, 0x6b, 0x1b, 0x76, 0x05, 0x99, 0x81, 0x67, 0xb6, 0x9d, 0x91, 0x0a, 0xbd, 0x49, 0x6f, 0x16, - 0x5c, 0x8c, 0x77, 0x0d, 0x11, 0x35, 0xc7, 0xf8, 0x0c, 0x86, 0xb1, 0xc8, 0xf3, 0x4c, 0x87, 0xbe, - 0x6d, 0x50, 0x23, 0xfc, 0x02, 0x7c, 0x55, 0xab, 0x10, 0x8e, 0xac, 0x3c, 0x47, 0x4f, 0xe4, 0x89, - 0xda, 0x12, 0xd3, 0x46, 0xd2, 0x4f, 0x14, 0xeb, 0x10, 0xac, 0x23, 0x6a, 0x84, 0x9f, 0x43, 0x50, - 0x45, 0x8b, 0x55, 0x56, 0xe8, 0x30, 0xb0, 0x6f, 0x40, 0x95, 0xba, 0xce, 0x0a, 0xdd, 0x75, 0xcc, - 0xfe, 0xae, 0x63, 0xbe, 0x87, 0xd1, 0x35, 0x97, 0x49, 0xb5, 0xf7, 0x46, 0x15, 0xa7, 0xa3, 0x0a, - 0x42, 0xff, 0xbd, 0xd0, 0xd4, 0xb8, 0xd8, 0xc4, 0x9d, 0x71, 0x7a, 0xdd, 0x71, 0xa6, 0xdf, 0xc2, - 0xe8, 0xaa, 0x6b, 0xa2, 0x42, 0x24, 0xa4, 0x42, 0x67, 0xd2, 0x33, 0x9a, 0x59, 0x80, 0x2f, 0xc0, - 0x5f, 0x13, 0x97, 0x05, 0x49, 0x15, 0xba, 0xf6, 0xa0, 0xc5, 0xd3, 0xdf, 0x1c, 0x00, 0x73, 0xff, - 0x6a, 0xc5, 0x8b, 0xd4, 0xee, 0x31, 0x4b, 0x6a, 0x2e, 0x6e, 0x96, 0xe0, 0x37, 0x10, 0xc4, 0xf6, - 0xa4, 0xf2, 0x82, 0x6b, 0xbd, 0xf0, 0x7c, 0xc7, 0xc9, 0xd5, 0x4d, 0x6b, 0x07, 0x88, 0xdb, 0x18, - 0x9f, 0x83, 0x67, 0x5e, 0x5f, 0x64, 0x49, 0x43, 0xd8, 0xc0, 0xd7, 0x49, 0x57, 0x97, 0xfe, 0x8e, - 0x2e, 0x67, 0xe7, 0x30, 0x6a, 0x3f, 0x6a, 0x3c, 0x84, 0xc0, 0x82, 0x5b, 0x21, 0x73, 0xbe, 0x66, - 0x7b, 0xf8, 0x09, 0x1c, 0xda, 0xc4, 0xe3, 0x9b, 0xcc, 0x39, 0xfb, 0xbd, 0x07, 0x41, 0xc7, 0x90, - 0x08, 0x30, 0x9c, 0xab, 0xf4, 0x7a, 0x53, 0xb2, 0x3d, 0x0c, 0xc0, 0x9b, 0xab, 0xf4, 0x15, 0x71, - 0xcd, 0x1c, 0x1c, 0x03, 0xcc, 0x55, 0xfa, 0x46, 0x8a, 0x52, 0x28, 0x62, 0x2e, 0x1e, 0xc0, 0x68, - 0xae, 0xd2, 0xcb, 0xb2, 0xa4, 0x22, 0x61, 0x3d, 0xfc, 0x14, 0x8e, 0x5a, 0x18, 0x91, 0x2a, 0x45, - 0xa1, 0x88, 0xf5, 0x11, 0x61, 0x3c, 0x57, 0x69, 0x44, 0xbf, 0x6c, 0x48, 0xe9, 0x1f, 0x85, 0x26, - 0x36, 0xc0, 0x17, 0xf0, 0x6c, 0x37, 0xd7, 0xd6, 0x0f, 0x0d, 0xe9, 0xb9, 0x4a, 0x1b, 0x17, 0x31, - 0x0f, 0x19, 0xec, 0x1b, 0x3e, 0xc4, 0xa5, 0xbe, 0x37, 0x44, 0x7c, 0x0c, 0xe1, 0xb8, 0x9b, 0x69, - 0x2f, 0x8f, 0xea, 0xc7, 0xde, 0x15, 0x92, 0x78, 0xbc, 0xe2, 0xf7, 0x6b, 0x62, 0x80, 0x47, 0x70, - 0x50, 0x37, 0x34, 0x0b, 0xde, 0x28, 0x16, 0xd4, 0x65, 0x57, 0x2b, 0x8a, 0x7f, 0xfe, 0x61, 0x23, - 0xe4, 0x26, 0x67, 0xfb, 0x35, 0xfd, 0x3b, 0xc9, 0x0b, 0xb5, 0x24, 0x79, 0x43, 0x3c, 0x21, 0xc9, - 0x0e, 0xea, 0xdb, 0x77, 0x59, 0x4e, 0x62, 0xa3, 0x6f, 0xc5, 0xaf, 0x6c, 0x5c, 0x13, 0x8a, 0x88, - 0x27, 0xaf, 0xcd, 0xf7, 0xc4, 0x0e, 0xf1, 0x18, 0x58, 0x37, 0x63, 0x08, 0x31, 0x56, 0x77, 0xac, - 0xa7, 0x7c, 0x23, 0xc9, 0x0e, 0x7f, 0x84, 0x9f, 0xc1, 0xc9, 0x93, 0x74, 0x3b, 0x02, 0x9e, 0x5d, - 0xc2, 0x78, 0xd7, 0x12, 0x66, 0x09, 0x97, 0x49, 0x72, 0x2b, 0x12, 0x62, 0x7b, 0x66, 0x09, 0x11, - 0xe5, 0xe2, 0x3d, 0x59, 0xec, 0x98, 0x51, 0x2e, 0x93, 0xe4, 0xa6, 0xf2, 0xa2, 0xcd, 0xb9, 0xaf, - 0xd8, 0x5f, 0x0f, 0xa7, 0xce, 0xdf, 0x0f, 0xa7, 0xce, 0x3f, 0x0f, 0xa7, 0xce, 0x1f, 0xff, 0x9e, - 0xee, 0xdd, 0x0f, 0xed, 0x0f, 0xe2, 0xab, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xa3, 0xf2, - 0xc5, 0x31, 0x06, 0x00, 0x00, -} diff --git a/vendor/github.com/pingcap/kvproto/pkg/errorpb/errorpb.pb.go b/vendor/github.com/pingcap/kvproto/pkg/errorpb/errorpb.pb.go deleted file mode 100644 index 4e18d72..0000000 --- a/vendor/github.com/pingcap/kvproto/pkg/errorpb/errorpb.pb.go +++ /dev/null @@ -1,1984 +0,0 @@ -// Code generated by protoc-gen-gogo. -// source: errorpb.proto -// DO NOT EDIT! - -/* - Package errorpb is a generated protocol buffer package. - - It is generated from these files: - errorpb.proto - - It has these top-level messages: - NotLeader - StoreNotMatch - RegionNotFound - KeyNotInRegion - StaleEpoch - ServerIsBusy - StaleCommand - RaftEntryTooLarge - Error -*/ -package errorpb - -import ( - "fmt" - "io" - "math" - - proto "github.com/golang/protobuf/proto" - - metapb "github.com/pingcap/kvproto/pkg/metapb" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -type NotLeader struct { - RegionId uint64 `protobuf:"varint,1,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - Leader *metapb.Peer `protobuf:"bytes,2,opt,name=leader" json:"leader,omitempty"` -} - -func (m *NotLeader) Reset() { *m = NotLeader{} } -func (m *NotLeader) String() string { return proto.CompactTextString(m) } -func (*NotLeader) ProtoMessage() {} -func (*NotLeader) Descriptor() ([]byte, []int) { return fileDescriptorErrorpb, []int{0} } - -func (m *NotLeader) GetRegionId() uint64 { - if m != nil { - return m.RegionId - } - return 0 -} - -func (m *NotLeader) GetLeader() *metapb.Peer { - if m != nil { - return m.Leader - } - return nil -} - -type StoreNotMatch struct { -} - -func (m *StoreNotMatch) Reset() { *m = StoreNotMatch{} } -func (m *StoreNotMatch) String() string { return proto.CompactTextString(m) } -func (*StoreNotMatch) ProtoMessage() {} -func (*StoreNotMatch) Descriptor() ([]byte, []int) { return fileDescriptorErrorpb, []int{1} } - -type RegionNotFound struct { - RegionId uint64 `protobuf:"varint,1,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` -} - -func (m *RegionNotFound) Reset() { *m = RegionNotFound{} } -func (m *RegionNotFound) String() string { return proto.CompactTextString(m) } -func (*RegionNotFound) ProtoMessage() {} -func (*RegionNotFound) Descriptor() ([]byte, []int) { return fileDescriptorErrorpb, []int{2} } - -func (m *RegionNotFound) GetRegionId() uint64 { - if m != nil { - return m.RegionId - } - return 0 -} - -type KeyNotInRegion struct { - Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - RegionId uint64 `protobuf:"varint,2,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - StartKey []byte `protobuf:"bytes,3,opt,name=start_key,json=startKey,proto3" json:"start_key,omitempty"` - EndKey []byte `protobuf:"bytes,4,opt,name=end_key,json=endKey,proto3" json:"end_key,omitempty"` -} - -func (m *KeyNotInRegion) Reset() { *m = KeyNotInRegion{} } -func (m *KeyNotInRegion) String() string { return proto.CompactTextString(m) } -func (*KeyNotInRegion) ProtoMessage() {} -func (*KeyNotInRegion) Descriptor() ([]byte, []int) { return fileDescriptorErrorpb, []int{3} } - -func (m *KeyNotInRegion) GetKey() []byte { - if m != nil { - return m.Key - } - return nil -} - -func (m *KeyNotInRegion) GetRegionId() uint64 { - if m != nil { - return m.RegionId - } - return 0 -} - -func (m *KeyNotInRegion) GetStartKey() []byte { - if m != nil { - return m.StartKey - } - return nil -} - -func (m *KeyNotInRegion) GetEndKey() []byte { - if m != nil { - return m.EndKey - } - return nil -} - -type StaleEpoch struct { - NewRegions []*metapb.Region `protobuf:"bytes,1,rep,name=new_regions,json=newRegions" json:"new_regions,omitempty"` -} - -func (m *StaleEpoch) Reset() { *m = StaleEpoch{} } -func (m *StaleEpoch) String() string { return proto.CompactTextString(m) } -func (*StaleEpoch) ProtoMessage() {} -func (*StaleEpoch) Descriptor() ([]byte, []int) { return fileDescriptorErrorpb, []int{4} } - -func (m *StaleEpoch) GetNewRegions() []*metapb.Region { - if m != nil { - return m.NewRegions - } - return nil -} - -type ServerIsBusy struct { - Reason string `protobuf:"bytes,1,opt,name=reason,proto3" json:"reason,omitempty"` - BackoffMs uint64 `protobuf:"varint,2,opt,name=backoff_ms,json=backoffMs,proto3" json:"backoff_ms,omitempty"` -} - -func (m *ServerIsBusy) Reset() { *m = ServerIsBusy{} } -func (m *ServerIsBusy) String() string { return proto.CompactTextString(m) } -func (*ServerIsBusy) ProtoMessage() {} -func (*ServerIsBusy) Descriptor() ([]byte, []int) { return fileDescriptorErrorpb, []int{5} } - -func (m *ServerIsBusy) GetReason() string { - if m != nil { - return m.Reason - } - return "" -} - -func (m *ServerIsBusy) GetBackoffMs() uint64 { - if m != nil { - return m.BackoffMs - } - return 0 -} - -type StaleCommand struct { -} - -func (m *StaleCommand) Reset() { *m = StaleCommand{} } -func (m *StaleCommand) String() string { return proto.CompactTextString(m) } -func (*StaleCommand) ProtoMessage() {} -func (*StaleCommand) Descriptor() ([]byte, []int) { return fileDescriptorErrorpb, []int{6} } - -type RaftEntryTooLarge struct { - RegionId uint64 `protobuf:"varint,1,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - EntrySize uint64 `protobuf:"varint,2,opt,name=entry_size,json=entrySize,proto3" json:"entry_size,omitempty"` -} - -func (m *RaftEntryTooLarge) Reset() { *m = RaftEntryTooLarge{} } -func (m *RaftEntryTooLarge) String() string { return proto.CompactTextString(m) } -func (*RaftEntryTooLarge) ProtoMessage() {} -func (*RaftEntryTooLarge) Descriptor() ([]byte, []int) { return fileDescriptorErrorpb, []int{7} } - -func (m *RaftEntryTooLarge) GetRegionId() uint64 { - if m != nil { - return m.RegionId - } - return 0 -} - -func (m *RaftEntryTooLarge) GetEntrySize() uint64 { - if m != nil { - return m.EntrySize - } - return 0 -} - -type Error struct { - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` - NotLeader *NotLeader `protobuf:"bytes,2,opt,name=not_leader,json=notLeader" json:"not_leader,omitempty"` - RegionNotFound *RegionNotFound `protobuf:"bytes,3,opt,name=region_not_found,json=regionNotFound" json:"region_not_found,omitempty"` - KeyNotInRegion *KeyNotInRegion `protobuf:"bytes,4,opt,name=key_not_in_region,json=keyNotInRegion" json:"key_not_in_region,omitempty"` - StaleEpoch *StaleEpoch `protobuf:"bytes,5,opt,name=stale_epoch,json=staleEpoch" json:"stale_epoch,omitempty"` - ServerIsBusy *ServerIsBusy `protobuf:"bytes,6,opt,name=server_is_busy,json=serverIsBusy" json:"server_is_busy,omitempty"` - StaleCommand *StaleCommand `protobuf:"bytes,7,opt,name=stale_command,json=staleCommand" json:"stale_command,omitempty"` - StoreNotMatch *StoreNotMatch `protobuf:"bytes,8,opt,name=store_not_match,json=storeNotMatch" json:"store_not_match,omitempty"` - RaftEntryTooLarge *RaftEntryTooLarge `protobuf:"bytes,9,opt,name=raft_entry_too_large,json=raftEntryTooLarge" json:"raft_entry_too_large,omitempty"` -} - -func (m *Error) Reset() { *m = Error{} } -func (m *Error) String() string { return proto.CompactTextString(m) } -func (*Error) ProtoMessage() {} -func (*Error) Descriptor() ([]byte, []int) { return fileDescriptorErrorpb, []int{8} } - -func (m *Error) GetMessage() string { - if m != nil { - return m.Message - } - return "" -} - -func (m *Error) GetNotLeader() *NotLeader { - if m != nil { - return m.NotLeader - } - return nil -} - -func (m *Error) GetRegionNotFound() *RegionNotFound { - if m != nil { - return m.RegionNotFound - } - return nil -} - -func (m *Error) GetKeyNotInRegion() *KeyNotInRegion { - if m != nil { - return m.KeyNotInRegion - } - return nil -} - -func (m *Error) GetStaleEpoch() *StaleEpoch { - if m != nil { - return m.StaleEpoch - } - return nil -} - -func (m *Error) GetServerIsBusy() *ServerIsBusy { - if m != nil { - return m.ServerIsBusy - } - return nil -} - -func (m *Error) GetStaleCommand() *StaleCommand { - if m != nil { - return m.StaleCommand - } - return nil -} - -func (m *Error) GetStoreNotMatch() *StoreNotMatch { - if m != nil { - return m.StoreNotMatch - } - return nil -} - -func (m *Error) GetRaftEntryTooLarge() *RaftEntryTooLarge { - if m != nil { - return m.RaftEntryTooLarge - } - return nil -} - -func init() { - proto.RegisterType((*NotLeader)(nil), "errorpb.NotLeader") - proto.RegisterType((*StoreNotMatch)(nil), "errorpb.StoreNotMatch") - proto.RegisterType((*RegionNotFound)(nil), "errorpb.RegionNotFound") - proto.RegisterType((*KeyNotInRegion)(nil), "errorpb.KeyNotInRegion") - proto.RegisterType((*StaleEpoch)(nil), "errorpb.StaleEpoch") - proto.RegisterType((*ServerIsBusy)(nil), "errorpb.ServerIsBusy") - proto.RegisterType((*StaleCommand)(nil), "errorpb.StaleCommand") - proto.RegisterType((*RaftEntryTooLarge)(nil), "errorpb.RaftEntryTooLarge") - proto.RegisterType((*Error)(nil), "errorpb.Error") -} -func (m *NotLeader) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *NotLeader) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionId != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintErrorpb(dAtA, i, uint64(m.RegionId)) - } - if m.Leader != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintErrorpb(dAtA, i, uint64(m.Leader.Size())) - n1, err := m.Leader.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - return i, nil -} - -func (m *StoreNotMatch) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *StoreNotMatch) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - return i, nil -} - -func (m *RegionNotFound) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RegionNotFound) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionId != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintErrorpb(dAtA, i, uint64(m.RegionId)) - } - return i, nil -} - -func (m *KeyNotInRegion) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *KeyNotInRegion) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Key) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintErrorpb(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - } - if m.RegionId != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintErrorpb(dAtA, i, uint64(m.RegionId)) - } - if len(m.StartKey) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintErrorpb(dAtA, i, uint64(len(m.StartKey))) - i += copy(dAtA[i:], m.StartKey) - } - if len(m.EndKey) > 0 { - dAtA[i] = 0x22 - i++ - i = encodeVarintErrorpb(dAtA, i, uint64(len(m.EndKey))) - i += copy(dAtA[i:], m.EndKey) - } - return i, nil -} - -func (m *StaleEpoch) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *StaleEpoch) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.NewRegions) > 0 { - for _, msg := range m.NewRegions { - dAtA[i] = 0xa - i++ - i = encodeVarintErrorpb(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *ServerIsBusy) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ServerIsBusy) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Reason) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintErrorpb(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - } - if m.BackoffMs != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintErrorpb(dAtA, i, uint64(m.BackoffMs)) - } - return i, nil -} - -func (m *StaleCommand) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *StaleCommand) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - return i, nil -} - -func (m *RaftEntryTooLarge) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RaftEntryTooLarge) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionId != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintErrorpb(dAtA, i, uint64(m.RegionId)) - } - if m.EntrySize != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintErrorpb(dAtA, i, uint64(m.EntrySize)) - } - return i, nil -} - -func (m *Error) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Error) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Message) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintErrorpb(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - } - if m.NotLeader != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintErrorpb(dAtA, i, uint64(m.NotLeader.Size())) - n2, err := m.NotLeader.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.RegionNotFound != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintErrorpb(dAtA, i, uint64(m.RegionNotFound.Size())) - n3, err := m.RegionNotFound.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.KeyNotInRegion != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintErrorpb(dAtA, i, uint64(m.KeyNotInRegion.Size())) - n4, err := m.KeyNotInRegion.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if m.StaleEpoch != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintErrorpb(dAtA, i, uint64(m.StaleEpoch.Size())) - n5, err := m.StaleEpoch.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if m.ServerIsBusy != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintErrorpb(dAtA, i, uint64(m.ServerIsBusy.Size())) - n6, err := m.ServerIsBusy.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - if m.StaleCommand != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintErrorpb(dAtA, i, uint64(m.StaleCommand.Size())) - n7, err := m.StaleCommand.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - } - if m.StoreNotMatch != nil { - dAtA[i] = 0x42 - i++ - i = encodeVarintErrorpb(dAtA, i, uint64(m.StoreNotMatch.Size())) - n8, err := m.StoreNotMatch.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 - } - if m.RaftEntryTooLarge != nil { - dAtA[i] = 0x4a - i++ - i = encodeVarintErrorpb(dAtA, i, uint64(m.RaftEntryTooLarge.Size())) - n9, err := m.RaftEntryTooLarge.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 - } - return i, nil -} - -func encodeFixed64Errorpb(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Errorpb(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintErrorpb(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *NotLeader) Size() (n int) { - var l int - _ = l - if m.RegionId != 0 { - n += 1 + sovErrorpb(uint64(m.RegionId)) - } - if m.Leader != nil { - l = m.Leader.Size() - n += 1 + l + sovErrorpb(uint64(l)) - } - return n -} - -func (m *StoreNotMatch) Size() (n int) { - var l int - _ = l - return n -} - -func (m *RegionNotFound) Size() (n int) { - var l int - _ = l - if m.RegionId != 0 { - n += 1 + sovErrorpb(uint64(m.RegionId)) - } - return n -} - -func (m *KeyNotInRegion) Size() (n int) { - var l int - _ = l - l = len(m.Key) - if l > 0 { - n += 1 + l + sovErrorpb(uint64(l)) - } - if m.RegionId != 0 { - n += 1 + sovErrorpb(uint64(m.RegionId)) - } - l = len(m.StartKey) - if l > 0 { - n += 1 + l + sovErrorpb(uint64(l)) - } - l = len(m.EndKey) - if l > 0 { - n += 1 + l + sovErrorpb(uint64(l)) - } - return n -} - -func (m *StaleEpoch) Size() (n int) { - var l int - _ = l - if len(m.NewRegions) > 0 { - for _, e := range m.NewRegions { - l = e.Size() - n += 1 + l + sovErrorpb(uint64(l)) - } - } - return n -} - -func (m *ServerIsBusy) Size() (n int) { - var l int - _ = l - l = len(m.Reason) - if l > 0 { - n += 1 + l + sovErrorpb(uint64(l)) - } - if m.BackoffMs != 0 { - n += 1 + sovErrorpb(uint64(m.BackoffMs)) - } - return n -} - -func (m *StaleCommand) Size() (n int) { - var l int - _ = l - return n -} - -func (m *RaftEntryTooLarge) Size() (n int) { - var l int - _ = l - if m.RegionId != 0 { - n += 1 + sovErrorpb(uint64(m.RegionId)) - } - if m.EntrySize != 0 { - n += 1 + sovErrorpb(uint64(m.EntrySize)) - } - return n -} - -func (m *Error) Size() (n int) { - var l int - _ = l - l = len(m.Message) - if l > 0 { - n += 1 + l + sovErrorpb(uint64(l)) - } - if m.NotLeader != nil { - l = m.NotLeader.Size() - n += 1 + l + sovErrorpb(uint64(l)) - } - if m.RegionNotFound != nil { - l = m.RegionNotFound.Size() - n += 1 + l + sovErrorpb(uint64(l)) - } - if m.KeyNotInRegion != nil { - l = m.KeyNotInRegion.Size() - n += 1 + l + sovErrorpb(uint64(l)) - } - if m.StaleEpoch != nil { - l = m.StaleEpoch.Size() - n += 1 + l + sovErrorpb(uint64(l)) - } - if m.ServerIsBusy != nil { - l = m.ServerIsBusy.Size() - n += 1 + l + sovErrorpb(uint64(l)) - } - if m.StaleCommand != nil { - l = m.StaleCommand.Size() - n += 1 + l + sovErrorpb(uint64(l)) - } - if m.StoreNotMatch != nil { - l = m.StoreNotMatch.Size() - n += 1 + l + sovErrorpb(uint64(l)) - } - if m.RaftEntryTooLarge != nil { - l = m.RaftEntryTooLarge.Size() - n += 1 + l + sovErrorpb(uint64(l)) - } - return n -} - -func sovErrorpb(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozErrorpb(x uint64) (n int) { - return sovErrorpb(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *NotLeader) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: NotLeader: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: NotLeader: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionId", wireType) - } - m.RegionId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RegionId |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Leader", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthErrorpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Leader == nil { - m.Leader = &metapb.Peer{} - } - if err := m.Leader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipErrorpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthErrorpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *StoreNotMatch) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: StoreNotMatch: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: StoreNotMatch: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipErrorpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthErrorpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RegionNotFound) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RegionNotFound: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RegionNotFound: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionId", wireType) - } - m.RegionId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RegionId |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipErrorpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthErrorpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *KeyNotInRegion) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: KeyNotInRegion: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: KeyNotInRegion: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthErrorpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...) - if m.Key == nil { - m.Key = []byte{} - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionId", wireType) - } - m.RegionId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RegionId |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StartKey", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthErrorpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.StartKey = append(m.StartKey[:0], dAtA[iNdEx:postIndex]...) - if m.StartKey == nil { - m.StartKey = []byte{} - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EndKey", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthErrorpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.EndKey = append(m.EndKey[:0], dAtA[iNdEx:postIndex]...) - if m.EndKey == nil { - m.EndKey = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipErrorpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthErrorpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *StaleEpoch) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: StaleEpoch: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: StaleEpoch: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NewRegions", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthErrorpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NewRegions = append(m.NewRegions, &metapb.Region{}) - if err := m.NewRegions[len(m.NewRegions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipErrorpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthErrorpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ServerIsBusy) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ServerIsBusy: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ServerIsBusy: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthErrorpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Reason = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field BackoffMs", wireType) - } - m.BackoffMs = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.BackoffMs |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipErrorpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthErrorpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *StaleCommand) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: StaleCommand: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: StaleCommand: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipErrorpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthErrorpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RaftEntryTooLarge) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RaftEntryTooLarge: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RaftEntryTooLarge: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionId", wireType) - } - m.RegionId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RegionId |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field EntrySize", wireType) - } - m.EntrySize = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.EntrySize |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipErrorpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthErrorpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Error) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Error: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Error: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthErrorpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Message = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NotLeader", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthErrorpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.NotLeader == nil { - m.NotLeader = &NotLeader{} - } - if err := m.NotLeader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionNotFound", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthErrorpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionNotFound == nil { - m.RegionNotFound = &RegionNotFound{} - } - if err := m.RegionNotFound.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field KeyNotInRegion", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthErrorpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.KeyNotInRegion == nil { - m.KeyNotInRegion = &KeyNotInRegion{} - } - if err := m.KeyNotInRegion.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StaleEpoch", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthErrorpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.StaleEpoch == nil { - m.StaleEpoch = &StaleEpoch{} - } - if err := m.StaleEpoch.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServerIsBusy", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthErrorpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ServerIsBusy == nil { - m.ServerIsBusy = &ServerIsBusy{} - } - if err := m.ServerIsBusy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StaleCommand", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthErrorpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.StaleCommand == nil { - m.StaleCommand = &StaleCommand{} - } - if err := m.StaleCommand.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StoreNotMatch", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthErrorpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.StoreNotMatch == nil { - m.StoreNotMatch = &StoreNotMatch{} - } - if err := m.StoreNotMatch.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RaftEntryTooLarge", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowErrorpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthErrorpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RaftEntryTooLarge == nil { - m.RaftEntryTooLarge = &RaftEntryTooLarge{} - } - if err := m.RaftEntryTooLarge.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipErrorpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthErrorpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipErrorpb(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowErrorpb - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowErrorpb - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowErrorpb - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - iNdEx += length - if length < 0 { - return 0, ErrInvalidLengthErrorpb - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowErrorpb - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipErrorpb(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthErrorpb = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowErrorpb = fmt.Errorf("proto: integer overflow") -) - -func init() { proto.RegisterFile("errorpb.proto", fileDescriptorErrorpb) } - -var fileDescriptorErrorpb = []byte{ - // 604 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x54, 0xdd, 0x6e, 0xd3, 0x30, - 0x14, 0x26, 0xfb, 0x69, 0x97, 0xd3, 0x34, 0xdb, 0xcc, 0xd8, 0xa2, 0x4d, 0xab, 0xa6, 0x88, 0x8b, - 0x09, 0x89, 0x4e, 0x0c, 0xae, 0x40, 0x20, 0x31, 0x54, 0xa4, 0xa9, 0x5b, 0x41, 0x2e, 0xf7, 0x91, - 0xdb, 0x9c, 0x76, 0x51, 0x17, 0xbb, 0xb2, 0xdd, 0x4d, 0xd9, 0x8b, 0xc0, 0x23, 0x71, 0xc9, 0x23, - 0xa0, 0xf1, 0x22, 0xc8, 0x4e, 0xda, 0x26, 0xbd, 0xd8, 0x55, 0xce, 0x39, 0xf6, 0x77, 0xfc, 0xf9, - 0x7c, 0x9f, 0x03, 0x4d, 0x94, 0x52, 0xc8, 0xe9, 0xa0, 0x3d, 0x95, 0x42, 0x0b, 0x52, 0x2f, 0xd2, - 0x43, 0x2f, 0x45, 0xcd, 0xe6, 0xe5, 0xc3, 0xbd, 0xb1, 0x18, 0x0b, 0x1b, 0x9e, 0x99, 0x28, 0xaf, - 0x86, 0x3d, 0x70, 0x7b, 0x42, 0x5f, 0x21, 0x8b, 0x51, 0x92, 0x23, 0x70, 0x25, 0x8e, 0x13, 0xc1, - 0xa3, 0x24, 0x0e, 0x9c, 0x13, 0xe7, 0x74, 0x83, 0x6e, 0xe5, 0x85, 0xcb, 0x98, 0xbc, 0x84, 0xda, - 0xad, 0xdd, 0x16, 0xac, 0x9d, 0x38, 0xa7, 0x8d, 0x73, 0xaf, 0x5d, 0xb4, 0xff, 0x8e, 0x28, 0x69, - 0xb1, 0x16, 0x6e, 0x43, 0xb3, 0xaf, 0x85, 0xc4, 0x9e, 0xd0, 0xd7, 0x4c, 0x0f, 0x6f, 0xc2, 0xd7, - 0xe0, 0x53, 0xdb, 0xa2, 0x27, 0xf4, 0x57, 0x31, 0xe3, 0xf1, 0x93, 0xa7, 0x84, 0x33, 0xf0, 0xbb, - 0x98, 0xf5, 0x84, 0xbe, 0xe4, 0x39, 0x8c, 0xec, 0xc0, 0xfa, 0x04, 0x33, 0xbb, 0xd1, 0xa3, 0x26, - 0xac, 0x36, 0x58, 0x5b, 0xa1, 0x79, 0x04, 0xae, 0xd2, 0x4c, 0xea, 0xc8, 0x80, 0xd6, 0x2d, 0x68, - 0xcb, 0x16, 0xba, 0x98, 0x91, 0x03, 0xa8, 0x23, 0x8f, 0xed, 0xd2, 0x86, 0x5d, 0xaa, 0x21, 0x8f, - 0xbb, 0x98, 0x85, 0x1f, 0x01, 0xfa, 0x9a, 0xdd, 0x62, 0x67, 0x2a, 0x86, 0x37, 0xe4, 0x0c, 0x1a, - 0x1c, 0xef, 0xa3, 0xbc, 0xa7, 0x0a, 0x9c, 0x93, 0xf5, 0xd3, 0xc6, 0xb9, 0x3f, 0xbf, 0x6f, 0xce, - 0x8b, 0x02, 0xc7, 0xfb, 0x3c, 0x54, 0x61, 0x07, 0xbc, 0x3e, 0xca, 0x3b, 0x94, 0x97, 0xea, 0x62, - 0xa6, 0x32, 0xb2, 0x0f, 0x35, 0x89, 0x4c, 0x09, 0x6e, 0x69, 0xbb, 0xb4, 0xc8, 0xc8, 0x31, 0xc0, - 0x80, 0x0d, 0x27, 0x62, 0x34, 0x8a, 0x52, 0x55, 0x50, 0x77, 0x8b, 0xca, 0xb5, 0x0a, 0x7d, 0xf0, - 0x2c, 0x8b, 0x2f, 0x22, 0x4d, 0x19, 0x8f, 0xc3, 0x6f, 0xb0, 0x4b, 0xd9, 0x48, 0x77, 0xb8, 0x96, - 0xd9, 0x0f, 0x21, 0xae, 0x98, 0x1c, 0xe3, 0xd3, 0x22, 0x1d, 0x03, 0xa0, 0xd9, 0x1d, 0xa9, 0xe4, - 0x01, 0xe7, 0x07, 0xd8, 0x4a, 0x3f, 0x79, 0xc0, 0xf0, 0xe7, 0x06, 0x6c, 0x76, 0x8c, 0x3b, 0x48, - 0x00, 0xf5, 0x14, 0x95, 0x62, 0x63, 0x2c, 0x28, 0xce, 0x53, 0xf2, 0x06, 0x80, 0x0b, 0x1d, 0x55, - 0xb4, 0x26, 0xed, 0xb9, 0xc5, 0x16, 0x66, 0xa1, 0x2e, 0x5f, 0xf8, 0xe6, 0x33, 0xec, 0x14, 0x94, - 0x0c, 0x72, 0x64, 0x54, 0xb6, 0xa3, 0x6f, 0x9c, 0x1f, 0x2c, 0x80, 0x55, 0x13, 0x50, 0x5f, 0x56, - 0x4d, 0x71, 0x01, 0xbb, 0x13, 0xcc, 0x2c, 0x3e, 0xe1, 0xc5, 0xe4, 0xad, 0x46, 0xe5, 0x1e, 0x55, - 0x67, 0x50, 0x7f, 0x52, 0x75, 0xca, 0x3b, 0x68, 0x28, 0x33, 0xbe, 0x08, 0x8d, 0x8a, 0xc1, 0xa6, - 0x45, 0x3f, 0x5f, 0xa0, 0x97, 0x02, 0x53, 0x50, 0x4b, 0xb1, 0x3f, 0x80, 0xaf, 0xac, 0x76, 0x51, - 0xa2, 0xa2, 0xc1, 0x4c, 0x65, 0x41, 0xcd, 0x02, 0x5f, 0x2c, 0x81, 0x25, 0x69, 0xa9, 0xa7, 0xca, - 0x42, 0xbf, 0x87, 0x66, 0x7e, 0xe4, 0x30, 0x97, 0x2c, 0xa8, 0xaf, 0x62, 0x4b, 0x7a, 0x52, 0x4f, - 0x95, 0x32, 0xf2, 0x09, 0xb6, 0x95, 0x79, 0x2a, 0xf6, 0xd2, 0xa9, 0x79, 0x2c, 0xc1, 0x96, 0x45, - 0xef, 0x97, 0xd0, 0xa5, 0xa7, 0x44, 0x9b, 0xaa, 0x9c, 0x92, 0x2e, 0xec, 0x49, 0x36, 0xd2, 0x51, - 0x2e, 0xb8, 0x16, 0x22, 0xba, 0x35, 0x06, 0x09, 0x5c, 0xdb, 0xe4, 0x70, 0x39, 0xf9, 0x55, 0x0b, - 0xd1, 0x5d, 0xb9, 0x5a, 0xba, 0x78, 0xf5, 0xfb, 0xb1, 0xe5, 0xfc, 0x79, 0x6c, 0x39, 0x7f, 0x1f, - 0x5b, 0xce, 0xaf, 0x7f, 0xad, 0x67, 0x10, 0x0c, 0x45, 0xda, 0x9e, 0x26, 0x7c, 0x3c, 0x64, 0xd3, - 0xb6, 0x4e, 0x26, 0x77, 0xed, 0xc9, 0x9d, 0xfd, 0x67, 0x0c, 0x6a, 0xf6, 0xf3, 0xf6, 0x7f, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x6f, 0xa9, 0xa3, 0xe6, 0x78, 0x04, 0x00, 0x00, -} diff --git a/vendor/github.com/pingcap/kvproto/pkg/kvrpcpb/kvrpcpb.pb.go b/vendor/github.com/pingcap/kvproto/pkg/kvrpcpb/kvrpcpb.pb.go deleted file mode 100644 index b3a7a1c..0000000 --- a/vendor/github.com/pingcap/kvproto/pkg/kvrpcpb/kvrpcpb.pb.go +++ /dev/null @@ -1,15024 +0,0 @@ -// Code generated by protoc-gen-gogo. -// source: kvrpcpb.proto -// DO NOT EDIT! - -/* - Package kvrpcpb is a generated protocol buffer package. - - It is generated from these files: - kvrpcpb.proto - - It has these top-level messages: - LockInfo - KeyError - WriteConflict - Context - HandleTime - ScanInfo - ScanDetail - ExecDetails - GetRequest - GetResponse - ScanRequest - KvPair - ScanResponse - Mutation - PrewriteRequest - PrewriteResponse - CommitRequest - CommitResponse - ImportRequest - ImportResponse - BatchRollbackRequest - BatchRollbackResponse - CleanupRequest - CleanupResponse - BatchGetRequest - BatchGetResponse - ScanLockRequest - ScanLockResponse - TxnInfo - ResolveLockRequest - ResolveLockResponse - GCRequest - GCResponse - RawGetRequest - RawGetResponse - RawPutRequest - RawPutResponse - RawBatchPutRequest - RawBatchPutResponse - RawBatchGetRequest - RawBatchGetResponse - RawDeleteRequest - RawDeleteResponse - RawBatchDeleteRequest - RawBatchDeleteResponse - DeleteRangeRequest - DeleteRangeResponse - RawDeleteRangeRequest - RawDeleteRangeResponse - RawScanRequest - RawScanResponse - KeyRange - RawBatchScanRequest - RawBatchScanResponse - MvccWrite - MvccValue - MvccLock - MvccInfo - MvccGetByKeyRequest - MvccGetByKeyResponse - MvccGetByStartTsRequest - MvccGetByStartTsResponse - SplitRegionRequest - SplitRegionResponse -*/ -package kvrpcpb - -import ( - "fmt" - "io" - "math" - - proto "github.com/golang/protobuf/proto" - - metapb "github.com/pingcap/kvproto/pkg/metapb" - - errorpb "github.com/pingcap/kvproto/pkg/errorpb" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -type CommandPri int32 - -const ( - CommandPri_Normal CommandPri = 0 - CommandPri_Low CommandPri = 1 - CommandPri_High CommandPri = 2 -) - -var CommandPri_name = map[int32]string{ - 0: "Normal", - 1: "Low", - 2: "High", -} -var CommandPri_value = map[string]int32{ - "Normal": 0, - "Low": 1, - "High": 2, -} - -func (x CommandPri) String() string { - return proto.EnumName(CommandPri_name, int32(x)) -} -func (CommandPri) EnumDescriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{0} } - -type IsolationLevel int32 - -const ( - IsolationLevel_SI IsolationLevel = 0 - IsolationLevel_RC IsolationLevel = 1 -) - -var IsolationLevel_name = map[int32]string{ - 0: "SI", - 1: "RC", -} -var IsolationLevel_value = map[string]int32{ - "SI": 0, - "RC": 1, -} - -func (x IsolationLevel) String() string { - return proto.EnumName(IsolationLevel_name, int32(x)) -} -func (IsolationLevel) EnumDescriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{1} } - -type Op int32 - -const ( - Op_Put Op = 0 - Op_Del Op = 1 - Op_Lock Op = 2 - Op_Rollback Op = 3 -) - -var Op_name = map[int32]string{ - 0: "Put", - 1: "Del", - 2: "Lock", - 3: "Rollback", -} -var Op_value = map[string]int32{ - "Put": 0, - "Del": 1, - "Lock": 2, - "Rollback": 3, -} - -func (x Op) String() string { - return proto.EnumName(Op_name, int32(x)) -} -func (Op) EnumDescriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{2} } - -type LockInfo struct { - PrimaryLock []byte `protobuf:"bytes,1,opt,name=primary_lock,json=primaryLock,proto3" json:"primary_lock,omitempty"` - LockVersion uint64 `protobuf:"varint,2,opt,name=lock_version,json=lockVersion,proto3" json:"lock_version,omitempty"` - Key []byte `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"` - LockTtl uint64 `protobuf:"varint,4,opt,name=lock_ttl,json=lockTtl,proto3" json:"lock_ttl,omitempty"` -} - -func (m *LockInfo) Reset() { *m = LockInfo{} } -func (m *LockInfo) String() string { return proto.CompactTextString(m) } -func (*LockInfo) ProtoMessage() {} -func (*LockInfo) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{0} } - -func (m *LockInfo) GetPrimaryLock() []byte { - if m != nil { - return m.PrimaryLock - } - return nil -} - -func (m *LockInfo) GetLockVersion() uint64 { - if m != nil { - return m.LockVersion - } - return 0 -} - -func (m *LockInfo) GetKey() []byte { - if m != nil { - return m.Key - } - return nil -} - -func (m *LockInfo) GetLockTtl() uint64 { - if m != nil { - return m.LockTtl - } - return 0 -} - -type KeyError struct { - Locked *LockInfo `protobuf:"bytes,1,opt,name=locked" json:"locked,omitempty"` - Retryable string `protobuf:"bytes,2,opt,name=retryable,proto3" json:"retryable,omitempty"` - Abort string `protobuf:"bytes,3,opt,name=abort,proto3" json:"abort,omitempty"` - Conflict *WriteConflict `protobuf:"bytes,4,opt,name=conflict" json:"conflict,omitempty"` -} - -func (m *KeyError) Reset() { *m = KeyError{} } -func (m *KeyError) String() string { return proto.CompactTextString(m) } -func (*KeyError) ProtoMessage() {} -func (*KeyError) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{1} } - -func (m *KeyError) GetLocked() *LockInfo { - if m != nil { - return m.Locked - } - return nil -} - -func (m *KeyError) GetRetryable() string { - if m != nil { - return m.Retryable - } - return "" -} - -func (m *KeyError) GetAbort() string { - if m != nil { - return m.Abort - } - return "" -} - -func (m *KeyError) GetConflict() *WriteConflict { - if m != nil { - return m.Conflict - } - return nil -} - -type WriteConflict struct { - StartTs uint64 `protobuf:"varint,1,opt,name=start_ts,json=startTs,proto3" json:"start_ts,omitempty"` - ConflictTs uint64 `protobuf:"varint,2,opt,name=conflict_ts,json=conflictTs,proto3" json:"conflict_ts,omitempty"` - Key []byte `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"` - Primary []byte `protobuf:"bytes,4,opt,name=primary,proto3" json:"primary,omitempty"` -} - -func (m *WriteConflict) Reset() { *m = WriteConflict{} } -func (m *WriteConflict) String() string { return proto.CompactTextString(m) } -func (*WriteConflict) ProtoMessage() {} -func (*WriteConflict) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{2} } - -func (m *WriteConflict) GetStartTs() uint64 { - if m != nil { - return m.StartTs - } - return 0 -} - -func (m *WriteConflict) GetConflictTs() uint64 { - if m != nil { - return m.ConflictTs - } - return 0 -} - -func (m *WriteConflict) GetKey() []byte { - if m != nil { - return m.Key - } - return nil -} - -func (m *WriteConflict) GetPrimary() []byte { - if m != nil { - return m.Primary - } - return nil -} - -type Context struct { - RegionId uint64 `protobuf:"varint,1,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - RegionEpoch *metapb.RegionEpoch `protobuf:"bytes,2,opt,name=region_epoch,json=regionEpoch" json:"region_epoch,omitempty"` - Peer *metapb.Peer `protobuf:"bytes,3,opt,name=peer" json:"peer,omitempty"` - Term uint64 `protobuf:"varint,5,opt,name=term,proto3" json:"term,omitempty"` - Priority CommandPri `protobuf:"varint,6,opt,name=priority,proto3,enum=kvrpcpb.CommandPri" json:"priority,omitempty"` - IsolationLevel IsolationLevel `protobuf:"varint,7,opt,name=isolation_level,json=isolationLevel,proto3,enum=kvrpcpb.IsolationLevel" json:"isolation_level,omitempty"` - NotFillCache bool `protobuf:"varint,8,opt,name=not_fill_cache,json=notFillCache,proto3" json:"not_fill_cache,omitempty"` - SyncLog bool `protobuf:"varint,9,opt,name=sync_log,json=syncLog,proto3" json:"sync_log,omitempty"` - HandleTime bool `protobuf:"varint,10,opt,name=handle_time,json=handleTime,proto3" json:"handle_time,omitempty"` - ScanDetail bool `protobuf:"varint,11,opt,name=scan_detail,json=scanDetail,proto3" json:"scan_detail,omitempty"` -} - -func (m *Context) Reset() { *m = Context{} } -func (m *Context) String() string { return proto.CompactTextString(m) } -func (*Context) ProtoMessage() {} -func (*Context) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{3} } - -func (m *Context) GetRegionId() uint64 { - if m != nil { - return m.RegionId - } - return 0 -} - -func (m *Context) GetRegionEpoch() *metapb.RegionEpoch { - if m != nil { - return m.RegionEpoch - } - return nil -} - -func (m *Context) GetPeer() *metapb.Peer { - if m != nil { - return m.Peer - } - return nil -} - -func (m *Context) GetTerm() uint64 { - if m != nil { - return m.Term - } - return 0 -} - -func (m *Context) GetPriority() CommandPri { - if m != nil { - return m.Priority - } - return CommandPri_Normal -} - -func (m *Context) GetIsolationLevel() IsolationLevel { - if m != nil { - return m.IsolationLevel - } - return IsolationLevel_SI -} - -func (m *Context) GetNotFillCache() bool { - if m != nil { - return m.NotFillCache - } - return false -} - -func (m *Context) GetSyncLog() bool { - if m != nil { - return m.SyncLog - } - return false -} - -func (m *Context) GetHandleTime() bool { - if m != nil { - return m.HandleTime - } - return false -} - -func (m *Context) GetScanDetail() bool { - if m != nil { - return m.ScanDetail - } - return false -} - -type HandleTime struct { - WaitMs int64 `protobuf:"varint,1,opt,name=wait_ms,json=waitMs,proto3" json:"wait_ms,omitempty"` - ProcessMs int64 `protobuf:"varint,2,opt,name=process_ms,json=processMs,proto3" json:"process_ms,omitempty"` -} - -func (m *HandleTime) Reset() { *m = HandleTime{} } -func (m *HandleTime) String() string { return proto.CompactTextString(m) } -func (*HandleTime) ProtoMessage() {} -func (*HandleTime) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{4} } - -func (m *HandleTime) GetWaitMs() int64 { - if m != nil { - return m.WaitMs - } - return 0 -} - -func (m *HandleTime) GetProcessMs() int64 { - if m != nil { - return m.ProcessMs - } - return 0 -} - -type ScanInfo struct { - Total int64 `protobuf:"varint,1,opt,name=total,proto3" json:"total,omitempty"` - Processed int64 `protobuf:"varint,2,opt,name=processed,proto3" json:"processed,omitempty"` -} - -func (m *ScanInfo) Reset() { *m = ScanInfo{} } -func (m *ScanInfo) String() string { return proto.CompactTextString(m) } -func (*ScanInfo) ProtoMessage() {} -func (*ScanInfo) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{5} } - -func (m *ScanInfo) GetTotal() int64 { - if m != nil { - return m.Total - } - return 0 -} - -func (m *ScanInfo) GetProcessed() int64 { - if m != nil { - return m.Processed - } - return 0 -} - -type ScanDetail struct { - Write *ScanInfo `protobuf:"bytes,1,opt,name=write" json:"write,omitempty"` - Lock *ScanInfo `protobuf:"bytes,2,opt,name=lock" json:"lock,omitempty"` - Data *ScanInfo `protobuf:"bytes,3,opt,name=data" json:"data,omitempty"` -} - -func (m *ScanDetail) Reset() { *m = ScanDetail{} } -func (m *ScanDetail) String() string { return proto.CompactTextString(m) } -func (*ScanDetail) ProtoMessage() {} -func (*ScanDetail) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{6} } - -func (m *ScanDetail) GetWrite() *ScanInfo { - if m != nil { - return m.Write - } - return nil -} - -func (m *ScanDetail) GetLock() *ScanInfo { - if m != nil { - return m.Lock - } - return nil -} - -func (m *ScanDetail) GetData() *ScanInfo { - if m != nil { - return m.Data - } - return nil -} - -type ExecDetails struct { - HandleTime *HandleTime `protobuf:"bytes,1,opt,name=handle_time,json=handleTime" json:"handle_time,omitempty"` - ScanDetail *ScanDetail `protobuf:"bytes,2,opt,name=scan_detail,json=scanDetail" json:"scan_detail,omitempty"` -} - -func (m *ExecDetails) Reset() { *m = ExecDetails{} } -func (m *ExecDetails) String() string { return proto.CompactTextString(m) } -func (*ExecDetails) ProtoMessage() {} -func (*ExecDetails) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{7} } - -func (m *ExecDetails) GetHandleTime() *HandleTime { - if m != nil { - return m.HandleTime - } - return nil -} - -func (m *ExecDetails) GetScanDetail() *ScanDetail { - if m != nil { - return m.ScanDetail - } - return nil -} - -type GetRequest struct { - Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` - Key []byte `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` - Version uint64 `protobuf:"varint,3,opt,name=version,proto3" json:"version,omitempty"` -} - -func (m *GetRequest) Reset() { *m = GetRequest{} } -func (m *GetRequest) String() string { return proto.CompactTextString(m) } -func (*GetRequest) ProtoMessage() {} -func (*GetRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{8} } - -func (m *GetRequest) GetContext() *Context { - if m != nil { - return m.Context - } - return nil -} - -func (m *GetRequest) GetKey() []byte { - if m != nil { - return m.Key - } - return nil -} - -func (m *GetRequest) GetVersion() uint64 { - if m != nil { - return m.Version - } - return 0 -} - -type GetResponse struct { - RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Error *KeyError `protobuf:"bytes,2,opt,name=error" json:"error,omitempty"` - Value []byte `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` -} - -func (m *GetResponse) Reset() { *m = GetResponse{} } -func (m *GetResponse) String() string { return proto.CompactTextString(m) } -func (*GetResponse) ProtoMessage() {} -func (*GetResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{9} } - -func (m *GetResponse) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *GetResponse) GetError() *KeyError { - if m != nil { - return m.Error - } - return nil -} - -func (m *GetResponse) GetValue() []byte { - if m != nil { - return m.Value - } - return nil -} - -type ScanRequest struct { - Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` - StartKey []byte `protobuf:"bytes,2,opt,name=start_key,json=startKey,proto3" json:"start_key,omitempty"` - Limit uint32 `protobuf:"varint,3,opt,name=limit,proto3" json:"limit,omitempty"` - Version uint64 `protobuf:"varint,4,opt,name=version,proto3" json:"version,omitempty"` - KeyOnly bool `protobuf:"varint,5,opt,name=key_only,json=keyOnly,proto3" json:"key_only,omitempty"` - Reverse bool `protobuf:"varint,6,opt,name=reverse,proto3" json:"reverse,omitempty"` -} - -func (m *ScanRequest) Reset() { *m = ScanRequest{} } -func (m *ScanRequest) String() string { return proto.CompactTextString(m) } -func (*ScanRequest) ProtoMessage() {} -func (*ScanRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{10} } - -func (m *ScanRequest) GetContext() *Context { - if m != nil { - return m.Context - } - return nil -} - -func (m *ScanRequest) GetStartKey() []byte { - if m != nil { - return m.StartKey - } - return nil -} - -func (m *ScanRequest) GetLimit() uint32 { - if m != nil { - return m.Limit - } - return 0 -} - -func (m *ScanRequest) GetVersion() uint64 { - if m != nil { - return m.Version - } - return 0 -} - -func (m *ScanRequest) GetKeyOnly() bool { - if m != nil { - return m.KeyOnly - } - return false -} - -func (m *ScanRequest) GetReverse() bool { - if m != nil { - return m.Reverse - } - return false -} - -type KvPair struct { - Error *KeyError `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"` - Key []byte `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` - Value []byte `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` -} - -func (m *KvPair) Reset() { *m = KvPair{} } -func (m *KvPair) String() string { return proto.CompactTextString(m) } -func (*KvPair) ProtoMessage() {} -func (*KvPair) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{11} } - -func (m *KvPair) GetError() *KeyError { - if m != nil { - return m.Error - } - return nil -} - -func (m *KvPair) GetKey() []byte { - if m != nil { - return m.Key - } - return nil -} - -func (m *KvPair) GetValue() []byte { - if m != nil { - return m.Value - } - return nil -} - -type ScanResponse struct { - RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Pairs []*KvPair `protobuf:"bytes,2,rep,name=pairs" json:"pairs,omitempty"` -} - -func (m *ScanResponse) Reset() { *m = ScanResponse{} } -func (m *ScanResponse) String() string { return proto.CompactTextString(m) } -func (*ScanResponse) ProtoMessage() {} -func (*ScanResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{12} } - -func (m *ScanResponse) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *ScanResponse) GetPairs() []*KvPair { - if m != nil { - return m.Pairs - } - return nil -} - -type Mutation struct { - Op Op `protobuf:"varint,1,opt,name=op,proto3,enum=kvrpcpb.Op" json:"op,omitempty"` - Key []byte `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` - Value []byte `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` -} - -func (m *Mutation) Reset() { *m = Mutation{} } -func (m *Mutation) String() string { return proto.CompactTextString(m) } -func (*Mutation) ProtoMessage() {} -func (*Mutation) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{13} } - -func (m *Mutation) GetOp() Op { - if m != nil { - return m.Op - } - return Op_Put -} - -func (m *Mutation) GetKey() []byte { - if m != nil { - return m.Key - } - return nil -} - -func (m *Mutation) GetValue() []byte { - if m != nil { - return m.Value - } - return nil -} - -type PrewriteRequest struct { - Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` - Mutations []*Mutation `protobuf:"bytes,2,rep,name=mutations" json:"mutations,omitempty"` - // primary_lock_key - PrimaryLock []byte `protobuf:"bytes,3,opt,name=primary_lock,json=primaryLock,proto3" json:"primary_lock,omitempty"` - StartVersion uint64 `protobuf:"varint,4,opt,name=start_version,json=startVersion,proto3" json:"start_version,omitempty"` - LockTtl uint64 `protobuf:"varint,5,opt,name=lock_ttl,json=lockTtl,proto3" json:"lock_ttl,omitempty"` - SkipConstraintCheck bool `protobuf:"varint,6,opt,name=skip_constraint_check,json=skipConstraintCheck,proto3" json:"skip_constraint_check,omitempty"` -} - -func (m *PrewriteRequest) Reset() { *m = PrewriteRequest{} } -func (m *PrewriteRequest) String() string { return proto.CompactTextString(m) } -func (*PrewriteRequest) ProtoMessage() {} -func (*PrewriteRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{14} } - -func (m *PrewriteRequest) GetContext() *Context { - if m != nil { - return m.Context - } - return nil -} - -func (m *PrewriteRequest) GetMutations() []*Mutation { - if m != nil { - return m.Mutations - } - return nil -} - -func (m *PrewriteRequest) GetPrimaryLock() []byte { - if m != nil { - return m.PrimaryLock - } - return nil -} - -func (m *PrewriteRequest) GetStartVersion() uint64 { - if m != nil { - return m.StartVersion - } - return 0 -} - -func (m *PrewriteRequest) GetLockTtl() uint64 { - if m != nil { - return m.LockTtl - } - return 0 -} - -func (m *PrewriteRequest) GetSkipConstraintCheck() bool { - if m != nil { - return m.SkipConstraintCheck - } - return false -} - -type PrewriteResponse struct { - RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Errors []*KeyError `protobuf:"bytes,2,rep,name=errors" json:"errors,omitempty"` -} - -func (m *PrewriteResponse) Reset() { *m = PrewriteResponse{} } -func (m *PrewriteResponse) String() string { return proto.CompactTextString(m) } -func (*PrewriteResponse) ProtoMessage() {} -func (*PrewriteResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{15} } - -func (m *PrewriteResponse) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *PrewriteResponse) GetErrors() []*KeyError { - if m != nil { - return m.Errors - } - return nil -} - -type CommitRequest struct { - Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` - StartVersion uint64 `protobuf:"varint,2,opt,name=start_version,json=startVersion,proto3" json:"start_version,omitempty"` - Keys [][]byte `protobuf:"bytes,3,rep,name=keys" json:"keys,omitempty"` - CommitVersion uint64 `protobuf:"varint,4,opt,name=commit_version,json=commitVersion,proto3" json:"commit_version,omitempty"` -} - -func (m *CommitRequest) Reset() { *m = CommitRequest{} } -func (m *CommitRequest) String() string { return proto.CompactTextString(m) } -func (*CommitRequest) ProtoMessage() {} -func (*CommitRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{16} } - -func (m *CommitRequest) GetContext() *Context { - if m != nil { - return m.Context - } - return nil -} - -func (m *CommitRequest) GetStartVersion() uint64 { - if m != nil { - return m.StartVersion - } - return 0 -} - -func (m *CommitRequest) GetKeys() [][]byte { - if m != nil { - return m.Keys - } - return nil -} - -func (m *CommitRequest) GetCommitVersion() uint64 { - if m != nil { - return m.CommitVersion - } - return 0 -} - -type CommitResponse struct { - RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Error *KeyError `protobuf:"bytes,2,opt,name=error" json:"error,omitempty"` -} - -func (m *CommitResponse) Reset() { *m = CommitResponse{} } -func (m *CommitResponse) String() string { return proto.CompactTextString(m) } -func (*CommitResponse) ProtoMessage() {} -func (*CommitResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{17} } - -func (m *CommitResponse) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *CommitResponse) GetError() *KeyError { - if m != nil { - return m.Error - } - return nil -} - -type ImportRequest struct { - Mutations []*Mutation `protobuf:"bytes,1,rep,name=mutations" json:"mutations,omitempty"` - CommitVersion uint64 `protobuf:"varint,2,opt,name=commit_version,json=commitVersion,proto3" json:"commit_version,omitempty"` -} - -func (m *ImportRequest) Reset() { *m = ImportRequest{} } -func (m *ImportRequest) String() string { return proto.CompactTextString(m) } -func (*ImportRequest) ProtoMessage() {} -func (*ImportRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{18} } - -func (m *ImportRequest) GetMutations() []*Mutation { - if m != nil { - return m.Mutations - } - return nil -} - -func (m *ImportRequest) GetCommitVersion() uint64 { - if m != nil { - return m.CommitVersion - } - return 0 -} - -type ImportResponse struct { - RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` -} - -func (m *ImportResponse) Reset() { *m = ImportResponse{} } -func (m *ImportResponse) String() string { return proto.CompactTextString(m) } -func (*ImportResponse) ProtoMessage() {} -func (*ImportResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{19} } - -func (m *ImportResponse) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *ImportResponse) GetError() string { - if m != nil { - return m.Error - } - return "" -} - -type BatchRollbackRequest struct { - Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` - StartVersion uint64 `protobuf:"varint,2,opt,name=start_version,json=startVersion,proto3" json:"start_version,omitempty"` - Keys [][]byte `protobuf:"bytes,3,rep,name=keys" json:"keys,omitempty"` -} - -func (m *BatchRollbackRequest) Reset() { *m = BatchRollbackRequest{} } -func (m *BatchRollbackRequest) String() string { return proto.CompactTextString(m) } -func (*BatchRollbackRequest) ProtoMessage() {} -func (*BatchRollbackRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{20} } - -func (m *BatchRollbackRequest) GetContext() *Context { - if m != nil { - return m.Context - } - return nil -} - -func (m *BatchRollbackRequest) GetStartVersion() uint64 { - if m != nil { - return m.StartVersion - } - return 0 -} - -func (m *BatchRollbackRequest) GetKeys() [][]byte { - if m != nil { - return m.Keys - } - return nil -} - -type BatchRollbackResponse struct { - RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Error *KeyError `protobuf:"bytes,2,opt,name=error" json:"error,omitempty"` -} - -func (m *BatchRollbackResponse) Reset() { *m = BatchRollbackResponse{} } -func (m *BatchRollbackResponse) String() string { return proto.CompactTextString(m) } -func (*BatchRollbackResponse) ProtoMessage() {} -func (*BatchRollbackResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{21} } - -func (m *BatchRollbackResponse) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *BatchRollbackResponse) GetError() *KeyError { - if m != nil { - return m.Error - } - return nil -} - -type CleanupRequest struct { - Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` - Key []byte `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` - StartVersion uint64 `protobuf:"varint,3,opt,name=start_version,json=startVersion,proto3" json:"start_version,omitempty"` -} - -func (m *CleanupRequest) Reset() { *m = CleanupRequest{} } -func (m *CleanupRequest) String() string { return proto.CompactTextString(m) } -func (*CleanupRequest) ProtoMessage() {} -func (*CleanupRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{22} } - -func (m *CleanupRequest) GetContext() *Context { - if m != nil { - return m.Context - } - return nil -} - -func (m *CleanupRequest) GetKey() []byte { - if m != nil { - return m.Key - } - return nil -} - -func (m *CleanupRequest) GetStartVersion() uint64 { - if m != nil { - return m.StartVersion - } - return 0 -} - -type CleanupResponse struct { - RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Error *KeyError `protobuf:"bytes,2,opt,name=error" json:"error,omitempty"` - CommitVersion uint64 `protobuf:"varint,3,opt,name=commit_version,json=commitVersion,proto3" json:"commit_version,omitempty"` -} - -func (m *CleanupResponse) Reset() { *m = CleanupResponse{} } -func (m *CleanupResponse) String() string { return proto.CompactTextString(m) } -func (*CleanupResponse) ProtoMessage() {} -func (*CleanupResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{23} } - -func (m *CleanupResponse) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *CleanupResponse) GetError() *KeyError { - if m != nil { - return m.Error - } - return nil -} - -func (m *CleanupResponse) GetCommitVersion() uint64 { - if m != nil { - return m.CommitVersion - } - return 0 -} - -type BatchGetRequest struct { - Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` - Keys [][]byte `protobuf:"bytes,2,rep,name=keys" json:"keys,omitempty"` - Version uint64 `protobuf:"varint,3,opt,name=version,proto3" json:"version,omitempty"` -} - -func (m *BatchGetRequest) Reset() { *m = BatchGetRequest{} } -func (m *BatchGetRequest) String() string { return proto.CompactTextString(m) } -func (*BatchGetRequest) ProtoMessage() {} -func (*BatchGetRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{24} } - -func (m *BatchGetRequest) GetContext() *Context { - if m != nil { - return m.Context - } - return nil -} - -func (m *BatchGetRequest) GetKeys() [][]byte { - if m != nil { - return m.Keys - } - return nil -} - -func (m *BatchGetRequest) GetVersion() uint64 { - if m != nil { - return m.Version - } - return 0 -} - -type BatchGetResponse struct { - RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Pairs []*KvPair `protobuf:"bytes,2,rep,name=pairs" json:"pairs,omitempty"` -} - -func (m *BatchGetResponse) Reset() { *m = BatchGetResponse{} } -func (m *BatchGetResponse) String() string { return proto.CompactTextString(m) } -func (*BatchGetResponse) ProtoMessage() {} -func (*BatchGetResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{25} } - -func (m *BatchGetResponse) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *BatchGetResponse) GetPairs() []*KvPair { - if m != nil { - return m.Pairs - } - return nil -} - -type ScanLockRequest struct { - Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` - MaxVersion uint64 `protobuf:"varint,2,opt,name=max_version,json=maxVersion,proto3" json:"max_version,omitempty"` - StartKey []byte `protobuf:"bytes,3,opt,name=start_key,json=startKey,proto3" json:"start_key,omitempty"` - Limit uint32 `protobuf:"varint,4,opt,name=limit,proto3" json:"limit,omitempty"` -} - -func (m *ScanLockRequest) Reset() { *m = ScanLockRequest{} } -func (m *ScanLockRequest) String() string { return proto.CompactTextString(m) } -func (*ScanLockRequest) ProtoMessage() {} -func (*ScanLockRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{26} } - -func (m *ScanLockRequest) GetContext() *Context { - if m != nil { - return m.Context - } - return nil -} - -func (m *ScanLockRequest) GetMaxVersion() uint64 { - if m != nil { - return m.MaxVersion - } - return 0 -} - -func (m *ScanLockRequest) GetStartKey() []byte { - if m != nil { - return m.StartKey - } - return nil -} - -func (m *ScanLockRequest) GetLimit() uint32 { - if m != nil { - return m.Limit - } - return 0 -} - -type ScanLockResponse struct { - RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Error *KeyError `protobuf:"bytes,2,opt,name=error" json:"error,omitempty"` - Locks []*LockInfo `protobuf:"bytes,3,rep,name=locks" json:"locks,omitempty"` -} - -func (m *ScanLockResponse) Reset() { *m = ScanLockResponse{} } -func (m *ScanLockResponse) String() string { return proto.CompactTextString(m) } -func (*ScanLockResponse) ProtoMessage() {} -func (*ScanLockResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{27} } - -func (m *ScanLockResponse) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *ScanLockResponse) GetError() *KeyError { - if m != nil { - return m.Error - } - return nil -} - -func (m *ScanLockResponse) GetLocks() []*LockInfo { - if m != nil { - return m.Locks - } - return nil -} - -type TxnInfo struct { - Txn uint64 `protobuf:"varint,1,opt,name=txn,proto3" json:"txn,omitempty"` - Status uint64 `protobuf:"varint,2,opt,name=status,proto3" json:"status,omitempty"` -} - -func (m *TxnInfo) Reset() { *m = TxnInfo{} } -func (m *TxnInfo) String() string { return proto.CompactTextString(m) } -func (*TxnInfo) ProtoMessage() {} -func (*TxnInfo) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{28} } - -func (m *TxnInfo) GetTxn() uint64 { - if m != nil { - return m.Txn - } - return 0 -} - -func (m *TxnInfo) GetStatus() uint64 { - if m != nil { - return m.Status - } - return 0 -} - -type ResolveLockRequest struct { - Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` - StartVersion uint64 `protobuf:"varint,2,opt,name=start_version,json=startVersion,proto3" json:"start_version,omitempty"` - // If the txn is rolled back, do not set it. - CommitVersion uint64 `protobuf:"varint,3,opt,name=commit_version,json=commitVersion,proto3" json:"commit_version,omitempty"` - TxnInfos []*TxnInfo `protobuf:"bytes,4,rep,name=txn_infos,json=txnInfos" json:"txn_infos,omitempty"` -} - -func (m *ResolveLockRequest) Reset() { *m = ResolveLockRequest{} } -func (m *ResolveLockRequest) String() string { return proto.CompactTextString(m) } -func (*ResolveLockRequest) ProtoMessage() {} -func (*ResolveLockRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{29} } - -func (m *ResolveLockRequest) GetContext() *Context { - if m != nil { - return m.Context - } - return nil -} - -func (m *ResolveLockRequest) GetStartVersion() uint64 { - if m != nil { - return m.StartVersion - } - return 0 -} - -func (m *ResolveLockRequest) GetCommitVersion() uint64 { - if m != nil { - return m.CommitVersion - } - return 0 -} - -func (m *ResolveLockRequest) GetTxnInfos() []*TxnInfo { - if m != nil { - return m.TxnInfos - } - return nil -} - -type ResolveLockResponse struct { - RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Error *KeyError `protobuf:"bytes,2,opt,name=error" json:"error,omitempty"` -} - -func (m *ResolveLockResponse) Reset() { *m = ResolveLockResponse{} } -func (m *ResolveLockResponse) String() string { return proto.CompactTextString(m) } -func (*ResolveLockResponse) ProtoMessage() {} -func (*ResolveLockResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{30} } - -func (m *ResolveLockResponse) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *ResolveLockResponse) GetError() *KeyError { - if m != nil { - return m.Error - } - return nil -} - -type GCRequest struct { - Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` - SafePoint uint64 `protobuf:"varint,2,opt,name=safe_point,json=safePoint,proto3" json:"safe_point,omitempty"` -} - -func (m *GCRequest) Reset() { *m = GCRequest{} } -func (m *GCRequest) String() string { return proto.CompactTextString(m) } -func (*GCRequest) ProtoMessage() {} -func (*GCRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{31} } - -func (m *GCRequest) GetContext() *Context { - if m != nil { - return m.Context - } - return nil -} - -func (m *GCRequest) GetSafePoint() uint64 { - if m != nil { - return m.SafePoint - } - return 0 -} - -type GCResponse struct { - RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Error *KeyError `protobuf:"bytes,2,opt,name=error" json:"error,omitempty"` -} - -func (m *GCResponse) Reset() { *m = GCResponse{} } -func (m *GCResponse) String() string { return proto.CompactTextString(m) } -func (*GCResponse) ProtoMessage() {} -func (*GCResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{32} } - -func (m *GCResponse) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *GCResponse) GetError() *KeyError { - if m != nil { - return m.Error - } - return nil -} - -type RawGetRequest struct { - Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` - Key []byte `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` - Cf string `protobuf:"bytes,3,opt,name=cf,proto3" json:"cf,omitempty"` -} - -func (m *RawGetRequest) Reset() { *m = RawGetRequest{} } -func (m *RawGetRequest) String() string { return proto.CompactTextString(m) } -func (*RawGetRequest) ProtoMessage() {} -func (*RawGetRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{33} } - -func (m *RawGetRequest) GetContext() *Context { - if m != nil { - return m.Context - } - return nil -} - -func (m *RawGetRequest) GetKey() []byte { - if m != nil { - return m.Key - } - return nil -} - -func (m *RawGetRequest) GetCf() string { - if m != nil { - return m.Cf - } - return "" -} - -type RawGetResponse struct { - RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` - Value []byte `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` -} - -func (m *RawGetResponse) Reset() { *m = RawGetResponse{} } -func (m *RawGetResponse) String() string { return proto.CompactTextString(m) } -func (*RawGetResponse) ProtoMessage() {} -func (*RawGetResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{34} } - -func (m *RawGetResponse) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *RawGetResponse) GetError() string { - if m != nil { - return m.Error - } - return "" -} - -func (m *RawGetResponse) GetValue() []byte { - if m != nil { - return m.Value - } - return nil -} - -type RawPutRequest struct { - Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` - Key []byte `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` - Value []byte `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` - Cf string `protobuf:"bytes,4,opt,name=cf,proto3" json:"cf,omitempty"` -} - -func (m *RawPutRequest) Reset() { *m = RawPutRequest{} } -func (m *RawPutRequest) String() string { return proto.CompactTextString(m) } -func (*RawPutRequest) ProtoMessage() {} -func (*RawPutRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{35} } - -func (m *RawPutRequest) GetContext() *Context { - if m != nil { - return m.Context - } - return nil -} - -func (m *RawPutRequest) GetKey() []byte { - if m != nil { - return m.Key - } - return nil -} - -func (m *RawPutRequest) GetValue() []byte { - if m != nil { - return m.Value - } - return nil -} - -func (m *RawPutRequest) GetCf() string { - if m != nil { - return m.Cf - } - return "" -} - -type RawPutResponse struct { - RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` -} - -func (m *RawPutResponse) Reset() { *m = RawPutResponse{} } -func (m *RawPutResponse) String() string { return proto.CompactTextString(m) } -func (*RawPutResponse) ProtoMessage() {} -func (*RawPutResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{36} } - -func (m *RawPutResponse) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *RawPutResponse) GetError() string { - if m != nil { - return m.Error - } - return "" -} - -type RawBatchPutRequest struct { - Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` - Pairs []*KvPair `protobuf:"bytes,2,rep,name=pairs" json:"pairs,omitempty"` - Cf string `protobuf:"bytes,3,opt,name=cf,proto3" json:"cf,omitempty"` -} - -func (m *RawBatchPutRequest) Reset() { *m = RawBatchPutRequest{} } -func (m *RawBatchPutRequest) String() string { return proto.CompactTextString(m) } -func (*RawBatchPutRequest) ProtoMessage() {} -func (*RawBatchPutRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{37} } - -func (m *RawBatchPutRequest) GetContext() *Context { - if m != nil { - return m.Context - } - return nil -} - -func (m *RawBatchPutRequest) GetPairs() []*KvPair { - if m != nil { - return m.Pairs - } - return nil -} - -func (m *RawBatchPutRequest) GetCf() string { - if m != nil { - return m.Cf - } - return "" -} - -type RawBatchPutResponse struct { - RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` -} - -func (m *RawBatchPutResponse) Reset() { *m = RawBatchPutResponse{} } -func (m *RawBatchPutResponse) String() string { return proto.CompactTextString(m) } -func (*RawBatchPutResponse) ProtoMessage() {} -func (*RawBatchPutResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{38} } - -func (m *RawBatchPutResponse) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *RawBatchPutResponse) GetError() string { - if m != nil { - return m.Error - } - return "" -} - -type RawBatchGetRequest struct { - Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` - Keys [][]byte `protobuf:"bytes,2,rep,name=keys" json:"keys,omitempty"` - Cf string `protobuf:"bytes,3,opt,name=cf,proto3" json:"cf,omitempty"` -} - -func (m *RawBatchGetRequest) Reset() { *m = RawBatchGetRequest{} } -func (m *RawBatchGetRequest) String() string { return proto.CompactTextString(m) } -func (*RawBatchGetRequest) ProtoMessage() {} -func (*RawBatchGetRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{39} } - -func (m *RawBatchGetRequest) GetContext() *Context { - if m != nil { - return m.Context - } - return nil -} - -func (m *RawBatchGetRequest) GetKeys() [][]byte { - if m != nil { - return m.Keys - } - return nil -} - -func (m *RawBatchGetRequest) GetCf() string { - if m != nil { - return m.Cf - } - return "" -} - -type RawBatchGetResponse struct { - RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Pairs []*KvPair `protobuf:"bytes,2,rep,name=pairs" json:"pairs,omitempty"` -} - -func (m *RawBatchGetResponse) Reset() { *m = RawBatchGetResponse{} } -func (m *RawBatchGetResponse) String() string { return proto.CompactTextString(m) } -func (*RawBatchGetResponse) ProtoMessage() {} -func (*RawBatchGetResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{40} } - -func (m *RawBatchGetResponse) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *RawBatchGetResponse) GetPairs() []*KvPair { - if m != nil { - return m.Pairs - } - return nil -} - -type RawDeleteRequest struct { - Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` - Key []byte `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` - Cf string `protobuf:"bytes,3,opt,name=cf,proto3" json:"cf,omitempty"` -} - -func (m *RawDeleteRequest) Reset() { *m = RawDeleteRequest{} } -func (m *RawDeleteRequest) String() string { return proto.CompactTextString(m) } -func (*RawDeleteRequest) ProtoMessage() {} -func (*RawDeleteRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{41} } - -func (m *RawDeleteRequest) GetContext() *Context { - if m != nil { - return m.Context - } - return nil -} - -func (m *RawDeleteRequest) GetKey() []byte { - if m != nil { - return m.Key - } - return nil -} - -func (m *RawDeleteRequest) GetCf() string { - if m != nil { - return m.Cf - } - return "" -} - -type RawDeleteResponse struct { - RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` -} - -func (m *RawDeleteResponse) Reset() { *m = RawDeleteResponse{} } -func (m *RawDeleteResponse) String() string { return proto.CompactTextString(m) } -func (*RawDeleteResponse) ProtoMessage() {} -func (*RawDeleteResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{42} } - -func (m *RawDeleteResponse) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *RawDeleteResponse) GetError() string { - if m != nil { - return m.Error - } - return "" -} - -type RawBatchDeleteRequest struct { - Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` - Keys [][]byte `protobuf:"bytes,2,rep,name=keys" json:"keys,omitempty"` - Cf string `protobuf:"bytes,3,opt,name=cf,proto3" json:"cf,omitempty"` -} - -func (m *RawBatchDeleteRequest) Reset() { *m = RawBatchDeleteRequest{} } -func (m *RawBatchDeleteRequest) String() string { return proto.CompactTextString(m) } -func (*RawBatchDeleteRequest) ProtoMessage() {} -func (*RawBatchDeleteRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{43} } - -func (m *RawBatchDeleteRequest) GetContext() *Context { - if m != nil { - return m.Context - } - return nil -} - -func (m *RawBatchDeleteRequest) GetKeys() [][]byte { - if m != nil { - return m.Keys - } - return nil -} - -func (m *RawBatchDeleteRequest) GetCf() string { - if m != nil { - return m.Cf - } - return "" -} - -type RawBatchDeleteResponse struct { - RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` -} - -func (m *RawBatchDeleteResponse) Reset() { *m = RawBatchDeleteResponse{} } -func (m *RawBatchDeleteResponse) String() string { return proto.CompactTextString(m) } -func (*RawBatchDeleteResponse) ProtoMessage() {} -func (*RawBatchDeleteResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{44} } - -func (m *RawBatchDeleteResponse) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *RawBatchDeleteResponse) GetError() string { - if m != nil { - return m.Error - } - return "" -} - -type DeleteRangeRequest struct { - Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` - StartKey []byte `protobuf:"bytes,2,opt,name=start_key,json=startKey,proto3" json:"start_key,omitempty"` - EndKey []byte `protobuf:"bytes,3,opt,name=end_key,json=endKey,proto3" json:"end_key,omitempty"` -} - -func (m *DeleteRangeRequest) Reset() { *m = DeleteRangeRequest{} } -func (m *DeleteRangeRequest) String() string { return proto.CompactTextString(m) } -func (*DeleteRangeRequest) ProtoMessage() {} -func (*DeleteRangeRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{45} } - -func (m *DeleteRangeRequest) GetContext() *Context { - if m != nil { - return m.Context - } - return nil -} - -func (m *DeleteRangeRequest) GetStartKey() []byte { - if m != nil { - return m.StartKey - } - return nil -} - -func (m *DeleteRangeRequest) GetEndKey() []byte { - if m != nil { - return m.EndKey - } - return nil -} - -type DeleteRangeResponse struct { - RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` -} - -func (m *DeleteRangeResponse) Reset() { *m = DeleteRangeResponse{} } -func (m *DeleteRangeResponse) String() string { return proto.CompactTextString(m) } -func (*DeleteRangeResponse) ProtoMessage() {} -func (*DeleteRangeResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{46} } - -func (m *DeleteRangeResponse) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *DeleteRangeResponse) GetError() string { - if m != nil { - return m.Error - } - return "" -} - -type RawDeleteRangeRequest struct { - Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` - StartKey []byte `protobuf:"bytes,2,opt,name=start_key,json=startKey,proto3" json:"start_key,omitempty"` - EndKey []byte `protobuf:"bytes,3,opt,name=end_key,json=endKey,proto3" json:"end_key,omitempty"` - Cf string `protobuf:"bytes,4,opt,name=cf,proto3" json:"cf,omitempty"` -} - -func (m *RawDeleteRangeRequest) Reset() { *m = RawDeleteRangeRequest{} } -func (m *RawDeleteRangeRequest) String() string { return proto.CompactTextString(m) } -func (*RawDeleteRangeRequest) ProtoMessage() {} -func (*RawDeleteRangeRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{47} } - -func (m *RawDeleteRangeRequest) GetContext() *Context { - if m != nil { - return m.Context - } - return nil -} - -func (m *RawDeleteRangeRequest) GetStartKey() []byte { - if m != nil { - return m.StartKey - } - return nil -} - -func (m *RawDeleteRangeRequest) GetEndKey() []byte { - if m != nil { - return m.EndKey - } - return nil -} - -func (m *RawDeleteRangeRequest) GetCf() string { - if m != nil { - return m.Cf - } - return "" -} - -type RawDeleteRangeResponse struct { - RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` -} - -func (m *RawDeleteRangeResponse) Reset() { *m = RawDeleteRangeResponse{} } -func (m *RawDeleteRangeResponse) String() string { return proto.CompactTextString(m) } -func (*RawDeleteRangeResponse) ProtoMessage() {} -func (*RawDeleteRangeResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{48} } - -func (m *RawDeleteRangeResponse) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *RawDeleteRangeResponse) GetError() string { - if m != nil { - return m.Error - } - return "" -} - -type RawScanRequest struct { - Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` - StartKey []byte `protobuf:"bytes,2,opt,name=start_key,json=startKey,proto3" json:"start_key,omitempty"` - Limit uint32 `protobuf:"varint,3,opt,name=limit,proto3" json:"limit,omitempty"` - KeyOnly bool `protobuf:"varint,4,opt,name=key_only,json=keyOnly,proto3" json:"key_only,omitempty"` - Cf string `protobuf:"bytes,5,opt,name=cf,proto3" json:"cf,omitempty"` -} - -func (m *RawScanRequest) Reset() { *m = RawScanRequest{} } -func (m *RawScanRequest) String() string { return proto.CompactTextString(m) } -func (*RawScanRequest) ProtoMessage() {} -func (*RawScanRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{49} } - -func (m *RawScanRequest) GetContext() *Context { - if m != nil { - return m.Context - } - return nil -} - -func (m *RawScanRequest) GetStartKey() []byte { - if m != nil { - return m.StartKey - } - return nil -} - -func (m *RawScanRequest) GetLimit() uint32 { - if m != nil { - return m.Limit - } - return 0 -} - -func (m *RawScanRequest) GetKeyOnly() bool { - if m != nil { - return m.KeyOnly - } - return false -} - -func (m *RawScanRequest) GetCf() string { - if m != nil { - return m.Cf - } - return "" -} - -type RawScanResponse struct { - RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Kvs []*KvPair `protobuf:"bytes,2,rep,name=kvs" json:"kvs,omitempty"` -} - -func (m *RawScanResponse) Reset() { *m = RawScanResponse{} } -func (m *RawScanResponse) String() string { return proto.CompactTextString(m) } -func (*RawScanResponse) ProtoMessage() {} -func (*RawScanResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{50} } - -func (m *RawScanResponse) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *RawScanResponse) GetKvs() []*KvPair { - if m != nil { - return m.Kvs - } - return nil -} - -type KeyRange struct { - StartKey []byte `protobuf:"bytes,1,opt,name=start_key,json=startKey,proto3" json:"start_key,omitempty"` - EndKey []byte `protobuf:"bytes,2,opt,name=end_key,json=endKey,proto3" json:"end_key,omitempty"` -} - -func (m *KeyRange) Reset() { *m = KeyRange{} } -func (m *KeyRange) String() string { return proto.CompactTextString(m) } -func (*KeyRange) ProtoMessage() {} -func (*KeyRange) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{51} } - -func (m *KeyRange) GetStartKey() []byte { - if m != nil { - return m.StartKey - } - return nil -} - -func (m *KeyRange) GetEndKey() []byte { - if m != nil { - return m.EndKey - } - return nil -} - -type RawBatchScanRequest struct { - Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` - Ranges []*KeyRange `protobuf:"bytes,2,rep,name=ranges" json:"ranges,omitempty"` - EachLimit uint32 `protobuf:"varint,3,opt,name=each_limit,json=eachLimit,proto3" json:"each_limit,omitempty"` - KeyOnly bool `protobuf:"varint,4,opt,name=key_only,json=keyOnly,proto3" json:"key_only,omitempty"` - Cf string `protobuf:"bytes,5,opt,name=cf,proto3" json:"cf,omitempty"` -} - -func (m *RawBatchScanRequest) Reset() { *m = RawBatchScanRequest{} } -func (m *RawBatchScanRequest) String() string { return proto.CompactTextString(m) } -func (*RawBatchScanRequest) ProtoMessage() {} -func (*RawBatchScanRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{52} } - -func (m *RawBatchScanRequest) GetContext() *Context { - if m != nil { - return m.Context - } - return nil -} - -func (m *RawBatchScanRequest) GetRanges() []*KeyRange { - if m != nil { - return m.Ranges - } - return nil -} - -func (m *RawBatchScanRequest) GetEachLimit() uint32 { - if m != nil { - return m.EachLimit - } - return 0 -} - -func (m *RawBatchScanRequest) GetKeyOnly() bool { - if m != nil { - return m.KeyOnly - } - return false -} - -func (m *RawBatchScanRequest) GetCf() string { - if m != nil { - return m.Cf - } - return "" -} - -type RawBatchScanResponse struct { - RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Kvs []*KvPair `protobuf:"bytes,2,rep,name=kvs" json:"kvs,omitempty"` -} - -func (m *RawBatchScanResponse) Reset() { *m = RawBatchScanResponse{} } -func (m *RawBatchScanResponse) String() string { return proto.CompactTextString(m) } -func (*RawBatchScanResponse) ProtoMessage() {} -func (*RawBatchScanResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{53} } - -func (m *RawBatchScanResponse) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *RawBatchScanResponse) GetKvs() []*KvPair { - if m != nil { - return m.Kvs - } - return nil -} - -type MvccWrite struct { - Type Op `protobuf:"varint,1,opt,name=type,proto3,enum=kvrpcpb.Op" json:"type,omitempty"` - StartTs uint64 `protobuf:"varint,2,opt,name=start_ts,json=startTs,proto3" json:"start_ts,omitempty"` - CommitTs uint64 `protobuf:"varint,3,opt,name=commit_ts,json=commitTs,proto3" json:"commit_ts,omitempty"` - ShortValue []byte `protobuf:"bytes,4,opt,name=short_value,json=shortValue,proto3" json:"short_value,omitempty"` -} - -func (m *MvccWrite) Reset() { *m = MvccWrite{} } -func (m *MvccWrite) String() string { return proto.CompactTextString(m) } -func (*MvccWrite) ProtoMessage() {} -func (*MvccWrite) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{54} } - -func (m *MvccWrite) GetType() Op { - if m != nil { - return m.Type - } - return Op_Put -} - -func (m *MvccWrite) GetStartTs() uint64 { - if m != nil { - return m.StartTs - } - return 0 -} - -func (m *MvccWrite) GetCommitTs() uint64 { - if m != nil { - return m.CommitTs - } - return 0 -} - -func (m *MvccWrite) GetShortValue() []byte { - if m != nil { - return m.ShortValue - } - return nil -} - -type MvccValue struct { - StartTs uint64 `protobuf:"varint,1,opt,name=start_ts,json=startTs,proto3" json:"start_ts,omitempty"` - Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` -} - -func (m *MvccValue) Reset() { *m = MvccValue{} } -func (m *MvccValue) String() string { return proto.CompactTextString(m) } -func (*MvccValue) ProtoMessage() {} -func (*MvccValue) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{55} } - -func (m *MvccValue) GetStartTs() uint64 { - if m != nil { - return m.StartTs - } - return 0 -} - -func (m *MvccValue) GetValue() []byte { - if m != nil { - return m.Value - } - return nil -} - -type MvccLock struct { - Type Op `protobuf:"varint,1,opt,name=type,proto3,enum=kvrpcpb.Op" json:"type,omitempty"` - StartTs uint64 `protobuf:"varint,2,opt,name=start_ts,json=startTs,proto3" json:"start_ts,omitempty"` - Primary []byte `protobuf:"bytes,3,opt,name=primary,proto3" json:"primary,omitempty"` - ShortValue []byte `protobuf:"bytes,4,opt,name=short_value,json=shortValue,proto3" json:"short_value,omitempty"` -} - -func (m *MvccLock) Reset() { *m = MvccLock{} } -func (m *MvccLock) String() string { return proto.CompactTextString(m) } -func (*MvccLock) ProtoMessage() {} -func (*MvccLock) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{56} } - -func (m *MvccLock) GetType() Op { - if m != nil { - return m.Type - } - return Op_Put -} - -func (m *MvccLock) GetStartTs() uint64 { - if m != nil { - return m.StartTs - } - return 0 -} - -func (m *MvccLock) GetPrimary() []byte { - if m != nil { - return m.Primary - } - return nil -} - -func (m *MvccLock) GetShortValue() []byte { - if m != nil { - return m.ShortValue - } - return nil -} - -type MvccInfo struct { - Lock *MvccLock `protobuf:"bytes,1,opt,name=lock" json:"lock,omitempty"` - Writes []*MvccWrite `protobuf:"bytes,2,rep,name=writes" json:"writes,omitempty"` - Values []*MvccValue `protobuf:"bytes,3,rep,name=values" json:"values,omitempty"` -} - -func (m *MvccInfo) Reset() { *m = MvccInfo{} } -func (m *MvccInfo) String() string { return proto.CompactTextString(m) } -func (*MvccInfo) ProtoMessage() {} -func (*MvccInfo) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{57} } - -func (m *MvccInfo) GetLock() *MvccLock { - if m != nil { - return m.Lock - } - return nil -} - -func (m *MvccInfo) GetWrites() []*MvccWrite { - if m != nil { - return m.Writes - } - return nil -} - -func (m *MvccInfo) GetValues() []*MvccValue { - if m != nil { - return m.Values - } - return nil -} - -type MvccGetByKeyRequest struct { - Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` - Key []byte `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` -} - -func (m *MvccGetByKeyRequest) Reset() { *m = MvccGetByKeyRequest{} } -func (m *MvccGetByKeyRequest) String() string { return proto.CompactTextString(m) } -func (*MvccGetByKeyRequest) ProtoMessage() {} -func (*MvccGetByKeyRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{58} } - -func (m *MvccGetByKeyRequest) GetContext() *Context { - if m != nil { - return m.Context - } - return nil -} - -func (m *MvccGetByKeyRequest) GetKey() []byte { - if m != nil { - return m.Key - } - return nil -} - -type MvccGetByKeyResponse struct { - RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` - Info *MvccInfo `protobuf:"bytes,3,opt,name=info" json:"info,omitempty"` -} - -func (m *MvccGetByKeyResponse) Reset() { *m = MvccGetByKeyResponse{} } -func (m *MvccGetByKeyResponse) String() string { return proto.CompactTextString(m) } -func (*MvccGetByKeyResponse) ProtoMessage() {} -func (*MvccGetByKeyResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{59} } - -func (m *MvccGetByKeyResponse) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *MvccGetByKeyResponse) GetError() string { - if m != nil { - return m.Error - } - return "" -} - -func (m *MvccGetByKeyResponse) GetInfo() *MvccInfo { - if m != nil { - return m.Info - } - return nil -} - -type MvccGetByStartTsRequest struct { - Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` - StartTs uint64 `protobuf:"varint,2,opt,name=start_ts,json=startTs,proto3" json:"start_ts,omitempty"` -} - -func (m *MvccGetByStartTsRequest) Reset() { *m = MvccGetByStartTsRequest{} } -func (m *MvccGetByStartTsRequest) String() string { return proto.CompactTextString(m) } -func (*MvccGetByStartTsRequest) ProtoMessage() {} -func (*MvccGetByStartTsRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{60} } - -func (m *MvccGetByStartTsRequest) GetContext() *Context { - if m != nil { - return m.Context - } - return nil -} - -func (m *MvccGetByStartTsRequest) GetStartTs() uint64 { - if m != nil { - return m.StartTs - } - return 0 -} - -type MvccGetByStartTsResponse struct { - RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` - Key []byte `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"` - Info *MvccInfo `protobuf:"bytes,4,opt,name=info" json:"info,omitempty"` -} - -func (m *MvccGetByStartTsResponse) Reset() { *m = MvccGetByStartTsResponse{} } -func (m *MvccGetByStartTsResponse) String() string { return proto.CompactTextString(m) } -func (*MvccGetByStartTsResponse) ProtoMessage() {} -func (*MvccGetByStartTsResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{61} } - -func (m *MvccGetByStartTsResponse) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *MvccGetByStartTsResponse) GetError() string { - if m != nil { - return m.Error - } - return "" -} - -func (m *MvccGetByStartTsResponse) GetKey() []byte { - if m != nil { - return m.Key - } - return nil -} - -func (m *MvccGetByStartTsResponse) GetInfo() *MvccInfo { - if m != nil { - return m.Info - } - return nil -} - -type SplitRegionRequest struct { - Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` - SplitKey []byte `protobuf:"bytes,2,opt,name=split_key,json=splitKey,proto3" json:"split_key,omitempty"` -} - -func (m *SplitRegionRequest) Reset() { *m = SplitRegionRequest{} } -func (m *SplitRegionRequest) String() string { return proto.CompactTextString(m) } -func (*SplitRegionRequest) ProtoMessage() {} -func (*SplitRegionRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{62} } - -func (m *SplitRegionRequest) GetContext() *Context { - if m != nil { - return m.Context - } - return nil -} - -func (m *SplitRegionRequest) GetSplitKey() []byte { - if m != nil { - return m.SplitKey - } - return nil -} - -type SplitRegionResponse struct { - RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"` - Left *metapb.Region `protobuf:"bytes,2,opt,name=left" json:"left,omitempty"` - Right *metapb.Region `protobuf:"bytes,3,opt,name=right" json:"right,omitempty"` -} - -func (m *SplitRegionResponse) Reset() { *m = SplitRegionResponse{} } -func (m *SplitRegionResponse) String() string { return proto.CompactTextString(m) } -func (*SplitRegionResponse) ProtoMessage() {} -func (*SplitRegionResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{63} } - -func (m *SplitRegionResponse) GetRegionError() *errorpb.Error { - if m != nil { - return m.RegionError - } - return nil -} - -func (m *SplitRegionResponse) GetLeft() *metapb.Region { - if m != nil { - return m.Left - } - return nil -} - -func (m *SplitRegionResponse) GetRight() *metapb.Region { - if m != nil { - return m.Right - } - return nil -} - -func init() { - proto.RegisterType((*LockInfo)(nil), "kvrpcpb.LockInfo") - proto.RegisterType((*KeyError)(nil), "kvrpcpb.KeyError") - proto.RegisterType((*WriteConflict)(nil), "kvrpcpb.WriteConflict") - proto.RegisterType((*Context)(nil), "kvrpcpb.Context") - proto.RegisterType((*HandleTime)(nil), "kvrpcpb.HandleTime") - proto.RegisterType((*ScanInfo)(nil), "kvrpcpb.ScanInfo") - proto.RegisterType((*ScanDetail)(nil), "kvrpcpb.ScanDetail") - proto.RegisterType((*ExecDetails)(nil), "kvrpcpb.ExecDetails") - proto.RegisterType((*GetRequest)(nil), "kvrpcpb.GetRequest") - proto.RegisterType((*GetResponse)(nil), "kvrpcpb.GetResponse") - proto.RegisterType((*ScanRequest)(nil), "kvrpcpb.ScanRequest") - proto.RegisterType((*KvPair)(nil), "kvrpcpb.KvPair") - proto.RegisterType((*ScanResponse)(nil), "kvrpcpb.ScanResponse") - proto.RegisterType((*Mutation)(nil), "kvrpcpb.Mutation") - proto.RegisterType((*PrewriteRequest)(nil), "kvrpcpb.PrewriteRequest") - proto.RegisterType((*PrewriteResponse)(nil), "kvrpcpb.PrewriteResponse") - proto.RegisterType((*CommitRequest)(nil), "kvrpcpb.CommitRequest") - proto.RegisterType((*CommitResponse)(nil), "kvrpcpb.CommitResponse") - proto.RegisterType((*ImportRequest)(nil), "kvrpcpb.ImportRequest") - proto.RegisterType((*ImportResponse)(nil), "kvrpcpb.ImportResponse") - proto.RegisterType((*BatchRollbackRequest)(nil), "kvrpcpb.BatchRollbackRequest") - proto.RegisterType((*BatchRollbackResponse)(nil), "kvrpcpb.BatchRollbackResponse") - proto.RegisterType((*CleanupRequest)(nil), "kvrpcpb.CleanupRequest") - proto.RegisterType((*CleanupResponse)(nil), "kvrpcpb.CleanupResponse") - proto.RegisterType((*BatchGetRequest)(nil), "kvrpcpb.BatchGetRequest") - proto.RegisterType((*BatchGetResponse)(nil), "kvrpcpb.BatchGetResponse") - proto.RegisterType((*ScanLockRequest)(nil), "kvrpcpb.ScanLockRequest") - proto.RegisterType((*ScanLockResponse)(nil), "kvrpcpb.ScanLockResponse") - proto.RegisterType((*TxnInfo)(nil), "kvrpcpb.TxnInfo") - proto.RegisterType((*ResolveLockRequest)(nil), "kvrpcpb.ResolveLockRequest") - proto.RegisterType((*ResolveLockResponse)(nil), "kvrpcpb.ResolveLockResponse") - proto.RegisterType((*GCRequest)(nil), "kvrpcpb.GCRequest") - proto.RegisterType((*GCResponse)(nil), "kvrpcpb.GCResponse") - proto.RegisterType((*RawGetRequest)(nil), "kvrpcpb.RawGetRequest") - proto.RegisterType((*RawGetResponse)(nil), "kvrpcpb.RawGetResponse") - proto.RegisterType((*RawPutRequest)(nil), "kvrpcpb.RawPutRequest") - proto.RegisterType((*RawPutResponse)(nil), "kvrpcpb.RawPutResponse") - proto.RegisterType((*RawBatchPutRequest)(nil), "kvrpcpb.RawBatchPutRequest") - proto.RegisterType((*RawBatchPutResponse)(nil), "kvrpcpb.RawBatchPutResponse") - proto.RegisterType((*RawBatchGetRequest)(nil), "kvrpcpb.RawBatchGetRequest") - proto.RegisterType((*RawBatchGetResponse)(nil), "kvrpcpb.RawBatchGetResponse") - proto.RegisterType((*RawDeleteRequest)(nil), "kvrpcpb.RawDeleteRequest") - proto.RegisterType((*RawDeleteResponse)(nil), "kvrpcpb.RawDeleteResponse") - proto.RegisterType((*RawBatchDeleteRequest)(nil), "kvrpcpb.RawBatchDeleteRequest") - proto.RegisterType((*RawBatchDeleteResponse)(nil), "kvrpcpb.RawBatchDeleteResponse") - proto.RegisterType((*DeleteRangeRequest)(nil), "kvrpcpb.DeleteRangeRequest") - proto.RegisterType((*DeleteRangeResponse)(nil), "kvrpcpb.DeleteRangeResponse") - proto.RegisterType((*RawDeleteRangeRequest)(nil), "kvrpcpb.RawDeleteRangeRequest") - proto.RegisterType((*RawDeleteRangeResponse)(nil), "kvrpcpb.RawDeleteRangeResponse") - proto.RegisterType((*RawScanRequest)(nil), "kvrpcpb.RawScanRequest") - proto.RegisterType((*RawScanResponse)(nil), "kvrpcpb.RawScanResponse") - proto.RegisterType((*KeyRange)(nil), "kvrpcpb.KeyRange") - proto.RegisterType((*RawBatchScanRequest)(nil), "kvrpcpb.RawBatchScanRequest") - proto.RegisterType((*RawBatchScanResponse)(nil), "kvrpcpb.RawBatchScanResponse") - proto.RegisterType((*MvccWrite)(nil), "kvrpcpb.MvccWrite") - proto.RegisterType((*MvccValue)(nil), "kvrpcpb.MvccValue") - proto.RegisterType((*MvccLock)(nil), "kvrpcpb.MvccLock") - proto.RegisterType((*MvccInfo)(nil), "kvrpcpb.MvccInfo") - proto.RegisterType((*MvccGetByKeyRequest)(nil), "kvrpcpb.MvccGetByKeyRequest") - proto.RegisterType((*MvccGetByKeyResponse)(nil), "kvrpcpb.MvccGetByKeyResponse") - proto.RegisterType((*MvccGetByStartTsRequest)(nil), "kvrpcpb.MvccGetByStartTsRequest") - proto.RegisterType((*MvccGetByStartTsResponse)(nil), "kvrpcpb.MvccGetByStartTsResponse") - proto.RegisterType((*SplitRegionRequest)(nil), "kvrpcpb.SplitRegionRequest") - proto.RegisterType((*SplitRegionResponse)(nil), "kvrpcpb.SplitRegionResponse") - proto.RegisterEnum("kvrpcpb.CommandPri", CommandPri_name, CommandPri_value) - proto.RegisterEnum("kvrpcpb.IsolationLevel", IsolationLevel_name, IsolationLevel_value) - proto.RegisterEnum("kvrpcpb.Op", Op_name, Op_value) -} -func (m *LockInfo) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *LockInfo) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.PrimaryLock) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.PrimaryLock))) - i += copy(dAtA[i:], m.PrimaryLock) - } - if m.LockVersion != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.LockVersion)) - } - if len(m.Key) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - } - if m.LockTtl != 0 { - dAtA[i] = 0x20 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.LockTtl)) - } - return i, nil -} - -func (m *KeyError) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *KeyError) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Locked != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Locked.Size())) - n1, err := m.Locked.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if len(m.Retryable) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Retryable))) - i += copy(dAtA[i:], m.Retryable) - } - if len(m.Abort) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Abort))) - i += copy(dAtA[i:], m.Abort) - } - if m.Conflict != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Conflict.Size())) - n2, err := m.Conflict.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - return i, nil -} - -func (m *WriteConflict) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *WriteConflict) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.StartTs != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.StartTs)) - } - if m.ConflictTs != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.ConflictTs)) - } - if len(m.Key) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - } - if len(m.Primary) > 0 { - dAtA[i] = 0x22 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Primary))) - i += copy(dAtA[i:], m.Primary) - } - return i, nil -} - -func (m *Context) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Context) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionId != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionId)) - } - if m.RegionEpoch != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionEpoch.Size())) - n3, err := m.RegionEpoch.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.Peer != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Peer.Size())) - n4, err := m.Peer.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if m.Term != 0 { - dAtA[i] = 0x28 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Term)) - } - if m.Priority != 0 { - dAtA[i] = 0x30 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Priority)) - } - if m.IsolationLevel != 0 { - dAtA[i] = 0x38 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.IsolationLevel)) - } - if m.NotFillCache { - dAtA[i] = 0x40 - i++ - if m.NotFillCache { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.SyncLog { - dAtA[i] = 0x48 - i++ - if m.SyncLog { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.HandleTime { - dAtA[i] = 0x50 - i++ - if m.HandleTime { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.ScanDetail { - dAtA[i] = 0x58 - i++ - if m.ScanDetail { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - return i, nil -} - -func (m *HandleTime) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HandleTime) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.WaitMs != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.WaitMs)) - } - if m.ProcessMs != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.ProcessMs)) - } - return i, nil -} - -func (m *ScanInfo) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ScanInfo) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Total != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Total)) - } - if m.Processed != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Processed)) - } - return i, nil -} - -func (m *ScanDetail) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ScanDetail) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Write != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Write.Size())) - n5, err := m.Write.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if m.Lock != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Lock.Size())) - n6, err := m.Lock.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - if m.Data != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Data.Size())) - n7, err := m.Data.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - } - return i, nil -} - -func (m *ExecDetails) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ExecDetails) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.HandleTime != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.HandleTime.Size())) - n8, err := m.HandleTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 - } - if m.ScanDetail != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.ScanDetail.Size())) - n9, err := m.ScanDetail.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 - } - return i, nil -} - -func (m *GetRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GetRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Context != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Context.Size())) - n10, err := m.Context.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 - } - if len(m.Key) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - } - if m.Version != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Version)) - } - return i, nil -} - -func (m *GetResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GetResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionError != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size())) - n11, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n11 - } - if m.Error != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Error.Size())) - n12, err := m.Error.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n12 - } - if len(m.Value) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Value))) - i += copy(dAtA[i:], m.Value) - } - return i, nil -} - -func (m *ScanRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ScanRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Context != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Context.Size())) - n13, err := m.Context.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n13 - } - if len(m.StartKey) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.StartKey))) - i += copy(dAtA[i:], m.StartKey) - } - if m.Limit != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Limit)) - } - if m.Version != 0 { - dAtA[i] = 0x20 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Version)) - } - if m.KeyOnly { - dAtA[i] = 0x28 - i++ - if m.KeyOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.Reverse { - dAtA[i] = 0x30 - i++ - if m.Reverse { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - return i, nil -} - -func (m *KvPair) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *KvPair) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Error != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Error.Size())) - n14, err := m.Error.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n14 - } - if len(m.Key) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - } - if len(m.Value) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Value))) - i += copy(dAtA[i:], m.Value) - } - return i, nil -} - -func (m *ScanResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ScanResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionError != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size())) - n15, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n15 - } - if len(m.Pairs) > 0 { - for _, msg := range m.Pairs { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *Mutation) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Mutation) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Op != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Op)) - } - if len(m.Key) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - } - if len(m.Value) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Value))) - i += copy(dAtA[i:], m.Value) - } - return i, nil -} - -func (m *PrewriteRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *PrewriteRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Context != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Context.Size())) - n16, err := m.Context.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n16 - } - if len(m.Mutations) > 0 { - for _, msg := range m.Mutations { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.PrimaryLock) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.PrimaryLock))) - i += copy(dAtA[i:], m.PrimaryLock) - } - if m.StartVersion != 0 { - dAtA[i] = 0x20 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.StartVersion)) - } - if m.LockTtl != 0 { - dAtA[i] = 0x28 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.LockTtl)) - } - if m.SkipConstraintCheck { - dAtA[i] = 0x30 - i++ - if m.SkipConstraintCheck { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - return i, nil -} - -func (m *PrewriteResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *PrewriteResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionError != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size())) - n17, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n17 - } - if len(m.Errors) > 0 { - for _, msg := range m.Errors { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *CommitRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *CommitRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Context != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Context.Size())) - n18, err := m.Context.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n18 - } - if m.StartVersion != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.StartVersion)) - } - if len(m.Keys) > 0 { - for _, b := range m.Keys { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(b))) - i += copy(dAtA[i:], b) - } - } - if m.CommitVersion != 0 { - dAtA[i] = 0x20 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.CommitVersion)) - } - return i, nil -} - -func (m *CommitResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *CommitResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionError != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size())) - n19, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n19 - } - if m.Error != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Error.Size())) - n20, err := m.Error.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n20 - } - return i, nil -} - -func (m *ImportRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ImportRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Mutations) > 0 { - for _, msg := range m.Mutations { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.CommitVersion != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.CommitVersion)) - } - return i, nil -} - -func (m *ImportResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ImportResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionError != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size())) - n21, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n21 - } - if len(m.Error) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Error))) - i += copy(dAtA[i:], m.Error) - } - return i, nil -} - -func (m *BatchRollbackRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *BatchRollbackRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Context != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Context.Size())) - n22, err := m.Context.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n22 - } - if m.StartVersion != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.StartVersion)) - } - if len(m.Keys) > 0 { - for _, b := range m.Keys { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(b))) - i += copy(dAtA[i:], b) - } - } - return i, nil -} - -func (m *BatchRollbackResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *BatchRollbackResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionError != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size())) - n23, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n23 - } - if m.Error != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Error.Size())) - n24, err := m.Error.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n24 - } - return i, nil -} - -func (m *CleanupRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *CleanupRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Context != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Context.Size())) - n25, err := m.Context.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n25 - } - if len(m.Key) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - } - if m.StartVersion != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.StartVersion)) - } - return i, nil -} - -func (m *CleanupResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *CleanupResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionError != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size())) - n26, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n26 - } - if m.Error != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Error.Size())) - n27, err := m.Error.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n27 - } - if m.CommitVersion != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.CommitVersion)) - } - return i, nil -} - -func (m *BatchGetRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *BatchGetRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Context != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Context.Size())) - n28, err := m.Context.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n28 - } - if len(m.Keys) > 0 { - for _, b := range m.Keys { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(b))) - i += copy(dAtA[i:], b) - } - } - if m.Version != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Version)) - } - return i, nil -} - -func (m *BatchGetResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *BatchGetResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionError != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size())) - n29, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n29 - } - if len(m.Pairs) > 0 { - for _, msg := range m.Pairs { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *ScanLockRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ScanLockRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Context != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Context.Size())) - n30, err := m.Context.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n30 - } - if m.MaxVersion != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.MaxVersion)) - } - if len(m.StartKey) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.StartKey))) - i += copy(dAtA[i:], m.StartKey) - } - if m.Limit != 0 { - dAtA[i] = 0x20 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Limit)) - } - return i, nil -} - -func (m *ScanLockResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ScanLockResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionError != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size())) - n31, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n31 - } - if m.Error != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Error.Size())) - n32, err := m.Error.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n32 - } - if len(m.Locks) > 0 { - for _, msg := range m.Locks { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *TxnInfo) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *TxnInfo) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Txn != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Txn)) - } - if m.Status != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Status)) - } - return i, nil -} - -func (m *ResolveLockRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ResolveLockRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Context != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Context.Size())) - n33, err := m.Context.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n33 - } - if m.StartVersion != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.StartVersion)) - } - if m.CommitVersion != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.CommitVersion)) - } - if len(m.TxnInfos) > 0 { - for _, msg := range m.TxnInfos { - dAtA[i] = 0x22 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *ResolveLockResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ResolveLockResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionError != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size())) - n34, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n34 - } - if m.Error != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Error.Size())) - n35, err := m.Error.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n35 - } - return i, nil -} - -func (m *GCRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GCRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Context != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Context.Size())) - n36, err := m.Context.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n36 - } - if m.SafePoint != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.SafePoint)) - } - return i, nil -} - -func (m *GCResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GCResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionError != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size())) - n37, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n37 - } - if m.Error != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Error.Size())) - n38, err := m.Error.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n38 - } - return i, nil -} - -func (m *RawGetRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RawGetRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Context != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Context.Size())) - n39, err := m.Context.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n39 - } - if len(m.Key) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - } - if len(m.Cf) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Cf))) - i += copy(dAtA[i:], m.Cf) - } - return i, nil -} - -func (m *RawGetResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RawGetResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionError != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size())) - n40, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n40 - } - if len(m.Error) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Error))) - i += copy(dAtA[i:], m.Error) - } - if len(m.Value) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Value))) - i += copy(dAtA[i:], m.Value) - } - return i, nil -} - -func (m *RawPutRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RawPutRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Context != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Context.Size())) - n41, err := m.Context.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n41 - } - if len(m.Key) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - } - if len(m.Value) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Value))) - i += copy(dAtA[i:], m.Value) - } - if len(m.Cf) > 0 { - dAtA[i] = 0x22 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Cf))) - i += copy(dAtA[i:], m.Cf) - } - return i, nil -} - -func (m *RawPutResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RawPutResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionError != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size())) - n42, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n42 - } - if len(m.Error) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Error))) - i += copy(dAtA[i:], m.Error) - } - return i, nil -} - -func (m *RawBatchPutRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RawBatchPutRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Context != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Context.Size())) - n43, err := m.Context.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n43 - } - if len(m.Pairs) > 0 { - for _, msg := range m.Pairs { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.Cf) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Cf))) - i += copy(dAtA[i:], m.Cf) - } - return i, nil -} - -func (m *RawBatchPutResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RawBatchPutResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionError != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size())) - n44, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n44 - } - if len(m.Error) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Error))) - i += copy(dAtA[i:], m.Error) - } - return i, nil -} - -func (m *RawBatchGetRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RawBatchGetRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Context != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Context.Size())) - n45, err := m.Context.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n45 - } - if len(m.Keys) > 0 { - for _, b := range m.Keys { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(b))) - i += copy(dAtA[i:], b) - } - } - if len(m.Cf) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Cf))) - i += copy(dAtA[i:], m.Cf) - } - return i, nil -} - -func (m *RawBatchGetResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RawBatchGetResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionError != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size())) - n46, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n46 - } - if len(m.Pairs) > 0 { - for _, msg := range m.Pairs { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *RawDeleteRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RawDeleteRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Context != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Context.Size())) - n47, err := m.Context.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n47 - } - if len(m.Key) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - } - if len(m.Cf) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Cf))) - i += copy(dAtA[i:], m.Cf) - } - return i, nil -} - -func (m *RawDeleteResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RawDeleteResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionError != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size())) - n48, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n48 - } - if len(m.Error) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Error))) - i += copy(dAtA[i:], m.Error) - } - return i, nil -} - -func (m *RawBatchDeleteRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RawBatchDeleteRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Context != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Context.Size())) - n49, err := m.Context.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n49 - } - if len(m.Keys) > 0 { - for _, b := range m.Keys { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(b))) - i += copy(dAtA[i:], b) - } - } - if len(m.Cf) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Cf))) - i += copy(dAtA[i:], m.Cf) - } - return i, nil -} - -func (m *RawBatchDeleteResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RawBatchDeleteResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionError != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size())) - n50, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n50 - } - if len(m.Error) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Error))) - i += copy(dAtA[i:], m.Error) - } - return i, nil -} - -func (m *DeleteRangeRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *DeleteRangeRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Context != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Context.Size())) - n51, err := m.Context.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n51 - } - if len(m.StartKey) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.StartKey))) - i += copy(dAtA[i:], m.StartKey) - } - if len(m.EndKey) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.EndKey))) - i += copy(dAtA[i:], m.EndKey) - } - return i, nil -} - -func (m *DeleteRangeResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *DeleteRangeResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionError != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size())) - n52, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n52 - } - if len(m.Error) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Error))) - i += copy(dAtA[i:], m.Error) - } - return i, nil -} - -func (m *RawDeleteRangeRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RawDeleteRangeRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Context != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Context.Size())) - n53, err := m.Context.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n53 - } - if len(m.StartKey) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.StartKey))) - i += copy(dAtA[i:], m.StartKey) - } - if len(m.EndKey) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.EndKey))) - i += copy(dAtA[i:], m.EndKey) - } - if len(m.Cf) > 0 { - dAtA[i] = 0x22 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Cf))) - i += copy(dAtA[i:], m.Cf) - } - return i, nil -} - -func (m *RawDeleteRangeResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RawDeleteRangeResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionError != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size())) - n54, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n54 - } - if len(m.Error) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Error))) - i += copy(dAtA[i:], m.Error) - } - return i, nil -} - -func (m *RawScanRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RawScanRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Context != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Context.Size())) - n55, err := m.Context.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n55 - } - if len(m.StartKey) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.StartKey))) - i += copy(dAtA[i:], m.StartKey) - } - if m.Limit != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Limit)) - } - if m.KeyOnly { - dAtA[i] = 0x20 - i++ - if m.KeyOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if len(m.Cf) > 0 { - dAtA[i] = 0x2a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Cf))) - i += copy(dAtA[i:], m.Cf) - } - return i, nil -} - -func (m *RawScanResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RawScanResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionError != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size())) - n56, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n56 - } - if len(m.Kvs) > 0 { - for _, msg := range m.Kvs { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *KeyRange) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *KeyRange) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.StartKey) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.StartKey))) - i += copy(dAtA[i:], m.StartKey) - } - if len(m.EndKey) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.EndKey))) - i += copy(dAtA[i:], m.EndKey) - } - return i, nil -} - -func (m *RawBatchScanRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RawBatchScanRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Context != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Context.Size())) - n57, err := m.Context.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n57 - } - if len(m.Ranges) > 0 { - for _, msg := range m.Ranges { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.EachLimit != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.EachLimit)) - } - if m.KeyOnly { - dAtA[i] = 0x20 - i++ - if m.KeyOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if len(m.Cf) > 0 { - dAtA[i] = 0x2a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Cf))) - i += copy(dAtA[i:], m.Cf) - } - return i, nil -} - -func (m *RawBatchScanResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RawBatchScanResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionError != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size())) - n58, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n58 - } - if len(m.Kvs) > 0 { - for _, msg := range m.Kvs { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *MvccWrite) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MvccWrite) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Type != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Type)) - } - if m.StartTs != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.StartTs)) - } - if m.CommitTs != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.CommitTs)) - } - if len(m.ShortValue) > 0 { - dAtA[i] = 0x22 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.ShortValue))) - i += copy(dAtA[i:], m.ShortValue) - } - return i, nil -} - -func (m *MvccValue) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MvccValue) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.StartTs != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.StartTs)) - } - if len(m.Value) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Value))) - i += copy(dAtA[i:], m.Value) - } - return i, nil -} - -func (m *MvccLock) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MvccLock) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Type != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Type)) - } - if m.StartTs != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.StartTs)) - } - if len(m.Primary) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Primary))) - i += copy(dAtA[i:], m.Primary) - } - if len(m.ShortValue) > 0 { - dAtA[i] = 0x22 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.ShortValue))) - i += copy(dAtA[i:], m.ShortValue) - } - return i, nil -} - -func (m *MvccInfo) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MvccInfo) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Lock != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Lock.Size())) - n59, err := m.Lock.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n59 - } - if len(m.Writes) > 0 { - for _, msg := range m.Writes { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.Values) > 0 { - for _, msg := range m.Values { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *MvccGetByKeyRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MvccGetByKeyRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Context != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Context.Size())) - n60, err := m.Context.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n60 - } - if len(m.Key) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - } - return i, nil -} - -func (m *MvccGetByKeyResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MvccGetByKeyResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionError != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size())) - n61, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n61 - } - if len(m.Error) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Error))) - i += copy(dAtA[i:], m.Error) - } - if m.Info != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Info.Size())) - n62, err := m.Info.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n62 - } - return i, nil -} - -func (m *MvccGetByStartTsRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MvccGetByStartTsRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Context != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Context.Size())) - n63, err := m.Context.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n63 - } - if m.StartTs != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.StartTs)) - } - return i, nil -} - -func (m *MvccGetByStartTsResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MvccGetByStartTsResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionError != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size())) - n64, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n64 - } - if len(m.Error) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Error))) - i += copy(dAtA[i:], m.Error) - } - if len(m.Key) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - } - if m.Info != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Info.Size())) - n65, err := m.Info.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n65 - } - return i, nil -} - -func (m *SplitRegionRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *SplitRegionRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Context != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Context.Size())) - n66, err := m.Context.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n66 - } - if len(m.SplitKey) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.SplitKey))) - i += copy(dAtA[i:], m.SplitKey) - } - return i, nil -} - -func (m *SplitRegionResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *SplitRegionResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionError != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size())) - n67, err := m.RegionError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n67 - } - if m.Left != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Left.Size())) - n68, err := m.Left.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n68 - } - if m.Right != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Right.Size())) - n69, err := m.Right.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n69 - } - return i, nil -} - -func encodeFixed64Kvrpcpb(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Kvrpcpb(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintKvrpcpb(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *LockInfo) Size() (n int) { - var l int - _ = l - l = len(m.PrimaryLock) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.LockVersion != 0 { - n += 1 + sovKvrpcpb(uint64(m.LockVersion)) - } - l = len(m.Key) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.LockTtl != 0 { - n += 1 + sovKvrpcpb(uint64(m.LockTtl)) - } - return n -} - -func (m *KeyError) Size() (n int) { - var l int - _ = l - if m.Locked != nil { - l = m.Locked.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Retryable) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Abort) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.Conflict != nil { - l = m.Conflict.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *WriteConflict) Size() (n int) { - var l int - _ = l - if m.StartTs != 0 { - n += 1 + sovKvrpcpb(uint64(m.StartTs)) - } - if m.ConflictTs != 0 { - n += 1 + sovKvrpcpb(uint64(m.ConflictTs)) - } - l = len(m.Key) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Primary) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *Context) Size() (n int) { - var l int - _ = l - if m.RegionId != 0 { - n += 1 + sovKvrpcpb(uint64(m.RegionId)) - } - if m.RegionEpoch != nil { - l = m.RegionEpoch.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.Peer != nil { - l = m.Peer.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.Term != 0 { - n += 1 + sovKvrpcpb(uint64(m.Term)) - } - if m.Priority != 0 { - n += 1 + sovKvrpcpb(uint64(m.Priority)) - } - if m.IsolationLevel != 0 { - n += 1 + sovKvrpcpb(uint64(m.IsolationLevel)) - } - if m.NotFillCache { - n += 2 - } - if m.SyncLog { - n += 2 - } - if m.HandleTime { - n += 2 - } - if m.ScanDetail { - n += 2 - } - return n -} - -func (m *HandleTime) Size() (n int) { - var l int - _ = l - if m.WaitMs != 0 { - n += 1 + sovKvrpcpb(uint64(m.WaitMs)) - } - if m.ProcessMs != 0 { - n += 1 + sovKvrpcpb(uint64(m.ProcessMs)) - } - return n -} - -func (m *ScanInfo) Size() (n int) { - var l int - _ = l - if m.Total != 0 { - n += 1 + sovKvrpcpb(uint64(m.Total)) - } - if m.Processed != 0 { - n += 1 + sovKvrpcpb(uint64(m.Processed)) - } - return n -} - -func (m *ScanDetail) Size() (n int) { - var l int - _ = l - if m.Write != nil { - l = m.Write.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.Lock != nil { - l = m.Lock.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.Data != nil { - l = m.Data.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *ExecDetails) Size() (n int) { - var l int - _ = l - if m.HandleTime != nil { - l = m.HandleTime.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.ScanDetail != nil { - l = m.ScanDetail.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *GetRequest) Size() (n int) { - var l int - _ = l - if m.Context != nil { - l = m.Context.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Key) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.Version != 0 { - n += 1 + sovKvrpcpb(uint64(m.Version)) - } - return n -} - -func (m *GetResponse) Size() (n int) { - var l int - _ = l - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.Error != nil { - l = m.Error.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Value) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *ScanRequest) Size() (n int) { - var l int - _ = l - if m.Context != nil { - l = m.Context.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.StartKey) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.Limit != 0 { - n += 1 + sovKvrpcpb(uint64(m.Limit)) - } - if m.Version != 0 { - n += 1 + sovKvrpcpb(uint64(m.Version)) - } - if m.KeyOnly { - n += 2 - } - if m.Reverse { - n += 2 - } - return n -} - -func (m *KvPair) Size() (n int) { - var l int - _ = l - if m.Error != nil { - l = m.Error.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Key) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Value) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *ScanResponse) Size() (n int) { - var l int - _ = l - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if len(m.Pairs) > 0 { - for _, e := range m.Pairs { - l = e.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - } - return n -} - -func (m *Mutation) Size() (n int) { - var l int - _ = l - if m.Op != 0 { - n += 1 + sovKvrpcpb(uint64(m.Op)) - } - l = len(m.Key) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Value) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *PrewriteRequest) Size() (n int) { - var l int - _ = l - if m.Context != nil { - l = m.Context.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if len(m.Mutations) > 0 { - for _, e := range m.Mutations { - l = e.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - } - l = len(m.PrimaryLock) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.StartVersion != 0 { - n += 1 + sovKvrpcpb(uint64(m.StartVersion)) - } - if m.LockTtl != 0 { - n += 1 + sovKvrpcpb(uint64(m.LockTtl)) - } - if m.SkipConstraintCheck { - n += 2 - } - return n -} - -func (m *PrewriteResponse) Size() (n int) { - var l int - _ = l - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if len(m.Errors) > 0 { - for _, e := range m.Errors { - l = e.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - } - return n -} - -func (m *CommitRequest) Size() (n int) { - var l int - _ = l - if m.Context != nil { - l = m.Context.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.StartVersion != 0 { - n += 1 + sovKvrpcpb(uint64(m.StartVersion)) - } - if len(m.Keys) > 0 { - for _, b := range m.Keys { - l = len(b) - n += 1 + l + sovKvrpcpb(uint64(l)) - } - } - if m.CommitVersion != 0 { - n += 1 + sovKvrpcpb(uint64(m.CommitVersion)) - } - return n -} - -func (m *CommitResponse) Size() (n int) { - var l int - _ = l - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.Error != nil { - l = m.Error.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *ImportRequest) Size() (n int) { - var l int - _ = l - if len(m.Mutations) > 0 { - for _, e := range m.Mutations { - l = e.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - } - if m.CommitVersion != 0 { - n += 1 + sovKvrpcpb(uint64(m.CommitVersion)) - } - return n -} - -func (m *ImportResponse) Size() (n int) { - var l int - _ = l - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Error) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *BatchRollbackRequest) Size() (n int) { - var l int - _ = l - if m.Context != nil { - l = m.Context.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.StartVersion != 0 { - n += 1 + sovKvrpcpb(uint64(m.StartVersion)) - } - if len(m.Keys) > 0 { - for _, b := range m.Keys { - l = len(b) - n += 1 + l + sovKvrpcpb(uint64(l)) - } - } - return n -} - -func (m *BatchRollbackResponse) Size() (n int) { - var l int - _ = l - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.Error != nil { - l = m.Error.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *CleanupRequest) Size() (n int) { - var l int - _ = l - if m.Context != nil { - l = m.Context.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Key) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.StartVersion != 0 { - n += 1 + sovKvrpcpb(uint64(m.StartVersion)) - } - return n -} - -func (m *CleanupResponse) Size() (n int) { - var l int - _ = l - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.Error != nil { - l = m.Error.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.CommitVersion != 0 { - n += 1 + sovKvrpcpb(uint64(m.CommitVersion)) - } - return n -} - -func (m *BatchGetRequest) Size() (n int) { - var l int - _ = l - if m.Context != nil { - l = m.Context.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if len(m.Keys) > 0 { - for _, b := range m.Keys { - l = len(b) - n += 1 + l + sovKvrpcpb(uint64(l)) - } - } - if m.Version != 0 { - n += 1 + sovKvrpcpb(uint64(m.Version)) - } - return n -} - -func (m *BatchGetResponse) Size() (n int) { - var l int - _ = l - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if len(m.Pairs) > 0 { - for _, e := range m.Pairs { - l = e.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - } - return n -} - -func (m *ScanLockRequest) Size() (n int) { - var l int - _ = l - if m.Context != nil { - l = m.Context.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.MaxVersion != 0 { - n += 1 + sovKvrpcpb(uint64(m.MaxVersion)) - } - l = len(m.StartKey) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.Limit != 0 { - n += 1 + sovKvrpcpb(uint64(m.Limit)) - } - return n -} - -func (m *ScanLockResponse) Size() (n int) { - var l int - _ = l - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.Error != nil { - l = m.Error.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if len(m.Locks) > 0 { - for _, e := range m.Locks { - l = e.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - } - return n -} - -func (m *TxnInfo) Size() (n int) { - var l int - _ = l - if m.Txn != 0 { - n += 1 + sovKvrpcpb(uint64(m.Txn)) - } - if m.Status != 0 { - n += 1 + sovKvrpcpb(uint64(m.Status)) - } - return n -} - -func (m *ResolveLockRequest) Size() (n int) { - var l int - _ = l - if m.Context != nil { - l = m.Context.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.StartVersion != 0 { - n += 1 + sovKvrpcpb(uint64(m.StartVersion)) - } - if m.CommitVersion != 0 { - n += 1 + sovKvrpcpb(uint64(m.CommitVersion)) - } - if len(m.TxnInfos) > 0 { - for _, e := range m.TxnInfos { - l = e.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - } - return n -} - -func (m *ResolveLockResponse) Size() (n int) { - var l int - _ = l - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.Error != nil { - l = m.Error.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *GCRequest) Size() (n int) { - var l int - _ = l - if m.Context != nil { - l = m.Context.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.SafePoint != 0 { - n += 1 + sovKvrpcpb(uint64(m.SafePoint)) - } - return n -} - -func (m *GCResponse) Size() (n int) { - var l int - _ = l - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.Error != nil { - l = m.Error.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *RawGetRequest) Size() (n int) { - var l int - _ = l - if m.Context != nil { - l = m.Context.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Key) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Cf) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *RawGetResponse) Size() (n int) { - var l int - _ = l - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Error) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Value) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *RawPutRequest) Size() (n int) { - var l int - _ = l - if m.Context != nil { - l = m.Context.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Key) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Value) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Cf) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *RawPutResponse) Size() (n int) { - var l int - _ = l - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Error) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *RawBatchPutRequest) Size() (n int) { - var l int - _ = l - if m.Context != nil { - l = m.Context.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if len(m.Pairs) > 0 { - for _, e := range m.Pairs { - l = e.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - } - l = len(m.Cf) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *RawBatchPutResponse) Size() (n int) { - var l int - _ = l - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Error) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *RawBatchGetRequest) Size() (n int) { - var l int - _ = l - if m.Context != nil { - l = m.Context.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if len(m.Keys) > 0 { - for _, b := range m.Keys { - l = len(b) - n += 1 + l + sovKvrpcpb(uint64(l)) - } - } - l = len(m.Cf) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *RawBatchGetResponse) Size() (n int) { - var l int - _ = l - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if len(m.Pairs) > 0 { - for _, e := range m.Pairs { - l = e.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - } - return n -} - -func (m *RawDeleteRequest) Size() (n int) { - var l int - _ = l - if m.Context != nil { - l = m.Context.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Key) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Cf) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *RawDeleteResponse) Size() (n int) { - var l int - _ = l - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Error) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *RawBatchDeleteRequest) Size() (n int) { - var l int - _ = l - if m.Context != nil { - l = m.Context.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if len(m.Keys) > 0 { - for _, b := range m.Keys { - l = len(b) - n += 1 + l + sovKvrpcpb(uint64(l)) - } - } - l = len(m.Cf) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *RawBatchDeleteResponse) Size() (n int) { - var l int - _ = l - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Error) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *DeleteRangeRequest) Size() (n int) { - var l int - _ = l - if m.Context != nil { - l = m.Context.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.StartKey) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.EndKey) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *DeleteRangeResponse) Size() (n int) { - var l int - _ = l - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Error) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *RawDeleteRangeRequest) Size() (n int) { - var l int - _ = l - if m.Context != nil { - l = m.Context.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.StartKey) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.EndKey) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Cf) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *RawDeleteRangeResponse) Size() (n int) { - var l int - _ = l - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Error) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *RawScanRequest) Size() (n int) { - var l int - _ = l - if m.Context != nil { - l = m.Context.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.StartKey) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.Limit != 0 { - n += 1 + sovKvrpcpb(uint64(m.Limit)) - } - if m.KeyOnly { - n += 2 - } - l = len(m.Cf) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *RawScanResponse) Size() (n int) { - var l int - _ = l - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if len(m.Kvs) > 0 { - for _, e := range m.Kvs { - l = e.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - } - return n -} - -func (m *KeyRange) Size() (n int) { - var l int - _ = l - l = len(m.StartKey) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.EndKey) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *RawBatchScanRequest) Size() (n int) { - var l int - _ = l - if m.Context != nil { - l = m.Context.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if len(m.Ranges) > 0 { - for _, e := range m.Ranges { - l = e.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - } - if m.EachLimit != 0 { - n += 1 + sovKvrpcpb(uint64(m.EachLimit)) - } - if m.KeyOnly { - n += 2 - } - l = len(m.Cf) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *RawBatchScanResponse) Size() (n int) { - var l int - _ = l - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if len(m.Kvs) > 0 { - for _, e := range m.Kvs { - l = e.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - } - return n -} - -func (m *MvccWrite) Size() (n int) { - var l int - _ = l - if m.Type != 0 { - n += 1 + sovKvrpcpb(uint64(m.Type)) - } - if m.StartTs != 0 { - n += 1 + sovKvrpcpb(uint64(m.StartTs)) - } - if m.CommitTs != 0 { - n += 1 + sovKvrpcpb(uint64(m.CommitTs)) - } - l = len(m.ShortValue) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *MvccValue) Size() (n int) { - var l int - _ = l - if m.StartTs != 0 { - n += 1 + sovKvrpcpb(uint64(m.StartTs)) - } - l = len(m.Value) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *MvccLock) Size() (n int) { - var l int - _ = l - if m.Type != 0 { - n += 1 + sovKvrpcpb(uint64(m.Type)) - } - if m.StartTs != 0 { - n += 1 + sovKvrpcpb(uint64(m.StartTs)) - } - l = len(m.Primary) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.ShortValue) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *MvccInfo) Size() (n int) { - var l int - _ = l - if m.Lock != nil { - l = m.Lock.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if len(m.Writes) > 0 { - for _, e := range m.Writes { - l = e.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - } - if len(m.Values) > 0 { - for _, e := range m.Values { - l = e.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - } - return n -} - -func (m *MvccGetByKeyRequest) Size() (n int) { - var l int - _ = l - if m.Context != nil { - l = m.Context.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Key) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *MvccGetByKeyResponse) Size() (n int) { - var l int - _ = l - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Error) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.Info != nil { - l = m.Info.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *MvccGetByStartTsRequest) Size() (n int) { - var l int - _ = l - if m.Context != nil { - l = m.Context.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.StartTs != 0 { - n += 1 + sovKvrpcpb(uint64(m.StartTs)) - } - return n -} - -func (m *MvccGetByStartTsResponse) Size() (n int) { - var l int - _ = l - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Error) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.Key) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.Info != nil { - l = m.Info.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *SplitRegionRequest) Size() (n int) { - var l int - _ = l - if m.Context != nil { - l = m.Context.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - l = len(m.SplitKey) - if l > 0 { - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func (m *SplitRegionResponse) Size() (n int) { - var l int - _ = l - if m.RegionError != nil { - l = m.RegionError.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.Left != nil { - l = m.Left.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - if m.Right != nil { - l = m.Right.Size() - n += 1 + l + sovKvrpcpb(uint64(l)) - } - return n -} - -func sovKvrpcpb(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozKvrpcpb(x uint64) (n int) { - return sovKvrpcpb(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *LockInfo) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: LockInfo: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LockInfo: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PrimaryLock", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PrimaryLock = append(m.PrimaryLock[:0], dAtA[iNdEx:postIndex]...) - if m.PrimaryLock == nil { - m.PrimaryLock = []byte{} - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field LockVersion", wireType) - } - m.LockVersion = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.LockVersion |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...) - if m.Key == nil { - m.Key = []byte{} - } - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field LockTtl", wireType) - } - m.LockTtl = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.LockTtl |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *KeyError) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: KeyError: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: KeyError: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Locked", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Locked == nil { - m.Locked = &LockInfo{} - } - if err := m.Locked.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Retryable", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Retryable = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Abort", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Abort = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Conflict", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Conflict == nil { - m.Conflict = &WriteConflict{} - } - if err := m.Conflict.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *WriteConflict) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: WriteConflict: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: WriteConflict: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StartTs", wireType) - } - m.StartTs = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.StartTs |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ConflictTs", wireType) - } - m.ConflictTs = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ConflictTs |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...) - if m.Key == nil { - m.Key = []byte{} - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Primary", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Primary = append(m.Primary[:0], dAtA[iNdEx:postIndex]...) - if m.Primary == nil { - m.Primary = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Context) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Context: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Context: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionId", wireType) - } - m.RegionId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RegionId |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionEpoch", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionEpoch == nil { - m.RegionEpoch = &metapb.RegionEpoch{} - } - if err := m.RegionEpoch.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Peer", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Peer == nil { - m.Peer = &metapb.Peer{} - } - if err := m.Peer.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Term", wireType) - } - m.Term = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Term |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Priority", wireType) - } - m.Priority = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Priority |= (CommandPri(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 7: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field IsolationLevel", wireType) - } - m.IsolationLevel = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.IsolationLevel |= (IsolationLevel(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 8: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field NotFillCache", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.NotFillCache = bool(v != 0) - case 9: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field SyncLog", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.SyncLog = bool(v != 0) - case 10: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field HandleTime", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.HandleTime = bool(v != 0) - case 11: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ScanDetail", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.ScanDetail = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HandleTime) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HandleTime: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HandleTime: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field WaitMs", wireType) - } - m.WaitMs = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.WaitMs |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ProcessMs", wireType) - } - m.ProcessMs = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ProcessMs |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ScanInfo) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ScanInfo: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ScanInfo: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Total", wireType) - } - m.Total = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Total |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Processed", wireType) - } - m.Processed = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Processed |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ScanDetail) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ScanDetail: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ScanDetail: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Write", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Write == nil { - m.Write = &ScanInfo{} - } - if err := m.Write.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Lock", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Lock == nil { - m.Lock = &ScanInfo{} - } - if err := m.Lock.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Data == nil { - m.Data = &ScanInfo{} - } - if err := m.Data.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ExecDetails) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ExecDetails: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ExecDetails: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HandleTime", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.HandleTime == nil { - m.HandleTime = &HandleTime{} - } - if err := m.HandleTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ScanDetail", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ScanDetail == nil { - m.ScanDetail = &ScanDetail{} - } - if err := m.ScanDetail.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GetRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Context == nil { - m.Context = &Context{} - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...) - if m.Key == nil { - m.Key = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) - } - m.Version = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Version |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GetResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Error == nil { - m.Error = &KeyError{} - } - if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Value = append(m.Value[:0], dAtA[iNdEx:postIndex]...) - if m.Value == nil { - m.Value = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ScanRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ScanRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ScanRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Context == nil { - m.Context = &Context{} - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StartKey", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.StartKey = append(m.StartKey[:0], dAtA[iNdEx:postIndex]...) - if m.StartKey == nil { - m.StartKey = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Limit", wireType) - } - m.Limit = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Limit |= (uint32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) - } - m.Version = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Version |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field KeyOnly", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.KeyOnly = bool(v != 0) - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Reverse", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Reverse = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *KvPair) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: KvPair: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: KvPair: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Error == nil { - m.Error = &KeyError{} - } - if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...) - if m.Key == nil { - m.Key = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Value = append(m.Value[:0], dAtA[iNdEx:postIndex]...) - if m.Value == nil { - m.Value = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ScanResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ScanResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ScanResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pairs", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Pairs = append(m.Pairs, &KvPair{}) - if err := m.Pairs[len(m.Pairs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Mutation) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Mutation: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Mutation: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Op", wireType) - } - m.Op = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Op |= (Op(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...) - if m.Key == nil { - m.Key = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Value = append(m.Value[:0], dAtA[iNdEx:postIndex]...) - if m.Value == nil { - m.Value = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PrewriteRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PrewriteRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PrewriteRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Context == nil { - m.Context = &Context{} - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Mutations", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Mutations = append(m.Mutations, &Mutation{}) - if err := m.Mutations[len(m.Mutations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PrimaryLock", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PrimaryLock = append(m.PrimaryLock[:0], dAtA[iNdEx:postIndex]...) - if m.PrimaryLock == nil { - m.PrimaryLock = []byte{} - } - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StartVersion", wireType) - } - m.StartVersion = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.StartVersion |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field LockTtl", wireType) - } - m.LockTtl = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.LockTtl |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field SkipConstraintCheck", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.SkipConstraintCheck = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PrewriteResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PrewriteResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PrewriteResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Errors", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Errors = append(m.Errors, &KeyError{}) - if err := m.Errors[len(m.Errors)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CommitRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CommitRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CommitRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Context == nil { - m.Context = &Context{} - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StartVersion", wireType) - } - m.StartVersion = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.StartVersion |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Keys", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Keys = append(m.Keys, make([]byte, postIndex-iNdEx)) - copy(m.Keys[len(m.Keys)-1], dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CommitVersion", wireType) - } - m.CommitVersion = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.CommitVersion |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CommitResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CommitResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CommitResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Error == nil { - m.Error = &KeyError{} - } - if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ImportRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ImportRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ImportRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Mutations", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Mutations = append(m.Mutations, &Mutation{}) - if err := m.Mutations[len(m.Mutations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CommitVersion", wireType) - } - m.CommitVersion = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.CommitVersion |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ImportResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ImportResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ImportResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Error = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *BatchRollbackRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: BatchRollbackRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: BatchRollbackRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Context == nil { - m.Context = &Context{} - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StartVersion", wireType) - } - m.StartVersion = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.StartVersion |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Keys", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Keys = append(m.Keys, make([]byte, postIndex-iNdEx)) - copy(m.Keys[len(m.Keys)-1], dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *BatchRollbackResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: BatchRollbackResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: BatchRollbackResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Error == nil { - m.Error = &KeyError{} - } - if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CleanupRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CleanupRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CleanupRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Context == nil { - m.Context = &Context{} - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...) - if m.Key == nil { - m.Key = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StartVersion", wireType) - } - m.StartVersion = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.StartVersion |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CleanupResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CleanupResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CleanupResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Error == nil { - m.Error = &KeyError{} - } - if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CommitVersion", wireType) - } - m.CommitVersion = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.CommitVersion |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *BatchGetRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: BatchGetRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: BatchGetRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Context == nil { - m.Context = &Context{} - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Keys", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Keys = append(m.Keys, make([]byte, postIndex-iNdEx)) - copy(m.Keys[len(m.Keys)-1], dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) - } - m.Version = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Version |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *BatchGetResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: BatchGetResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: BatchGetResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pairs", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Pairs = append(m.Pairs, &KvPair{}) - if err := m.Pairs[len(m.Pairs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ScanLockRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ScanLockRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ScanLockRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Context == nil { - m.Context = &Context{} - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxVersion", wireType) - } - m.MaxVersion = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.MaxVersion |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StartKey", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.StartKey = append(m.StartKey[:0], dAtA[iNdEx:postIndex]...) - if m.StartKey == nil { - m.StartKey = []byte{} - } - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Limit", wireType) - } - m.Limit = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Limit |= (uint32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ScanLockResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ScanLockResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ScanLockResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Error == nil { - m.Error = &KeyError{} - } - if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Locks", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Locks = append(m.Locks, &LockInfo{}) - if err := m.Locks[len(m.Locks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *TxnInfo) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: TxnInfo: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TxnInfo: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Txn", wireType) - } - m.Txn = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Txn |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) - } - m.Status = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Status |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ResolveLockRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ResolveLockRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ResolveLockRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Context == nil { - m.Context = &Context{} - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StartVersion", wireType) - } - m.StartVersion = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.StartVersion |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CommitVersion", wireType) - } - m.CommitVersion = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.CommitVersion |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TxnInfos", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TxnInfos = append(m.TxnInfos, &TxnInfo{}) - if err := m.TxnInfos[len(m.TxnInfos)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ResolveLockResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ResolveLockResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ResolveLockResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Error == nil { - m.Error = &KeyError{} - } - if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GCRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GCRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GCRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Context == nil { - m.Context = &Context{} - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field SafePoint", wireType) - } - m.SafePoint = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.SafePoint |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GCResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GCResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GCResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Error == nil { - m.Error = &KeyError{} - } - if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RawGetRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RawGetRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RawGetRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Context == nil { - m.Context = &Context{} - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...) - if m.Key == nil { - m.Key = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cf", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Cf = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RawGetResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RawGetResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RawGetResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Error = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Value = append(m.Value[:0], dAtA[iNdEx:postIndex]...) - if m.Value == nil { - m.Value = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RawPutRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RawPutRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RawPutRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Context == nil { - m.Context = &Context{} - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...) - if m.Key == nil { - m.Key = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Value = append(m.Value[:0], dAtA[iNdEx:postIndex]...) - if m.Value == nil { - m.Value = []byte{} - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cf", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Cf = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RawPutResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RawPutResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RawPutResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Error = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RawBatchPutRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RawBatchPutRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RawBatchPutRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Context == nil { - m.Context = &Context{} - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pairs", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Pairs = append(m.Pairs, &KvPair{}) - if err := m.Pairs[len(m.Pairs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cf", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Cf = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RawBatchPutResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RawBatchPutResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RawBatchPutResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Error = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RawBatchGetRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RawBatchGetRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RawBatchGetRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Context == nil { - m.Context = &Context{} - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Keys", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Keys = append(m.Keys, make([]byte, postIndex-iNdEx)) - copy(m.Keys[len(m.Keys)-1], dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cf", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Cf = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RawBatchGetResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RawBatchGetResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RawBatchGetResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pairs", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Pairs = append(m.Pairs, &KvPair{}) - if err := m.Pairs[len(m.Pairs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RawDeleteRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RawDeleteRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RawDeleteRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Context == nil { - m.Context = &Context{} - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...) - if m.Key == nil { - m.Key = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cf", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Cf = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RawDeleteResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RawDeleteResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RawDeleteResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Error = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RawBatchDeleteRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RawBatchDeleteRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RawBatchDeleteRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Context == nil { - m.Context = &Context{} - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Keys", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Keys = append(m.Keys, make([]byte, postIndex-iNdEx)) - copy(m.Keys[len(m.Keys)-1], dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cf", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Cf = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RawBatchDeleteResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RawBatchDeleteResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RawBatchDeleteResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Error = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *DeleteRangeRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: DeleteRangeRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DeleteRangeRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Context == nil { - m.Context = &Context{} - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StartKey", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.StartKey = append(m.StartKey[:0], dAtA[iNdEx:postIndex]...) - if m.StartKey == nil { - m.StartKey = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EndKey", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.EndKey = append(m.EndKey[:0], dAtA[iNdEx:postIndex]...) - if m.EndKey == nil { - m.EndKey = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *DeleteRangeResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: DeleteRangeResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DeleteRangeResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Error = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RawDeleteRangeRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RawDeleteRangeRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RawDeleteRangeRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Context == nil { - m.Context = &Context{} - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StartKey", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.StartKey = append(m.StartKey[:0], dAtA[iNdEx:postIndex]...) - if m.StartKey == nil { - m.StartKey = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EndKey", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.EndKey = append(m.EndKey[:0], dAtA[iNdEx:postIndex]...) - if m.EndKey == nil { - m.EndKey = []byte{} - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cf", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Cf = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RawDeleteRangeResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RawDeleteRangeResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RawDeleteRangeResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Error = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RawScanRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RawScanRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RawScanRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Context == nil { - m.Context = &Context{} - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StartKey", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.StartKey = append(m.StartKey[:0], dAtA[iNdEx:postIndex]...) - if m.StartKey == nil { - m.StartKey = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Limit", wireType) - } - m.Limit = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Limit |= (uint32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field KeyOnly", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.KeyOnly = bool(v != 0) - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cf", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Cf = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RawScanResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RawScanResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RawScanResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Kvs", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Kvs = append(m.Kvs, &KvPair{}) - if err := m.Kvs[len(m.Kvs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *KeyRange) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: KeyRange: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: KeyRange: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StartKey", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.StartKey = append(m.StartKey[:0], dAtA[iNdEx:postIndex]...) - if m.StartKey == nil { - m.StartKey = []byte{} - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EndKey", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.EndKey = append(m.EndKey[:0], dAtA[iNdEx:postIndex]...) - if m.EndKey == nil { - m.EndKey = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RawBatchScanRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RawBatchScanRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RawBatchScanRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Context == nil { - m.Context = &Context{} - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Ranges", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Ranges = append(m.Ranges, &KeyRange{}) - if err := m.Ranges[len(m.Ranges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field EachLimit", wireType) - } - m.EachLimit = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.EachLimit |= (uint32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field KeyOnly", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.KeyOnly = bool(v != 0) - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cf", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Cf = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RawBatchScanResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RawBatchScanResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RawBatchScanResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Kvs", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Kvs = append(m.Kvs, &KvPair{}) - if err := m.Kvs[len(m.Kvs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MvccWrite) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MvccWrite: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MvccWrite: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) - } - m.Type = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Type |= (Op(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StartTs", wireType) - } - m.StartTs = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.StartTs |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CommitTs", wireType) - } - m.CommitTs = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.CommitTs |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShortValue", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ShortValue = append(m.ShortValue[:0], dAtA[iNdEx:postIndex]...) - if m.ShortValue == nil { - m.ShortValue = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MvccValue) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MvccValue: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MvccValue: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StartTs", wireType) - } - m.StartTs = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.StartTs |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Value = append(m.Value[:0], dAtA[iNdEx:postIndex]...) - if m.Value == nil { - m.Value = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MvccLock) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MvccLock: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MvccLock: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) - } - m.Type = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Type |= (Op(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StartTs", wireType) - } - m.StartTs = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.StartTs |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Primary", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Primary = append(m.Primary[:0], dAtA[iNdEx:postIndex]...) - if m.Primary == nil { - m.Primary = []byte{} - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShortValue", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ShortValue = append(m.ShortValue[:0], dAtA[iNdEx:postIndex]...) - if m.ShortValue == nil { - m.ShortValue = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MvccInfo) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MvccInfo: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MvccInfo: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Lock", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Lock == nil { - m.Lock = &MvccLock{} - } - if err := m.Lock.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Writes", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Writes = append(m.Writes, &MvccWrite{}) - if err := m.Writes[len(m.Writes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Values", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Values = append(m.Values, &MvccValue{}) - if err := m.Values[len(m.Values)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MvccGetByKeyRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MvccGetByKeyRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MvccGetByKeyRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Context == nil { - m.Context = &Context{} - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...) - if m.Key == nil { - m.Key = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MvccGetByKeyResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MvccGetByKeyResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MvccGetByKeyResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Error = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Info", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Info == nil { - m.Info = &MvccInfo{} - } - if err := m.Info.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MvccGetByStartTsRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MvccGetByStartTsRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MvccGetByStartTsRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Context == nil { - m.Context = &Context{} - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StartTs", wireType) - } - m.StartTs = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.StartTs |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MvccGetByStartTsResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MvccGetByStartTsResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MvccGetByStartTsResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Error = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...) - if m.Key == nil { - m.Key = []byte{} - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Info", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Info == nil { - m.Info = &MvccInfo{} - } - if err := m.Info.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SplitRegionRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SplitRegionRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SplitRegionRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Context == nil { - m.Context = &Context{} - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SplitKey", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SplitKey = append(m.SplitKey[:0], dAtA[iNdEx:postIndex]...) - if m.SplitKey == nil { - m.SplitKey = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SplitRegionResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SplitRegionResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SplitRegionResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionError == nil { - m.RegionError = &errorpb.Error{} - } - if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Left", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Left == nil { - m.Left = &metapb.Region{} - } - if err := m.Left.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Right", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthKvrpcpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Right == nil { - m.Right = &metapb.Region{} - } - if err := m.Right.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipKvrpcpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthKvrpcpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipKvrpcpb(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - iNdEx += length - if length < 0 { - return 0, ErrInvalidLengthKvrpcpb - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowKvrpcpb - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipKvrpcpb(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthKvrpcpb = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowKvrpcpb = fmt.Errorf("proto: integer overflow") -) - -func init() { proto.RegisterFile("kvrpcpb.proto", fileDescriptorKvrpcpb) } - -var fileDescriptorKvrpcpb = []byte{ - // 2011 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xef, 0x6e, 0xdb, 0xc8, - 0x11, 0x3f, 0x52, 0x94, 0x44, 0x8d, 0x64, 0x59, 0xb7, 0x76, 0x12, 0xf5, 0xd2, 0x4b, 0x7c, 0xec, - 0x05, 0x71, 0x5c, 0xd4, 0x41, 0x7d, 0x87, 0x7e, 0x2a, 0x8a, 0x43, 0x94, 0x34, 0xe7, 0x8b, 0xd3, - 0x18, 0x6b, 0x23, 0x45, 0x80, 0x5e, 0x75, 0x6b, 0x6a, 0x2d, 0x11, 0xa2, 0xb8, 0x0c, 0xb9, 0x92, - 0x2d, 0x14, 0x45, 0x51, 0x14, 0x57, 0xe0, 0x3e, 0xb6, 0x28, 0xd0, 0xa2, 0xe8, 0x3d, 0x40, 0x5f, - 0xa0, 0x5f, 0xfa, 0x02, 0xfd, 0xd8, 0x47, 0x28, 0xd2, 0x17, 0x29, 0xf6, 0x0f, 0x49, 0x51, 0x92, - 0x2f, 0x2e, 0x2b, 0xbb, 0x9f, 0xa4, 0x9d, 0x99, 0xdd, 0x99, 0xdf, 0xcc, 0xec, 0xec, 0x70, 0x17, - 0xd6, 0x86, 0x93, 0x28, 0x74, 0xc3, 0x93, 0xdd, 0x30, 0x62, 0x9c, 0xa1, 0xaa, 0x1e, 0xbe, 0xd7, - 0x18, 0x51, 0x4e, 0x12, 0xf2, 0x7b, 0x6b, 0x34, 0x8a, 0x58, 0x94, 0x0e, 0x37, 0xfb, 0xac, 0xcf, - 0xe4, 0xdf, 0x87, 0xe2, 0x9f, 0xa2, 0x3a, 0xbf, 0x04, 0xfb, 0x80, 0xb9, 0xc3, 0xfd, 0xe0, 0x94, - 0xa1, 0x0f, 0xa0, 0x11, 0x46, 0xde, 0x88, 0x44, 0xd3, 0xae, 0xcf, 0xdc, 0x61, 0xdb, 0xd8, 0x32, - 0xb6, 0x1b, 0xb8, 0xae, 0x69, 0x42, 0x4c, 0x88, 0x08, 0x56, 0x77, 0x42, 0xa3, 0xd8, 0x63, 0x41, - 0xdb, 0xdc, 0x32, 0xb6, 0x2d, 0x5c, 0x17, 0xb4, 0x97, 0x8a, 0x84, 0x5a, 0x50, 0x1a, 0xd2, 0x69, - 0xbb, 0x24, 0x27, 0x8b, 0xbf, 0xe8, 0x5b, 0x60, 0xcb, 0x49, 0x9c, 0xfb, 0x6d, 0x4b, 0x4e, 0xa8, - 0x8a, 0xf1, 0x31, 0xf7, 0x9d, 0xaf, 0x0d, 0xb0, 0x9f, 0xd1, 0xe9, 0x13, 0x61, 0x29, 0x7a, 0x00, - 0x15, 0x41, 0xa7, 0x3d, 0xa9, 0xb9, 0xbe, 0xf7, 0xee, 0x6e, 0x82, 0x33, 0x31, 0x11, 0x6b, 0x01, - 0xf4, 0x6d, 0xa8, 0x45, 0x94, 0x47, 0x53, 0x72, 0xe2, 0x53, 0x69, 0x44, 0x0d, 0x67, 0x04, 0xb4, - 0x09, 0x65, 0x72, 0xc2, 0x22, 0x2e, 0x8d, 0xa8, 0x61, 0x35, 0x40, 0x7b, 0x60, 0xbb, 0x2c, 0x38, - 0xf5, 0x3d, 0x97, 0x4b, 0x33, 0xea, 0x7b, 0x37, 0x53, 0x05, 0x3f, 0x8d, 0x3c, 0x4e, 0x3b, 0x9a, - 0x8b, 0x53, 0x39, 0xe7, 0x0c, 0xd6, 0x72, 0x2c, 0x81, 0x25, 0xe6, 0x24, 0xe2, 0x5d, 0x1e, 0x4b, - 0x2b, 0x2d, 0x5c, 0x95, 0xe3, 0xe3, 0x18, 0xdd, 0x85, 0x7a, 0x32, 0x4f, 0x70, 0x95, 0x6b, 0x20, - 0x21, 0x1d, 0xc7, 0x4b, 0x3c, 0xd3, 0x86, 0xaa, 0xf6, 0xae, 0xb4, 0xa8, 0x81, 0x93, 0xa1, 0xf3, - 0x75, 0x09, 0xaa, 0x1d, 0x16, 0x70, 0x7a, 0xce, 0xd1, 0x6d, 0x01, 0xb6, 0xef, 0xb1, 0xa0, 0xeb, - 0xf5, 0xb4, 0x52, 0x5b, 0x11, 0xf6, 0x7b, 0xe8, 0x07, 0xd0, 0xd0, 0x4c, 0x1a, 0x32, 0x77, 0x20, - 0xd5, 0xd6, 0xf7, 0x36, 0x76, 0x75, 0x2a, 0x60, 0xc9, 0x7b, 0x22, 0x58, 0xb8, 0x1e, 0x65, 0x03, - 0xb4, 0x05, 0x56, 0x48, 0x69, 0x24, 0xad, 0xa9, 0xef, 0x35, 0x12, 0xf9, 0x43, 0x4a, 0x23, 0x2c, - 0x39, 0x08, 0x81, 0xc5, 0x69, 0x34, 0x6a, 0x97, 0xa5, 0x46, 0xf9, 0x1f, 0x3d, 0x04, 0x3b, 0x8c, - 0x3c, 0x16, 0x79, 0x7c, 0xda, 0xae, 0x6c, 0x19, 0xdb, 0xcd, 0xbd, 0x8d, 0xd4, 0x87, 0x1d, 0x36, - 0x1a, 0x91, 0xa0, 0x77, 0x18, 0x79, 0x38, 0x15, 0x42, 0x9f, 0xc0, 0xba, 0x17, 0x33, 0x9f, 0x70, - 0x61, 0xa1, 0x4f, 0x27, 0xd4, 0x6f, 0x57, 0xe5, 0xbc, 0x5b, 0xe9, 0xbc, 0xfd, 0x84, 0x7f, 0x20, - 0xd8, 0xb8, 0xe9, 0xe5, 0xc6, 0xe8, 0x43, 0x68, 0x06, 0x8c, 0x77, 0x4f, 0x3d, 0xdf, 0xef, 0xba, - 0xc4, 0x1d, 0xd0, 0xb6, 0xbd, 0x65, 0x6c, 0xdb, 0xb8, 0x11, 0x30, 0xfe, 0x63, 0xcf, 0xf7, 0x3b, - 0x82, 0x26, 0xe3, 0x32, 0x0d, 0xdc, 0xae, 0xcf, 0xfa, 0xed, 0x9a, 0xe4, 0x57, 0xc5, 0xf8, 0x80, - 0xf5, 0x45, 0x5c, 0x06, 0x24, 0xe8, 0xf9, 0xb4, 0xcb, 0xbd, 0x11, 0x6d, 0x83, 0xe4, 0x82, 0x22, - 0x1d, 0x7b, 0x23, 0x2a, 0x04, 0x62, 0x97, 0x04, 0xdd, 0x1e, 0xe5, 0xc4, 0xf3, 0xdb, 0x75, 0x25, - 0x20, 0x48, 0x8f, 0x25, 0xe5, 0x33, 0xcb, 0xb6, 0x5a, 0x65, 0xe1, 0x3e, 0xd2, 0xeb, 0xbe, 0x1e, - 0xb3, 0x68, 0x3c, 0x72, 0x1e, 0x03, 0x7c, 0x9a, 0xad, 0x70, 0x0b, 0xaa, 0x67, 0xc4, 0xe3, 0xdd, - 0x91, 0x4a, 0x8a, 0x12, 0xae, 0x88, 0xe1, 0xf3, 0x18, 0xbd, 0x0f, 0x10, 0x46, 0xcc, 0xa5, 0x71, - 0x2c, 0x78, 0xa6, 0xe4, 0xd5, 0x34, 0xe5, 0x79, 0xec, 0xfc, 0x08, 0xec, 0x23, 0x97, 0x04, 0x72, - 0xf7, 0x6d, 0x42, 0x99, 0x33, 0x4e, 0x7c, 0xbd, 0x82, 0x1a, 0x88, 0x44, 0xd7, 0xe2, 0xb4, 0x37, - 0x37, 0x9f, 0xf6, 0x9c, 0xdf, 0x18, 0x00, 0x47, 0xa9, 0x9d, 0xe8, 0x3e, 0x94, 0xcf, 0x44, 0xb6, - 0x2e, 0xec, 0x9f, 0x44, 0x09, 0x56, 0x7c, 0x74, 0x0f, 0x2c, 0xb9, 0xc3, 0xcd, 0x8b, 0xe4, 0x24, - 0x5b, 0x88, 0xf5, 0x08, 0x27, 0x3a, 0x47, 0x96, 0x89, 0x09, 0xb6, 0x33, 0x85, 0xfa, 0x93, 0x73, - 0xea, 0x2a, 0x23, 0x62, 0xf4, 0x71, 0xde, 0xdf, 0x86, 0x4e, 0xc8, 0x64, 0x72, 0xe6, 0xb6, 0x5c, - 0x10, 0x3e, 0xce, 0x07, 0xc1, 0x9c, 0x9b, 0x95, 0xa1, 0x9c, 0x8d, 0x8c, 0xd3, 0x03, 0x78, 0x4a, - 0x39, 0xa6, 0xaf, 0xc7, 0x34, 0xe6, 0x68, 0x07, 0xaa, 0xae, 0xda, 0x33, 0x5a, 0x6b, 0x6b, 0x26, - 0x39, 0x25, 0x1d, 0x27, 0x02, 0xc9, 0x66, 0x34, 0x73, 0x9b, 0x31, 0x29, 0x6b, 0x25, 0xb5, 0xb3, - 0xf5, 0xd0, 0xf9, 0x15, 0xd4, 0xa5, 0x96, 0x38, 0x64, 0x41, 0x4c, 0xd1, 0xf7, 0xb3, 0x2d, 0x27, - 0xea, 0x96, 0xd6, 0xd5, 0xdc, 0x4d, 0xea, 0xad, 0xac, 0x66, 0xe9, 0x6e, 0x93, 0xa5, 0xed, 0x3e, - 0x94, 0x95, 0xec, 0xbc, 0xc7, 0x93, 0xe2, 0x87, 0x15, 0x5f, 0x64, 0xc1, 0x84, 0xf8, 0x63, 0xaa, - 0xab, 0x84, 0x1a, 0x38, 0x7f, 0x37, 0xa0, 0x2e, 0x3c, 0x50, 0x04, 0xe8, 0x6d, 0xa8, 0xa9, 0x8a, - 0x95, 0xc1, 0x55, 0x25, 0xec, 0x19, 0x9d, 0x0a, 0x75, 0xbe, 0x37, 0xf2, 0x54, 0xa5, 0x5c, 0xc3, - 0x6a, 0x30, 0xeb, 0x09, 0x2b, 0xe7, 0x09, 0xb1, 0xcd, 0x86, 0x74, 0xda, 0x65, 0x81, 0x3f, 0x95, - 0x75, 0xc1, 0xc6, 0xd5, 0x21, 0x9d, 0xbe, 0x08, 0x7c, 0xe9, 0xbe, 0x88, 0x0a, 0x39, 0x2a, 0x2b, - 0x83, 0x8d, 0x93, 0xa1, 0xf3, 0x0a, 0x2a, 0xcf, 0x26, 0x87, 0xc4, 0x9b, 0x71, 0x83, 0xf1, 0x16, - 0x37, 0x2c, 0x46, 0x67, 0xb9, 0x63, 0x06, 0xd0, 0x50, 0x7e, 0x29, 0x1e, 0x9a, 0x7b, 0x50, 0x0e, - 0x89, 0x17, 0x89, 0xdd, 0x59, 0xda, 0xae, 0xef, 0xad, 0x67, 0x36, 0x49, 0x9b, 0xb1, 0xe2, 0x3a, - 0x2f, 0xc0, 0x7e, 0x3e, 0xe6, 0xb2, 0x2e, 0xa1, 0xdb, 0x60, 0xb2, 0x50, 0xae, 0xdd, 0xdc, 0xab, - 0xa7, 0xf2, 0x2f, 0x42, 0x6c, 0xb2, 0xf0, 0xd2, 0xa6, 0x7f, 0x69, 0xc2, 0xfa, 0x61, 0x44, 0xe5, - 0x86, 0x2c, 0x12, 0xd7, 0x87, 0x50, 0x1b, 0x69, 0x83, 0x12, 0xdb, 0x33, 0x7f, 0x26, 0xa6, 0xe2, - 0x4c, 0x66, 0xe1, 0x78, 0x2f, 0x2d, 0x1e, 0xef, 0xdf, 0x81, 0x35, 0x95, 0x2b, 0xf9, 0xf0, 0x37, - 0x24, 0xf1, 0x65, 0x96, 0x03, 0xe9, 0x71, 0x5e, 0xce, 0x1d, 0xe7, 0x68, 0x0f, 0x6e, 0xc4, 0x43, - 0x2f, 0xec, 0xba, 0x2c, 0x88, 0x79, 0x44, 0xbc, 0x80, 0x77, 0xdd, 0x01, 0x75, 0x87, 0x3a, 0x23, - 0x36, 0x04, 0xb3, 0x93, 0xf2, 0x3a, 0x82, 0xe5, 0x84, 0xd0, 0xca, 0xdc, 0x50, 0x3c, 0x8c, 0x0f, - 0xa0, 0x22, 0xb9, 0x8b, 0xbe, 0x48, 0x73, 0x4b, 0x0b, 0x38, 0x7f, 0x35, 0x60, 0x4d, 0x1c, 0x56, - 0x5e, 0xa1, 0xc2, 0xb1, 0xe0, 0x23, 0x73, 0x89, 0x8f, 0x10, 0x58, 0x43, 0x3a, 0x8d, 0xdb, 0xa5, - 0xad, 0xd2, 0x76, 0x03, 0xcb, 0xff, 0xe8, 0x1e, 0x34, 0x5d, 0xa9, 0x75, 0xce, 0xbb, 0x6b, 0x8a, - 0xaa, 0xa7, 0x7e, 0x66, 0xd9, 0xe5, 0x56, 0x05, 0x57, 0x4e, 0xbc, 0xc0, 0x67, 0x7d, 0xc7, 0x87, - 0x66, 0x62, 0xea, 0xd5, 0x57, 0x1f, 0xa7, 0x0f, 0x6b, 0xfb, 0xa3, 0x90, 0x45, 0xa9, 0x63, 0x72, - 0x49, 0x66, 0x5c, 0x22, 0xc9, 0x16, 0x41, 0x9a, 0x4b, 0x40, 0x3a, 0xaf, 0xa0, 0x99, 0x28, 0x2a, - 0x0e, 0x6b, 0x73, 0x16, 0x56, 0x2d, 0xc1, 0xf0, 0x0b, 0xd8, 0x7c, 0x44, 0xb8, 0x3b, 0xc0, 0xcc, - 0xf7, 0x4f, 0x88, 0x3b, 0xbc, 0xce, 0x18, 0x3b, 0x31, 0xdc, 0x98, 0x53, 0x7e, 0x0d, 0x51, 0x8b, - 0xa1, 0xd9, 0xf1, 0x29, 0x09, 0xc6, 0xe1, 0x6a, 0x0e, 0xc2, 0x05, 0xf4, 0xa5, 0x45, 0xf4, 0xce, - 0x1f, 0x0c, 0x58, 0x4f, 0xb5, 0x5e, 0xc3, 0xc1, 0xb8, 0x98, 0x58, 0xa5, 0x65, 0x89, 0x35, 0x84, - 0x75, 0x19, 0x80, 0x82, 0x5d, 0x41, 0x12, 0x53, 0x73, 0x66, 0xdf, 0x5e, 0xdc, 0x17, 0xf8, 0xd0, - 0xca, 0x94, 0x5d, 0xf9, 0x09, 0xf4, 0x3b, 0x03, 0xd6, 0xc5, 0x61, 0x27, 0x2a, 0x75, 0x11, 0x6c, - 0x77, 0xa1, 0x3e, 0x22, 0xe7, 0x73, 0x29, 0x0d, 0x23, 0x72, 0x9e, 0x24, 0x74, 0xae, 0x53, 0x28, - 0x5d, 0xd4, 0x29, 0x58, 0x33, 0x9d, 0x82, 0xf3, 0x47, 0x03, 0x5a, 0x99, 0x4d, 0xd7, 0x90, 0x06, - 0xf7, 0xa1, 0x2c, 0x0e, 0x1b, 0xb5, 0xeb, 0x96, 0x7e, 0x22, 0x2a, 0xbe, 0xf3, 0x11, 0x54, 0x8f, - 0xcf, 0x55, 0x67, 0xdd, 0x82, 0x12, 0x3f, 0x0f, 0xf4, 0x97, 0x93, 0xf8, 0x8b, 0x6e, 0x42, 0x25, - 0xe6, 0x84, 0x8f, 0x93, 0xaf, 0x34, 0x3d, 0x12, 0x7d, 0x16, 0xc2, 0x34, 0x66, 0xfe, 0x84, 0x16, - 0xf5, 0xf2, 0xa5, 0x4a, 0xc7, 0xe5, 0x92, 0x19, 0x7d, 0x0f, 0x6a, 0xfc, 0x3c, 0xe8, 0x7a, 0xc1, - 0x29, 0x8b, 0xdb, 0x96, 0x04, 0x9c, 0x69, 0xd6, 0xe8, 0xb0, 0xcd, 0xd5, 0x9f, 0xd8, 0x79, 0x0d, - 0x1b, 0x39, 0xe3, 0xaf, 0xa1, 0xf4, 0xbc, 0x84, 0xda, 0xd3, 0x4e, 0x11, 0x37, 0xbd, 0x0f, 0x10, - 0x93, 0x53, 0xda, 0x0d, 0x99, 0x17, 0x70, 0xed, 0xa3, 0x9a, 0xa0, 0x1c, 0x0a, 0x82, 0x33, 0x00, - 0x10, 0xeb, 0x5e, 0x03, 0x82, 0xcf, 0x61, 0x0d, 0x93, 0xb3, 0x95, 0x7d, 0x44, 0x34, 0xc1, 0x74, - 0x4f, 0xf5, 0xbd, 0x83, 0xe9, 0x9e, 0x3a, 0x0c, 0x9a, 0xc9, 0xf2, 0x2b, 0x3e, 0xe8, 0x2e, 0x68, - 0x2b, 0x63, 0x89, 0xe7, 0x70, 0xbc, 0x22, 0x3c, 0x4b, 0x95, 0x68, 0x94, 0x56, 0x8a, 0xf2, 0x95, - 0x44, 0x29, 0x95, 0xae, 0xfa, 0x38, 0x3f, 0x03, 0x84, 0xc9, 0x99, 0x2c, 0xb3, 0x05, 0x41, 0x5d, - 0xae, 0xbc, 0x2e, 0x44, 0xee, 0xe7, 0xb0, 0x91, 0x53, 0xbc, 0x6a, 0x60, 0xbd, 0x0c, 0xd8, 0x0a, - 0x0f, 0xab, 0xc5, 0xfc, 0xdb, 0xc8, 0x69, 0xb9, 0xf2, 0x53, 0xea, 0x0b, 0x68, 0x61, 0x72, 0xf6, - 0x98, 0xfa, 0xb4, 0xd8, 0x67, 0xcd, 0xdb, 0xb7, 0xd4, 0xcf, 0xe0, 0xdd, 0x19, 0x0d, 0xab, 0x0e, - 0x4b, 0x1f, 0x6e, 0x24, 0x0e, 0x2b, 0x0e, 0xe2, 0x32, 0x91, 0x21, 0x70, 0x73, 0x5e, 0xd1, 0xaa, - 0xb1, 0x4c, 0x00, 0xe9, 0xa5, 0x49, 0xd0, 0xa7, 0x2b, 0xbf, 0x3c, 0xb8, 0x05, 0x55, 0x1a, 0xf4, - 0x66, 0xba, 0x85, 0x0a, 0x0d, 0x7a, 0xcf, 0xe8, 0x54, 0x6c, 0x9d, 0x9c, 0xde, 0x55, 0xe3, 0xfa, - 0xca, 0x90, 0x41, 0xfa, 0x7f, 0x60, 0x5b, 0x28, 0x7d, 0x2a, 0x8c, 0x57, 0x0a, 0xf7, 0xcf, 0x86, - 0x2c, 0xaf, 0xd7, 0x78, 0x01, 0x34, 0x7b, 0xcd, 0x63, 0xe5, 0xaf, 0x79, 0x14, 0xfe, 0x72, 0x8a, - 0xbf, 0x0f, 0xeb, 0xa9, 0x6d, 0xc5, 0x81, 0x7f, 0x00, 0xa5, 0xe1, 0xe4, 0xc2, 0xd2, 0x22, 0x78, - 0xce, 0x27, 0xf2, 0xa5, 0x40, 0xba, 0x38, 0x0f, 0xc9, 0xb8, 0x38, 0x74, 0x66, 0x2e, 0x2d, 0xff, - 0x66, 0x64, 0xc5, 0xb0, 0xa8, 0x33, 0x1f, 0x40, 0x25, 0x12, 0x26, 0x2c, 0xbd, 0x66, 0x50, 0xf1, - 0xd7, 0x02, 0xa2, 0xc5, 0xa1, 0xc4, 0x1d, 0x74, 0x67, 0xfd, 0x5b, 0x13, 0x94, 0x83, 0xff, 0xd6, - 0xc7, 0x3e, 0x6c, 0xe6, 0xed, 0xbe, 0x52, 0x47, 0x7f, 0x69, 0x40, 0xed, 0xf9, 0xc4, 0x75, 0xe5, - 0xc3, 0x07, 0xba, 0x0b, 0x16, 0x9f, 0x86, 0x74, 0xd9, 0x6d, 0x97, 0x64, 0xe4, 0x5e, 0x44, 0xcc, - 0xfc, 0x8b, 0xc8, 0x6d, 0xa8, 0xe9, 0x36, 0x97, 0xc7, 0xba, 0xc3, 0xb5, 0x15, 0x41, 0x3d, 0x97, - 0xc4, 0x03, 0x26, 0x1a, 0x65, 0xd9, 0x5f, 0xa8, 0xf7, 0x0f, 0x90, 0xa4, 0x97, 0xb2, 0x93, 0xf9, - 0xa1, 0x32, 0x43, 0x0e, 0xbe, 0xe9, 0xdd, 0x25, 0x6d, 0x51, 0xcc, 0xd9, 0x3e, 0xe8, 0xd7, 0x06, - 0xd8, 0x62, 0xba, 0xbc, 0xd7, 0xfa, 0x5f, 0x40, 0xcc, 0xbc, 0xd1, 0x94, 0x72, 0x6f, 0x34, 0x6f, - 0x47, 0xf0, 0x95, 0xb6, 0x41, 0x7e, 0x85, 0x24, 0x77, 0xee, 0xf3, 0x57, 0x9f, 0x89, 0x91, 0xfa, - 0xce, 0x7d, 0x07, 0x2a, 0xf2, 0x2e, 0x2c, 0x89, 0x11, 0xca, 0x09, 0xca, 0x98, 0x60, 0x2d, 0x21, - 0x64, 0xa5, 0xea, 0xe4, 0x6b, 0x28, 0x2f, 0x2b, 0x6d, 0xc0, 0x5a, 0xc2, 0x39, 0x82, 0x0d, 0x41, - 0x7c, 0x4a, 0xf9, 0xa3, 0xa9, 0x48, 0xd5, 0x55, 0x1c, 0xcd, 0xce, 0x6f, 0x0d, 0xd8, 0xcc, 0xaf, - 0xba, 0xea, 0x26, 0xf7, 0x1e, 0x58, 0xe2, 0xf3, 0x67, 0xe1, 0x09, 0x22, 0x71, 0x2b, 0x96, 0x6c, - 0xe7, 0x0b, 0xb8, 0x95, 0xda, 0x71, 0xa4, 0x02, 0x57, 0x04, 0xe1, 0xc5, 0x69, 0xe0, 0xfc, 0xc5, - 0x80, 0xf6, 0xa2, 0x8a, 0x55, 0xc3, 0x5d, 0x7c, 0x22, 0x4c, 0x1c, 0x60, 0x7d, 0xb3, 0x03, 0x3e, - 0x07, 0x74, 0x14, 0xfa, 0x1e, 0x57, 0xef, 0x7d, 0x45, 0x8f, 0x09, 0xb1, 0x42, 0xee, 0x98, 0x10, - 0x04, 0x51, 0x3a, 0x7f, 0x6f, 0xc0, 0x46, 0x6e, 0xfd, 0xe2, 0xc0, 0x1d, 0xb0, 0x7c, 0x7a, 0xca, - 0xf5, 0x87, 0x59, 0x33, 0xff, 0x50, 0x89, 0x25, 0x0f, 0x7d, 0x08, 0xe5, 0xc8, 0xeb, 0x0f, 0xb8, - 0x0e, 0xfb, 0xbc, 0x90, 0x62, 0xee, 0x7c, 0x17, 0x20, 0x7b, 0x73, 0x44, 0x00, 0x95, 0x9f, 0xb0, - 0x68, 0x44, 0xfc, 0xd6, 0x3b, 0xa8, 0x0a, 0xa5, 0x03, 0x76, 0xd6, 0x32, 0x90, 0x0d, 0xd6, 0xa7, - 0x5e, 0x7f, 0xd0, 0x32, 0x77, 0xb6, 0xa0, 0x99, 0x7f, 0x68, 0x44, 0x15, 0x30, 0x8f, 0xf6, 0x5b, - 0xef, 0x88, 0x5f, 0xdc, 0x69, 0x19, 0x3b, 0xbb, 0x60, 0xbe, 0x08, 0xc5, 0xd4, 0xc3, 0x31, 0x57, - 0x6b, 0x3c, 0xa6, 0xbe, 0x5a, 0x43, 0xec, 0xcf, 0x96, 0x89, 0x1a, 0x60, 0x27, 0x17, 0x7b, 0xad, - 0xd2, 0xa3, 0x9d, 0x7f, 0xbc, 0xb9, 0x63, 0xfc, 0xf3, 0xcd, 0x1d, 0xe3, 0x5f, 0x6f, 0xee, 0x18, - 0x7f, 0xfa, 0xf7, 0x9d, 0x77, 0xa0, 0xed, 0xb2, 0xd1, 0x6e, 0xe8, 0x05, 0x7d, 0x97, 0x84, 0xbb, - 0xdc, 0x1b, 0x4e, 0x76, 0x87, 0x13, 0xf9, 0xcc, 0x7e, 0x52, 0x91, 0x3f, 0x1f, 0xfd, 0x27, 0x00, - 0x00, 0xff, 0xff, 0x30, 0x25, 0x4a, 0xcb, 0xba, 0x1f, 0x00, 0x00, -} diff --git a/vendor/github.com/pingcap/kvproto/pkg/metapb/metapb.pb.go b/vendor/github.com/pingcap/kvproto/pkg/metapb/metapb.pb.go deleted file mode 100644 index 497f52d..0000000 --- a/vendor/github.com/pingcap/kvproto/pkg/metapb/metapb.pb.go +++ /dev/null @@ -1,1514 +0,0 @@ -// Code generated by protoc-gen-gogo. -// source: metapb.proto -// DO NOT EDIT! - -/* - Package metapb is a generated protocol buffer package. - - It is generated from these files: - metapb.proto - - It has these top-level messages: - Cluster - StoreLabel - Store - RegionEpoch - Region - Peer -*/ -package metapb - -import ( - "fmt" - "io" - "math" - - proto "github.com/golang/protobuf/proto" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -type StoreState int32 - -const ( - StoreState_Up StoreState = 0 - StoreState_Offline StoreState = 1 - StoreState_Tombstone StoreState = 2 -) - -var StoreState_name = map[int32]string{ - 0: "Up", - 1: "Offline", - 2: "Tombstone", -} -var StoreState_value = map[string]int32{ - "Up": 0, - "Offline": 1, - "Tombstone": 2, -} - -func (x StoreState) String() string { - return proto.EnumName(StoreState_name, int32(x)) -} -func (StoreState) EnumDescriptor() ([]byte, []int) { return fileDescriptorMetapb, []int{0} } - -type Cluster struct { - Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - // max peer count for a region. - // pd will do the auto-balance if region peer count mismatches. - MaxPeerCount uint32 `protobuf:"varint,2,opt,name=max_peer_count,json=maxPeerCount,proto3" json:"max_peer_count,omitempty"` -} - -func (m *Cluster) Reset() { *m = Cluster{} } -func (m *Cluster) String() string { return proto.CompactTextString(m) } -func (*Cluster) ProtoMessage() {} -func (*Cluster) Descriptor() ([]byte, []int) { return fileDescriptorMetapb, []int{0} } - -func (m *Cluster) GetId() uint64 { - if m != nil { - return m.Id - } - return 0 -} - -func (m *Cluster) GetMaxPeerCount() uint32 { - if m != nil { - return m.MaxPeerCount - } - return 0 -} - -// Case insensitive key/value for replica constraints. -type StoreLabel struct { - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` -} - -func (m *StoreLabel) Reset() { *m = StoreLabel{} } -func (m *StoreLabel) String() string { return proto.CompactTextString(m) } -func (*StoreLabel) ProtoMessage() {} -func (*StoreLabel) Descriptor() ([]byte, []int) { return fileDescriptorMetapb, []int{1} } - -func (m *StoreLabel) GetKey() string { - if m != nil { - return m.Key - } - return "" -} - -func (m *StoreLabel) GetValue() string { - if m != nil { - return m.Value - } - return "" -} - -type Store struct { - Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` - State StoreState `protobuf:"varint,3,opt,name=state,proto3,enum=metapb.StoreState" json:"state,omitempty"` - Labels []*StoreLabel `protobuf:"bytes,4,rep,name=labels" json:"labels,omitempty"` -} - -func (m *Store) Reset() { *m = Store{} } -func (m *Store) String() string { return proto.CompactTextString(m) } -func (*Store) ProtoMessage() {} -func (*Store) Descriptor() ([]byte, []int) { return fileDescriptorMetapb, []int{2} } - -func (m *Store) GetId() uint64 { - if m != nil { - return m.Id - } - return 0 -} - -func (m *Store) GetAddress() string { - if m != nil { - return m.Address - } - return "" -} - -func (m *Store) GetState() StoreState { - if m != nil { - return m.State - } - return StoreState_Up -} - -func (m *Store) GetLabels() []*StoreLabel { - if m != nil { - return m.Labels - } - return nil -} - -type RegionEpoch struct { - // Conf change version, auto increment when add or remove peer - ConfVer uint64 `protobuf:"varint,1,opt,name=conf_ver,json=confVer,proto3" json:"conf_ver,omitempty"` - // Region version, auto increment when split or merge - Version uint64 `protobuf:"varint,2,opt,name=version,proto3" json:"version,omitempty"` -} - -func (m *RegionEpoch) Reset() { *m = RegionEpoch{} } -func (m *RegionEpoch) String() string { return proto.CompactTextString(m) } -func (*RegionEpoch) ProtoMessage() {} -func (*RegionEpoch) Descriptor() ([]byte, []int) { return fileDescriptorMetapb, []int{3} } - -func (m *RegionEpoch) GetConfVer() uint64 { - if m != nil { - return m.ConfVer - } - return 0 -} - -func (m *RegionEpoch) GetVersion() uint64 { - if m != nil { - return m.Version - } - return 0 -} - -type Region struct { - Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - // Region key range [start_key, end_key). - StartKey []byte `protobuf:"bytes,2,opt,name=start_key,json=startKey,proto3" json:"start_key,omitempty"` - EndKey []byte `protobuf:"bytes,3,opt,name=end_key,json=endKey,proto3" json:"end_key,omitempty"` - RegionEpoch *RegionEpoch `protobuf:"bytes,4,opt,name=region_epoch,json=regionEpoch" json:"region_epoch,omitempty"` - Peers []*Peer `protobuf:"bytes,5,rep,name=peers" json:"peers,omitempty"` -} - -func (m *Region) Reset() { *m = Region{} } -func (m *Region) String() string { return proto.CompactTextString(m) } -func (*Region) ProtoMessage() {} -func (*Region) Descriptor() ([]byte, []int) { return fileDescriptorMetapb, []int{4} } - -func (m *Region) GetId() uint64 { - if m != nil { - return m.Id - } - return 0 -} - -func (m *Region) GetStartKey() []byte { - if m != nil { - return m.StartKey - } - return nil -} - -func (m *Region) GetEndKey() []byte { - if m != nil { - return m.EndKey - } - return nil -} - -func (m *Region) GetRegionEpoch() *RegionEpoch { - if m != nil { - return m.RegionEpoch - } - return nil -} - -func (m *Region) GetPeers() []*Peer { - if m != nil { - return m.Peers - } - return nil -} - -type Peer struct { - Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - StoreId uint64 `protobuf:"varint,2,opt,name=store_id,json=storeId,proto3" json:"store_id,omitempty"` - IsLearner bool `protobuf:"varint,3,opt,name=is_learner,json=isLearner,proto3" json:"is_learner,omitempty"` -} - -func (m *Peer) Reset() { *m = Peer{} } -func (m *Peer) String() string { return proto.CompactTextString(m) } -func (*Peer) ProtoMessage() {} -func (*Peer) Descriptor() ([]byte, []int) { return fileDescriptorMetapb, []int{5} } - -func (m *Peer) GetId() uint64 { - if m != nil { - return m.Id - } - return 0 -} - -func (m *Peer) GetStoreId() uint64 { - if m != nil { - return m.StoreId - } - return 0 -} - -func (m *Peer) GetIsLearner() bool { - if m != nil { - return m.IsLearner - } - return false -} - -func init() { - proto.RegisterType((*Cluster)(nil), "metapb.Cluster") - proto.RegisterType((*StoreLabel)(nil), "metapb.StoreLabel") - proto.RegisterType((*Store)(nil), "metapb.Store") - proto.RegisterType((*RegionEpoch)(nil), "metapb.RegionEpoch") - proto.RegisterType((*Region)(nil), "metapb.Region") - proto.RegisterType((*Peer)(nil), "metapb.Peer") - proto.RegisterEnum("metapb.StoreState", StoreState_name, StoreState_value) -} -func (m *Cluster) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Cluster) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Id != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintMetapb(dAtA, i, uint64(m.Id)) - } - if m.MaxPeerCount != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintMetapb(dAtA, i, uint64(m.MaxPeerCount)) - } - return i, nil -} - -func (m *StoreLabel) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *StoreLabel) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Key) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintMetapb(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - } - if len(m.Value) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintMetapb(dAtA, i, uint64(len(m.Value))) - i += copy(dAtA[i:], m.Value) - } - return i, nil -} - -func (m *Store) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Store) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Id != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintMetapb(dAtA, i, uint64(m.Id)) - } - if len(m.Address) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintMetapb(dAtA, i, uint64(len(m.Address))) - i += copy(dAtA[i:], m.Address) - } - if m.State != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintMetapb(dAtA, i, uint64(m.State)) - } - if len(m.Labels) > 0 { - for _, msg := range m.Labels { - dAtA[i] = 0x22 - i++ - i = encodeVarintMetapb(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *RegionEpoch) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RegionEpoch) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.ConfVer != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintMetapb(dAtA, i, uint64(m.ConfVer)) - } - if m.Version != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintMetapb(dAtA, i, uint64(m.Version)) - } - return i, nil -} - -func (m *Region) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Region) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Id != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintMetapb(dAtA, i, uint64(m.Id)) - } - if len(m.StartKey) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintMetapb(dAtA, i, uint64(len(m.StartKey))) - i += copy(dAtA[i:], m.StartKey) - } - if len(m.EndKey) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintMetapb(dAtA, i, uint64(len(m.EndKey))) - i += copy(dAtA[i:], m.EndKey) - } - if m.RegionEpoch != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintMetapb(dAtA, i, uint64(m.RegionEpoch.Size())) - n1, err := m.RegionEpoch.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if len(m.Peers) > 0 { - for _, msg := range m.Peers { - dAtA[i] = 0x2a - i++ - i = encodeVarintMetapb(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *Peer) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Peer) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Id != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintMetapb(dAtA, i, uint64(m.Id)) - } - if m.StoreId != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintMetapb(dAtA, i, uint64(m.StoreId)) - } - if m.IsLearner { - dAtA[i] = 0x18 - i++ - if m.IsLearner { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - return i, nil -} - -func encodeFixed64Metapb(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Metapb(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintMetapb(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *Cluster) Size() (n int) { - var l int - _ = l - if m.Id != 0 { - n += 1 + sovMetapb(uint64(m.Id)) - } - if m.MaxPeerCount != 0 { - n += 1 + sovMetapb(uint64(m.MaxPeerCount)) - } - return n -} - -func (m *StoreLabel) Size() (n int) { - var l int - _ = l - l = len(m.Key) - if l > 0 { - n += 1 + l + sovMetapb(uint64(l)) - } - l = len(m.Value) - if l > 0 { - n += 1 + l + sovMetapb(uint64(l)) - } - return n -} - -func (m *Store) Size() (n int) { - var l int - _ = l - if m.Id != 0 { - n += 1 + sovMetapb(uint64(m.Id)) - } - l = len(m.Address) - if l > 0 { - n += 1 + l + sovMetapb(uint64(l)) - } - if m.State != 0 { - n += 1 + sovMetapb(uint64(m.State)) - } - if len(m.Labels) > 0 { - for _, e := range m.Labels { - l = e.Size() - n += 1 + l + sovMetapb(uint64(l)) - } - } - return n -} - -func (m *RegionEpoch) Size() (n int) { - var l int - _ = l - if m.ConfVer != 0 { - n += 1 + sovMetapb(uint64(m.ConfVer)) - } - if m.Version != 0 { - n += 1 + sovMetapb(uint64(m.Version)) - } - return n -} - -func (m *Region) Size() (n int) { - var l int - _ = l - if m.Id != 0 { - n += 1 + sovMetapb(uint64(m.Id)) - } - l = len(m.StartKey) - if l > 0 { - n += 1 + l + sovMetapb(uint64(l)) - } - l = len(m.EndKey) - if l > 0 { - n += 1 + l + sovMetapb(uint64(l)) - } - if m.RegionEpoch != nil { - l = m.RegionEpoch.Size() - n += 1 + l + sovMetapb(uint64(l)) - } - if len(m.Peers) > 0 { - for _, e := range m.Peers { - l = e.Size() - n += 1 + l + sovMetapb(uint64(l)) - } - } - return n -} - -func (m *Peer) Size() (n int) { - var l int - _ = l - if m.Id != 0 { - n += 1 + sovMetapb(uint64(m.Id)) - } - if m.StoreId != 0 { - n += 1 + sovMetapb(uint64(m.StoreId)) - } - if m.IsLearner { - n += 2 - } - return n -} - -func sovMetapb(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozMetapb(x uint64) (n int) { - return sovMetapb(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *Cluster) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMetapb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Cluster: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Cluster: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) - } - m.Id = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMetapb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Id |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxPeerCount", wireType) - } - m.MaxPeerCount = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMetapb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.MaxPeerCount |= (uint32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipMetapb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthMetapb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *StoreLabel) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMetapb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: StoreLabel: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: StoreLabel: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMetapb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthMetapb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMetapb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthMetapb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Value = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipMetapb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthMetapb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Store) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMetapb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Store: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Store: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) - } - m.Id = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMetapb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Id |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMetapb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthMetapb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Address = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) - } - m.State = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMetapb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.State |= (StoreState(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMetapb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthMetapb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Labels = append(m.Labels, &StoreLabel{}) - if err := m.Labels[len(m.Labels)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipMetapb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthMetapb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RegionEpoch) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMetapb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RegionEpoch: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RegionEpoch: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ConfVer", wireType) - } - m.ConfVer = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMetapb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ConfVer |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) - } - m.Version = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMetapb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Version |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipMetapb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthMetapb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Region) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMetapb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Region: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Region: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) - } - m.Id = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMetapb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Id |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StartKey", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMetapb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthMetapb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.StartKey = append(m.StartKey[:0], dAtA[iNdEx:postIndex]...) - if m.StartKey == nil { - m.StartKey = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EndKey", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMetapb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthMetapb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.EndKey = append(m.EndKey[:0], dAtA[iNdEx:postIndex]...) - if m.EndKey == nil { - m.EndKey = []byte{} - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionEpoch", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMetapb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthMetapb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionEpoch == nil { - m.RegionEpoch = &RegionEpoch{} - } - if err := m.RegionEpoch.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Peers", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMetapb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthMetapb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Peers = append(m.Peers, &Peer{}) - if err := m.Peers[len(m.Peers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipMetapb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthMetapb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Peer) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMetapb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Peer: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Peer: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) - } - m.Id = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMetapb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Id |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StoreId", wireType) - } - m.StoreId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMetapb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.StoreId |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field IsLearner", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMetapb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.IsLearner = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipMetapb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthMetapb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipMetapb(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowMetapb - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowMetapb - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowMetapb - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - iNdEx += length - if length < 0 { - return 0, ErrInvalidLengthMetapb - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowMetapb - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipMetapb(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthMetapb = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowMetapb = fmt.Errorf("proto: integer overflow") -) - -func init() { proto.RegisterFile("metapb.proto", fileDescriptorMetapb) } - -var fileDescriptorMetapb = []byte{ - // 474 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x92, 0xcf, 0x8e, 0xd3, 0x30, - 0x10, 0xc6, 0xd7, 0xfd, 0x93, 0xb6, 0xd3, 0x6e, 0x55, 0x99, 0x95, 0xc8, 0x82, 0xa8, 0xaa, 0x88, - 0x43, 0xd4, 0x43, 0x41, 0x0b, 0xe2, 0x8a, 0xb4, 0x2b, 0x0e, 0x88, 0x95, 0x58, 0x79, 0x81, 0x6b, - 0xe4, 0x26, 0xd3, 0x62, 0x35, 0xb1, 0x23, 0xdb, 0x8d, 0x76, 0x9f, 0x80, 0x57, 0xe0, 0x19, 0x78, - 0x12, 0x8e, 0x3c, 0x02, 0x2a, 0x2f, 0x82, 0xec, 0x24, 0xd2, 0x6a, 0x7b, 0x8a, 0xbf, 0xf9, 0x66, - 0x26, 0xbf, 0xf1, 0x18, 0x26, 0x05, 0x5a, 0x5e, 0xae, 0x57, 0xa5, 0x56, 0x56, 0xd1, 0xa0, 0x56, - 0xcf, 0xce, 0xb6, 0x6a, 0xab, 0x7c, 0xe8, 0x95, 0x3b, 0xd5, 0x6e, 0xf4, 0x1e, 0x06, 0x57, 0xf9, - 0xde, 0x58, 0xd4, 0x74, 0x0a, 0x1d, 0x91, 0x85, 0x64, 0x41, 0xe2, 0x1e, 0xeb, 0x88, 0x8c, 0xbe, - 0x84, 0x69, 0xc1, 0xef, 0x92, 0x12, 0x51, 0x27, 0xa9, 0xda, 0x4b, 0x1b, 0x76, 0x16, 0x24, 0x3e, - 0x65, 0x93, 0x82, 0xdf, 0xdd, 0x20, 0xea, 0x2b, 0x17, 0x8b, 0xde, 0x02, 0xdc, 0x5a, 0xa5, 0xf1, - 0x9a, 0xaf, 0x31, 0xa7, 0x33, 0xe8, 0xee, 0xf0, 0xde, 0x37, 0x19, 0x31, 0x77, 0xa4, 0x67, 0xd0, - 0xaf, 0x78, 0xbe, 0x47, 0x5f, 0x3c, 0x62, 0xb5, 0x88, 0x7e, 0x10, 0xe8, 0xfb, 0xb2, 0xa3, 0xbf, - 0x86, 0x30, 0xe0, 0x59, 0xa6, 0xd1, 0x98, 0xa6, 0xa2, 0x95, 0x34, 0x86, 0xbe, 0xb1, 0xdc, 0x62, - 0xd8, 0x5d, 0x90, 0x78, 0x7a, 0x41, 0x57, 0xcd, 0x98, 0xbe, 0xcf, 0xad, 0x73, 0x58, 0x9d, 0x40, - 0x97, 0x10, 0xe4, 0x0e, 0xc7, 0x84, 0xbd, 0x45, 0x37, 0x1e, 0x3f, 0x4a, 0xf5, 0xa4, 0xac, 0xc9, - 0x88, 0x2e, 0x61, 0xcc, 0x70, 0x2b, 0x94, 0xfc, 0x50, 0xaa, 0xf4, 0x3b, 0x3d, 0x87, 0x61, 0xaa, - 0xe4, 0x26, 0xa9, 0x50, 0x37, 0x50, 0x03, 0xa7, 0xbf, 0xa1, 0x76, 0x64, 0x15, 0x6a, 0x23, 0x94, - 0xf4, 0x64, 0x3d, 0xd6, 0xca, 0xe8, 0x17, 0x81, 0xa0, 0x6e, 0x72, 0x34, 0xce, 0x73, 0x18, 0x19, - 0xcb, 0xb5, 0x4d, 0xdc, 0xb5, 0xb8, 0xb2, 0x09, 0x1b, 0xfa, 0xc0, 0x27, 0xbc, 0xa7, 0x4f, 0x61, - 0x80, 0x32, 0xf3, 0x56, 0xd7, 0x5b, 0x01, 0xca, 0xcc, 0x19, 0xef, 0x60, 0xa2, 0x7d, 0xbf, 0x04, - 0x1d, 0x55, 0xd8, 0x5b, 0x90, 0x78, 0x7c, 0xf1, 0xa4, 0x1d, 0xe3, 0x01, 0x30, 0x1b, 0xeb, 0x07, - 0xf4, 0x11, 0xf4, 0xdd, 0xba, 0x4c, 0xd8, 0xf7, 0x73, 0x4f, 0xda, 0x02, 0xb7, 0x2e, 0x56, 0x5b, - 0xd1, 0x0d, 0xf4, 0x9c, 0x3c, 0x22, 0x3d, 0x87, 0xa1, 0x71, 0xd7, 0x93, 0x88, 0xac, 0x9d, 0xcf, - 0xeb, 0x8f, 0x19, 0x7d, 0x01, 0x20, 0x4c, 0x92, 0x23, 0xd7, 0x12, 0xb5, 0x47, 0x1d, 0xb2, 0x91, - 0x30, 0xd7, 0x75, 0x60, 0xf9, 0xba, 0x79, 0x02, 0x7e, 0x07, 0x34, 0x80, 0xce, 0xd7, 0x72, 0x76, - 0x42, 0xc7, 0x30, 0xf8, 0xbc, 0xd9, 0xe4, 0x42, 0xe2, 0x8c, 0xd0, 0x53, 0x18, 0x7d, 0x51, 0xc5, - 0xda, 0x58, 0x25, 0x71, 0xd6, 0xb9, 0x5c, 0xfe, 0x3e, 0xcc, 0xc9, 0x9f, 0xc3, 0x9c, 0xfc, 0x3d, - 0xcc, 0xc9, 0xcf, 0x7f, 0xf3, 0x13, 0x08, 0x53, 0x55, 0xac, 0x4a, 0x21, 0xb7, 0x29, 0x2f, 0x57, - 0x56, 0xec, 0xaa, 0xd5, 0xae, 0xf2, 0x2f, 0x74, 0x1d, 0xf8, 0xcf, 0x9b, 0xff, 0x01, 0x00, 0x00, - 0xff, 0xff, 0x2a, 0x28, 0xbc, 0x30, 0xd6, 0x02, 0x00, 0x00, -} diff --git a/vendor/github.com/pingcap/kvproto/pkg/pdpb/pdpb.pb.go b/vendor/github.com/pingcap/kvproto/pkg/pdpb/pdpb.pb.go deleted file mode 100644 index 743d00e..0000000 --- a/vendor/github.com/pingcap/kvproto/pkg/pdpb/pdpb.pb.go +++ /dev/null @@ -1,10421 +0,0 @@ -// Code generated by protoc-gen-gogo. -// source: pdpb.proto -// DO NOT EDIT! - -/* - Package pdpb is a generated protocol buffer package. - - It is generated from these files: - pdpb.proto - - It has these top-level messages: - RequestHeader - ResponseHeader - Error - TsoRequest - Timestamp - TsoResponse - BootstrapRequest - BootstrapResponse - IsBootstrappedRequest - IsBootstrappedResponse - AllocIDRequest - AllocIDResponse - GetStoreRequest - GetStoreResponse - PutStoreRequest - PutStoreResponse - GetAllStoresRequest - GetAllStoresResponse - GetRegionRequest - GetRegionResponse - GetRegionByIDRequest - GetClusterConfigRequest - GetClusterConfigResponse - PutClusterConfigRequest - PutClusterConfigResponse - Member - GetMembersRequest - GetMembersResponse - PeerStats - RegionHeartbeatRequest - ChangePeer - TransferLeader - Merge - SplitRegion - RegionHeartbeatResponse - AskSplitRequest - AskSplitResponse - ReportSplitRequest - ReportSplitResponse - TimeInterval - StoreStats - StoreHeartbeatRequest - StoreHeartbeatResponse - ScatterRegionRequest - ScatterRegionResponse -*/ -package pdpb - -import ( - "fmt" - "io" - "math" - - proto "github.com/golang/protobuf/proto" - - metapb "github.com/pingcap/kvproto/pkg/metapb" - - eraftpb "github.com/pingcap/kvproto/pkg/eraftpb" - - context "golang.org/x/net/context" - - grpc "google.golang.org/grpc" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -type ErrorType int32 - -const ( - ErrorType_OK ErrorType = 0 - ErrorType_UNKNOWN ErrorType = 1 - ErrorType_NOT_BOOTSTRAPPED ErrorType = 2 - ErrorType_STORE_TOMBSTONE ErrorType = 3 - ErrorType_ALREADY_BOOTSTRAPPED ErrorType = 4 -) - -var ErrorType_name = map[int32]string{ - 0: "OK", - 1: "UNKNOWN", - 2: "NOT_BOOTSTRAPPED", - 3: "STORE_TOMBSTONE", - 4: "ALREADY_BOOTSTRAPPED", -} -var ErrorType_value = map[string]int32{ - "OK": 0, - "UNKNOWN": 1, - "NOT_BOOTSTRAPPED": 2, - "STORE_TOMBSTONE": 3, - "ALREADY_BOOTSTRAPPED": 4, -} - -func (x ErrorType) String() string { - return proto.EnumName(ErrorType_name, int32(x)) -} -func (ErrorType) EnumDescriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{0} } - -type RequestHeader struct { - // cluster_id is the ID of the cluster which be sent to. - ClusterId uint64 `protobuf:"varint,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` -} - -func (m *RequestHeader) Reset() { *m = RequestHeader{} } -func (m *RequestHeader) String() string { return proto.CompactTextString(m) } -func (*RequestHeader) ProtoMessage() {} -func (*RequestHeader) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{0} } - -func (m *RequestHeader) GetClusterId() uint64 { - if m != nil { - return m.ClusterId - } - return 0 -} - -type ResponseHeader struct { - // cluster_id is the ID of the cluster which sent the response. - ClusterId uint64 `protobuf:"varint,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` - Error *Error `protobuf:"bytes,2,opt,name=error" json:"error,omitempty"` -} - -func (m *ResponseHeader) Reset() { *m = ResponseHeader{} } -func (m *ResponseHeader) String() string { return proto.CompactTextString(m) } -func (*ResponseHeader) ProtoMessage() {} -func (*ResponseHeader) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{1} } - -func (m *ResponseHeader) GetClusterId() uint64 { - if m != nil { - return m.ClusterId - } - return 0 -} - -func (m *ResponseHeader) GetError() *Error { - if m != nil { - return m.Error - } - return nil -} - -type Error struct { - Type ErrorType `protobuf:"varint,1,opt,name=type,proto3,enum=pdpb.ErrorType" json:"type,omitempty"` - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` -} - -func (m *Error) Reset() { *m = Error{} } -func (m *Error) String() string { return proto.CompactTextString(m) } -func (*Error) ProtoMessage() {} -func (*Error) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{2} } - -func (m *Error) GetType() ErrorType { - if m != nil { - return m.Type - } - return ErrorType_OK -} - -func (m *Error) GetMessage() string { - if m != nil { - return m.Message - } - return "" -} - -type TsoRequest struct { - Header *RequestHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - Count uint32 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` -} - -func (m *TsoRequest) Reset() { *m = TsoRequest{} } -func (m *TsoRequest) String() string { return proto.CompactTextString(m) } -func (*TsoRequest) ProtoMessage() {} -func (*TsoRequest) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{3} } - -func (m *TsoRequest) GetHeader() *RequestHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *TsoRequest) GetCount() uint32 { - if m != nil { - return m.Count - } - return 0 -} - -type Timestamp struct { - Physical int64 `protobuf:"varint,1,opt,name=physical,proto3" json:"physical,omitempty"` - Logical int64 `protobuf:"varint,2,opt,name=logical,proto3" json:"logical,omitempty"` -} - -func (m *Timestamp) Reset() { *m = Timestamp{} } -func (m *Timestamp) String() string { return proto.CompactTextString(m) } -func (*Timestamp) ProtoMessage() {} -func (*Timestamp) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{4} } - -func (m *Timestamp) GetPhysical() int64 { - if m != nil { - return m.Physical - } - return 0 -} - -func (m *Timestamp) GetLogical() int64 { - if m != nil { - return m.Logical - } - return 0 -} - -type TsoResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - Count uint32 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` - Timestamp *Timestamp `protobuf:"bytes,3,opt,name=timestamp" json:"timestamp,omitempty"` -} - -func (m *TsoResponse) Reset() { *m = TsoResponse{} } -func (m *TsoResponse) String() string { return proto.CompactTextString(m) } -func (*TsoResponse) ProtoMessage() {} -func (*TsoResponse) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{5} } - -func (m *TsoResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *TsoResponse) GetCount() uint32 { - if m != nil { - return m.Count - } - return 0 -} - -func (m *TsoResponse) GetTimestamp() *Timestamp { - if m != nil { - return m.Timestamp - } - return nil -} - -type BootstrapRequest struct { - Header *RequestHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - Store *metapb.Store `protobuf:"bytes,2,opt,name=store" json:"store,omitempty"` - Region *metapb.Region `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` -} - -func (m *BootstrapRequest) Reset() { *m = BootstrapRequest{} } -func (m *BootstrapRequest) String() string { return proto.CompactTextString(m) } -func (*BootstrapRequest) ProtoMessage() {} -func (*BootstrapRequest) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{6} } - -func (m *BootstrapRequest) GetHeader() *RequestHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *BootstrapRequest) GetStore() *metapb.Store { - if m != nil { - return m.Store - } - return nil -} - -func (m *BootstrapRequest) GetRegion() *metapb.Region { - if m != nil { - return m.Region - } - return nil -} - -type BootstrapResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *BootstrapResponse) Reset() { *m = BootstrapResponse{} } -func (m *BootstrapResponse) String() string { return proto.CompactTextString(m) } -func (*BootstrapResponse) ProtoMessage() {} -func (*BootstrapResponse) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{7} } - -func (m *BootstrapResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -type IsBootstrappedRequest struct { - Header *RequestHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *IsBootstrappedRequest) Reset() { *m = IsBootstrappedRequest{} } -func (m *IsBootstrappedRequest) String() string { return proto.CompactTextString(m) } -func (*IsBootstrappedRequest) ProtoMessage() {} -func (*IsBootstrappedRequest) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{8} } - -func (m *IsBootstrappedRequest) GetHeader() *RequestHeader { - if m != nil { - return m.Header - } - return nil -} - -type IsBootstrappedResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - Bootstrapped bool `protobuf:"varint,2,opt,name=bootstrapped,proto3" json:"bootstrapped,omitempty"` -} - -func (m *IsBootstrappedResponse) Reset() { *m = IsBootstrappedResponse{} } -func (m *IsBootstrappedResponse) String() string { return proto.CompactTextString(m) } -func (*IsBootstrappedResponse) ProtoMessage() {} -func (*IsBootstrappedResponse) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{9} } - -func (m *IsBootstrappedResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *IsBootstrappedResponse) GetBootstrapped() bool { - if m != nil { - return m.Bootstrapped - } - return false -} - -type AllocIDRequest struct { - Header *RequestHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *AllocIDRequest) Reset() { *m = AllocIDRequest{} } -func (m *AllocIDRequest) String() string { return proto.CompactTextString(m) } -func (*AllocIDRequest) ProtoMessage() {} -func (*AllocIDRequest) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{10} } - -func (m *AllocIDRequest) GetHeader() *RequestHeader { - if m != nil { - return m.Header - } - return nil -} - -type AllocIDResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - Id uint64 `protobuf:"varint,2,opt,name=id,proto3" json:"id,omitempty"` -} - -func (m *AllocIDResponse) Reset() { *m = AllocIDResponse{} } -func (m *AllocIDResponse) String() string { return proto.CompactTextString(m) } -func (*AllocIDResponse) ProtoMessage() {} -func (*AllocIDResponse) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{11} } - -func (m *AllocIDResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *AllocIDResponse) GetId() uint64 { - if m != nil { - return m.Id - } - return 0 -} - -type GetStoreRequest struct { - Header *RequestHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - StoreId uint64 `protobuf:"varint,2,opt,name=store_id,json=storeId,proto3" json:"store_id,omitempty"` -} - -func (m *GetStoreRequest) Reset() { *m = GetStoreRequest{} } -func (m *GetStoreRequest) String() string { return proto.CompactTextString(m) } -func (*GetStoreRequest) ProtoMessage() {} -func (*GetStoreRequest) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{12} } - -func (m *GetStoreRequest) GetHeader() *RequestHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *GetStoreRequest) GetStoreId() uint64 { - if m != nil { - return m.StoreId - } - return 0 -} - -type GetStoreResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - Store *metapb.Store `protobuf:"bytes,2,opt,name=store" json:"store,omitempty"` -} - -func (m *GetStoreResponse) Reset() { *m = GetStoreResponse{} } -func (m *GetStoreResponse) String() string { return proto.CompactTextString(m) } -func (*GetStoreResponse) ProtoMessage() {} -func (*GetStoreResponse) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{13} } - -func (m *GetStoreResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *GetStoreResponse) GetStore() *metapb.Store { - if m != nil { - return m.Store - } - return nil -} - -type PutStoreRequest struct { - Header *RequestHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - Store *metapb.Store `protobuf:"bytes,2,opt,name=store" json:"store,omitempty"` -} - -func (m *PutStoreRequest) Reset() { *m = PutStoreRequest{} } -func (m *PutStoreRequest) String() string { return proto.CompactTextString(m) } -func (*PutStoreRequest) ProtoMessage() {} -func (*PutStoreRequest) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{14} } - -func (m *PutStoreRequest) GetHeader() *RequestHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *PutStoreRequest) GetStore() *metapb.Store { - if m != nil { - return m.Store - } - return nil -} - -type PutStoreResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *PutStoreResponse) Reset() { *m = PutStoreResponse{} } -func (m *PutStoreResponse) String() string { return proto.CompactTextString(m) } -func (*PutStoreResponse) ProtoMessage() {} -func (*PutStoreResponse) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{15} } - -func (m *PutStoreResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -type GetAllStoresRequest struct { - Header *RequestHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *GetAllStoresRequest) Reset() { *m = GetAllStoresRequest{} } -func (m *GetAllStoresRequest) String() string { return proto.CompactTextString(m) } -func (*GetAllStoresRequest) ProtoMessage() {} -func (*GetAllStoresRequest) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{16} } - -func (m *GetAllStoresRequest) GetHeader() *RequestHeader { - if m != nil { - return m.Header - } - return nil -} - -type GetAllStoresResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - Stores []*metapb.Store `protobuf:"bytes,2,rep,name=stores" json:"stores,omitempty"` -} - -func (m *GetAllStoresResponse) Reset() { *m = GetAllStoresResponse{} } -func (m *GetAllStoresResponse) String() string { return proto.CompactTextString(m) } -func (*GetAllStoresResponse) ProtoMessage() {} -func (*GetAllStoresResponse) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{17} } - -func (m *GetAllStoresResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *GetAllStoresResponse) GetStores() []*metapb.Store { - if m != nil { - return m.Stores - } - return nil -} - -type GetRegionRequest struct { - Header *RequestHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - RegionKey []byte `protobuf:"bytes,2,opt,name=region_key,json=regionKey,proto3" json:"region_key,omitempty"` -} - -func (m *GetRegionRequest) Reset() { *m = GetRegionRequest{} } -func (m *GetRegionRequest) String() string { return proto.CompactTextString(m) } -func (*GetRegionRequest) ProtoMessage() {} -func (*GetRegionRequest) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{18} } - -func (m *GetRegionRequest) GetHeader() *RequestHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *GetRegionRequest) GetRegionKey() []byte { - if m != nil { - return m.RegionKey - } - return nil -} - -type GetRegionResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - Region *metapb.Region `protobuf:"bytes,2,opt,name=region" json:"region,omitempty"` - Leader *metapb.Peer `protobuf:"bytes,3,opt,name=leader" json:"leader,omitempty"` -} - -func (m *GetRegionResponse) Reset() { *m = GetRegionResponse{} } -func (m *GetRegionResponse) String() string { return proto.CompactTextString(m) } -func (*GetRegionResponse) ProtoMessage() {} -func (*GetRegionResponse) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{19} } - -func (m *GetRegionResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *GetRegionResponse) GetRegion() *metapb.Region { - if m != nil { - return m.Region - } - return nil -} - -func (m *GetRegionResponse) GetLeader() *metapb.Peer { - if m != nil { - return m.Leader - } - return nil -} - -type GetRegionByIDRequest struct { - Header *RequestHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - RegionId uint64 `protobuf:"varint,2,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` -} - -func (m *GetRegionByIDRequest) Reset() { *m = GetRegionByIDRequest{} } -func (m *GetRegionByIDRequest) String() string { return proto.CompactTextString(m) } -func (*GetRegionByIDRequest) ProtoMessage() {} -func (*GetRegionByIDRequest) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{20} } - -func (m *GetRegionByIDRequest) GetHeader() *RequestHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *GetRegionByIDRequest) GetRegionId() uint64 { - if m != nil { - return m.RegionId - } - return 0 -} - -type GetClusterConfigRequest struct { - Header *RequestHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *GetClusterConfigRequest) Reset() { *m = GetClusterConfigRequest{} } -func (m *GetClusterConfigRequest) String() string { return proto.CompactTextString(m) } -func (*GetClusterConfigRequest) ProtoMessage() {} -func (*GetClusterConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{21} } - -func (m *GetClusterConfigRequest) GetHeader() *RequestHeader { - if m != nil { - return m.Header - } - return nil -} - -type GetClusterConfigResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - Cluster *metapb.Cluster `protobuf:"bytes,2,opt,name=cluster" json:"cluster,omitempty"` -} - -func (m *GetClusterConfigResponse) Reset() { *m = GetClusterConfigResponse{} } -func (m *GetClusterConfigResponse) String() string { return proto.CompactTextString(m) } -func (*GetClusterConfigResponse) ProtoMessage() {} -func (*GetClusterConfigResponse) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{22} } - -func (m *GetClusterConfigResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *GetClusterConfigResponse) GetCluster() *metapb.Cluster { - if m != nil { - return m.Cluster - } - return nil -} - -type PutClusterConfigRequest struct { - Header *RequestHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - Cluster *metapb.Cluster `protobuf:"bytes,2,opt,name=cluster" json:"cluster,omitempty"` -} - -func (m *PutClusterConfigRequest) Reset() { *m = PutClusterConfigRequest{} } -func (m *PutClusterConfigRequest) String() string { return proto.CompactTextString(m) } -func (*PutClusterConfigRequest) ProtoMessage() {} -func (*PutClusterConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{23} } - -func (m *PutClusterConfigRequest) GetHeader() *RequestHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *PutClusterConfigRequest) GetCluster() *metapb.Cluster { - if m != nil { - return m.Cluster - } - return nil -} - -type PutClusterConfigResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *PutClusterConfigResponse) Reset() { *m = PutClusterConfigResponse{} } -func (m *PutClusterConfigResponse) String() string { return proto.CompactTextString(m) } -func (*PutClusterConfigResponse) ProtoMessage() {} -func (*PutClusterConfigResponse) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{24} } - -func (m *PutClusterConfigResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -type Member struct { - // name is the name of the PD member. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // member_id is the unique id of the PD member. - MemberId uint64 `protobuf:"varint,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` - PeerUrls []string `protobuf:"bytes,3,rep,name=peer_urls,json=peerUrls" json:"peer_urls,omitempty"` - ClientUrls []string `protobuf:"bytes,4,rep,name=client_urls,json=clientUrls" json:"client_urls,omitempty"` - LeaderPriority int32 `protobuf:"varint,5,opt,name=leader_priority,json=leaderPriority,proto3" json:"leader_priority,omitempty"` -} - -func (m *Member) Reset() { *m = Member{} } -func (m *Member) String() string { return proto.CompactTextString(m) } -func (*Member) ProtoMessage() {} -func (*Member) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{25} } - -func (m *Member) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *Member) GetMemberId() uint64 { - if m != nil { - return m.MemberId - } - return 0 -} - -func (m *Member) GetPeerUrls() []string { - if m != nil { - return m.PeerUrls - } - return nil -} - -func (m *Member) GetClientUrls() []string { - if m != nil { - return m.ClientUrls - } - return nil -} - -func (m *Member) GetLeaderPriority() int32 { - if m != nil { - return m.LeaderPriority - } - return 0 -} - -type GetMembersRequest struct { - Header *RequestHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *GetMembersRequest) Reset() { *m = GetMembersRequest{} } -func (m *GetMembersRequest) String() string { return proto.CompactTextString(m) } -func (*GetMembersRequest) ProtoMessage() {} -func (*GetMembersRequest) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{26} } - -func (m *GetMembersRequest) GetHeader() *RequestHeader { - if m != nil { - return m.Header - } - return nil -} - -type GetMembersResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - Members []*Member `protobuf:"bytes,2,rep,name=members" json:"members,omitempty"` - Leader *Member `protobuf:"bytes,3,opt,name=leader" json:"leader,omitempty"` - EtcdLeader *Member `protobuf:"bytes,4,opt,name=etcd_leader,json=etcdLeader" json:"etcd_leader,omitempty"` -} - -func (m *GetMembersResponse) Reset() { *m = GetMembersResponse{} } -func (m *GetMembersResponse) String() string { return proto.CompactTextString(m) } -func (*GetMembersResponse) ProtoMessage() {} -func (*GetMembersResponse) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{27} } - -func (m *GetMembersResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *GetMembersResponse) GetMembers() []*Member { - if m != nil { - return m.Members - } - return nil -} - -func (m *GetMembersResponse) GetLeader() *Member { - if m != nil { - return m.Leader - } - return nil -} - -func (m *GetMembersResponse) GetEtcdLeader() *Member { - if m != nil { - return m.EtcdLeader - } - return nil -} - -type PeerStats struct { - Peer *metapb.Peer `protobuf:"bytes,1,opt,name=peer" json:"peer,omitempty"` - DownSeconds uint64 `protobuf:"varint,2,opt,name=down_seconds,json=downSeconds,proto3" json:"down_seconds,omitempty"` -} - -func (m *PeerStats) Reset() { *m = PeerStats{} } -func (m *PeerStats) String() string { return proto.CompactTextString(m) } -func (*PeerStats) ProtoMessage() {} -func (*PeerStats) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{28} } - -func (m *PeerStats) GetPeer() *metapb.Peer { - if m != nil { - return m.Peer - } - return nil -} - -func (m *PeerStats) GetDownSeconds() uint64 { - if m != nil { - return m.DownSeconds - } - return 0 -} - -type RegionHeartbeatRequest struct { - Header *RequestHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - Region *metapb.Region `protobuf:"bytes,2,opt,name=region" json:"region,omitempty"` - // Leader Peer sending the heartbeat. - Leader *metapb.Peer `protobuf:"bytes,3,opt,name=leader" json:"leader,omitempty"` - // Leader considers that these peers are down. - DownPeers []*PeerStats `protobuf:"bytes,4,rep,name=down_peers,json=downPeers" json:"down_peers,omitempty"` - // Pending peers are the peers that the leader can't consider as - // working followers. - PendingPeers []*metapb.Peer `protobuf:"bytes,5,rep,name=pending_peers,json=pendingPeers" json:"pending_peers,omitempty"` - // Bytes read/written during this period. - BytesWritten uint64 `protobuf:"varint,6,opt,name=bytes_written,json=bytesWritten,proto3" json:"bytes_written,omitempty"` - BytesRead uint64 `protobuf:"varint,7,opt,name=bytes_read,json=bytesRead,proto3" json:"bytes_read,omitempty"` - // Keys read/written during this period. - KeysWritten uint64 `protobuf:"varint,8,opt,name=keys_written,json=keysWritten,proto3" json:"keys_written,omitempty"` - KeysRead uint64 `protobuf:"varint,9,opt,name=keys_read,json=keysRead,proto3" json:"keys_read,omitempty"` - // Approximate region size. - ApproximateSize uint64 `protobuf:"varint,10,opt,name=approximate_size,json=approximateSize,proto3" json:"approximate_size,omitempty"` - // Actually reported time interval - Interval *TimeInterval `protobuf:"bytes,12,opt,name=interval" json:"interval,omitempty"` - // Approximate number of records. - ApproximateRows uint64 `protobuf:"varint,13,opt,name=approximate_rows,json=approximateRows,proto3" json:"approximate_rows,omitempty"` -} - -func (m *RegionHeartbeatRequest) Reset() { *m = RegionHeartbeatRequest{} } -func (m *RegionHeartbeatRequest) String() string { return proto.CompactTextString(m) } -func (*RegionHeartbeatRequest) ProtoMessage() {} -func (*RegionHeartbeatRequest) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{29} } - -func (m *RegionHeartbeatRequest) GetHeader() *RequestHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *RegionHeartbeatRequest) GetRegion() *metapb.Region { - if m != nil { - return m.Region - } - return nil -} - -func (m *RegionHeartbeatRequest) GetLeader() *metapb.Peer { - if m != nil { - return m.Leader - } - return nil -} - -func (m *RegionHeartbeatRequest) GetDownPeers() []*PeerStats { - if m != nil { - return m.DownPeers - } - return nil -} - -func (m *RegionHeartbeatRequest) GetPendingPeers() []*metapb.Peer { - if m != nil { - return m.PendingPeers - } - return nil -} - -func (m *RegionHeartbeatRequest) GetBytesWritten() uint64 { - if m != nil { - return m.BytesWritten - } - return 0 -} - -func (m *RegionHeartbeatRequest) GetBytesRead() uint64 { - if m != nil { - return m.BytesRead - } - return 0 -} - -func (m *RegionHeartbeatRequest) GetKeysWritten() uint64 { - if m != nil { - return m.KeysWritten - } - return 0 -} - -func (m *RegionHeartbeatRequest) GetKeysRead() uint64 { - if m != nil { - return m.KeysRead - } - return 0 -} - -func (m *RegionHeartbeatRequest) GetApproximateSize() uint64 { - if m != nil { - return m.ApproximateSize - } - return 0 -} - -func (m *RegionHeartbeatRequest) GetInterval() *TimeInterval { - if m != nil { - return m.Interval - } - return nil -} - -func (m *RegionHeartbeatRequest) GetApproximateRows() uint64 { - if m != nil { - return m.ApproximateRows - } - return 0 -} - -type ChangePeer struct { - Peer *metapb.Peer `protobuf:"bytes,1,opt,name=peer" json:"peer,omitempty"` - ChangeType eraftpb.ConfChangeType `protobuf:"varint,2,opt,name=change_type,json=changeType,proto3,enum=eraftpb.ConfChangeType" json:"change_type,omitempty"` -} - -func (m *ChangePeer) Reset() { *m = ChangePeer{} } -func (m *ChangePeer) String() string { return proto.CompactTextString(m) } -func (*ChangePeer) ProtoMessage() {} -func (*ChangePeer) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{30} } - -func (m *ChangePeer) GetPeer() *metapb.Peer { - if m != nil { - return m.Peer - } - return nil -} - -func (m *ChangePeer) GetChangeType() eraftpb.ConfChangeType { - if m != nil { - return m.ChangeType - } - return eraftpb.ConfChangeType_AddNode -} - -type TransferLeader struct { - Peer *metapb.Peer `protobuf:"bytes,1,opt,name=peer" json:"peer,omitempty"` -} - -func (m *TransferLeader) Reset() { *m = TransferLeader{} } -func (m *TransferLeader) String() string { return proto.CompactTextString(m) } -func (*TransferLeader) ProtoMessage() {} -func (*TransferLeader) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{31} } - -func (m *TransferLeader) GetPeer() *metapb.Peer { - if m != nil { - return m.Peer - } - return nil -} - -type Merge struct { - Target *metapb.Region `protobuf:"bytes,1,opt,name=target" json:"target,omitempty"` -} - -func (m *Merge) Reset() { *m = Merge{} } -func (m *Merge) String() string { return proto.CompactTextString(m) } -func (*Merge) ProtoMessage() {} -func (*Merge) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{32} } - -func (m *Merge) GetTarget() *metapb.Region { - if m != nil { - return m.Target - } - return nil -} - -type SplitRegion struct { -} - -func (m *SplitRegion) Reset() { *m = SplitRegion{} } -func (m *SplitRegion) String() string { return proto.CompactTextString(m) } -func (*SplitRegion) ProtoMessage() {} -func (*SplitRegion) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{33} } - -type RegionHeartbeatResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - // Notice, Pd only allows handling reported epoch >= current pd's. - // Leader peer reports region status with RegionHeartbeatRequest - // to pd regularly, pd will determine whether this region - // should do ChangePeer or not. - // E,g, max peer number is 3, region A, first only peer 1 in A. - // 1. Pd region state -> Peers (1), ConfVer (1). - // 2. Leader peer 1 reports region state to pd, pd finds the - // peer number is < 3, so first changes its current region - // state -> Peers (1, 2), ConfVer (1), and returns ChangePeer Adding 2. - // 3. Leader does ChangePeer, then reports Peers (1, 2), ConfVer (2), - // pd updates its state -> Peers (1, 2), ConfVer (2). - // 4. Leader may report old Peers (1), ConfVer (1) to pd before ConfChange - // finished, pd stills responses ChangePeer Adding 2, of course, we must - // guarantee the second ChangePeer can't be applied in TiKV. - ChangePeer *ChangePeer `protobuf:"bytes,2,opt,name=change_peer,json=changePeer" json:"change_peer,omitempty"` - // Pd can return transfer_leader to let TiKV does leader transfer itself. - TransferLeader *TransferLeader `protobuf:"bytes,3,opt,name=transfer_leader,json=transferLeader" json:"transfer_leader,omitempty"` - // ID of the region - RegionId uint64 `protobuf:"varint,4,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - RegionEpoch *metapb.RegionEpoch `protobuf:"bytes,5,opt,name=region_epoch,json=regionEpoch" json:"region_epoch,omitempty"` - // Leader of the region at the moment of the corresponding request was made. - TargetPeer *metapb.Peer `protobuf:"bytes,6,opt,name=target_peer,json=targetPeer" json:"target_peer,omitempty"` - Merge *Merge `protobuf:"bytes,7,opt,name=merge" json:"merge,omitempty"` - // PD sends split_region to let TiKV split a region into two regions. - SplitRegion *SplitRegion `protobuf:"bytes,8,opt,name=split_region,json=splitRegion" json:"split_region,omitempty"` -} - -func (m *RegionHeartbeatResponse) Reset() { *m = RegionHeartbeatResponse{} } -func (m *RegionHeartbeatResponse) String() string { return proto.CompactTextString(m) } -func (*RegionHeartbeatResponse) ProtoMessage() {} -func (*RegionHeartbeatResponse) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{34} } - -func (m *RegionHeartbeatResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *RegionHeartbeatResponse) GetChangePeer() *ChangePeer { - if m != nil { - return m.ChangePeer - } - return nil -} - -func (m *RegionHeartbeatResponse) GetTransferLeader() *TransferLeader { - if m != nil { - return m.TransferLeader - } - return nil -} - -func (m *RegionHeartbeatResponse) GetRegionId() uint64 { - if m != nil { - return m.RegionId - } - return 0 -} - -func (m *RegionHeartbeatResponse) GetRegionEpoch() *metapb.RegionEpoch { - if m != nil { - return m.RegionEpoch - } - return nil -} - -func (m *RegionHeartbeatResponse) GetTargetPeer() *metapb.Peer { - if m != nil { - return m.TargetPeer - } - return nil -} - -func (m *RegionHeartbeatResponse) GetMerge() *Merge { - if m != nil { - return m.Merge - } - return nil -} - -func (m *RegionHeartbeatResponse) GetSplitRegion() *SplitRegion { - if m != nil { - return m.SplitRegion - } - return nil -} - -type AskSplitRequest struct { - Header *RequestHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - Region *metapb.Region `protobuf:"bytes,2,opt,name=region" json:"region,omitempty"` -} - -func (m *AskSplitRequest) Reset() { *m = AskSplitRequest{} } -func (m *AskSplitRequest) String() string { return proto.CompactTextString(m) } -func (*AskSplitRequest) ProtoMessage() {} -func (*AskSplitRequest) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{35} } - -func (m *AskSplitRequest) GetHeader() *RequestHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *AskSplitRequest) GetRegion() *metapb.Region { - if m != nil { - return m.Region - } - return nil -} - -type AskSplitResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - // We split the region into two, first uses the origin - // parent region id, and the second uses the new_region_id. - // We must guarantee that the new_region_id is global unique. - NewRegionId uint64 `protobuf:"varint,2,opt,name=new_region_id,json=newRegionId,proto3" json:"new_region_id,omitempty"` - // The peer ids for the new split region. - NewPeerIds []uint64 `protobuf:"varint,3,rep,packed,name=new_peer_ids,json=newPeerIds" json:"new_peer_ids,omitempty"` -} - -func (m *AskSplitResponse) Reset() { *m = AskSplitResponse{} } -func (m *AskSplitResponse) String() string { return proto.CompactTextString(m) } -func (*AskSplitResponse) ProtoMessage() {} -func (*AskSplitResponse) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{36} } - -func (m *AskSplitResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *AskSplitResponse) GetNewRegionId() uint64 { - if m != nil { - return m.NewRegionId - } - return 0 -} - -func (m *AskSplitResponse) GetNewPeerIds() []uint64 { - if m != nil { - return m.NewPeerIds - } - return nil -} - -type ReportSplitRequest struct { - Header *RequestHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - Left *metapb.Region `protobuf:"bytes,2,opt,name=left" json:"left,omitempty"` - Right *metapb.Region `protobuf:"bytes,3,opt,name=right" json:"right,omitempty"` -} - -func (m *ReportSplitRequest) Reset() { *m = ReportSplitRequest{} } -func (m *ReportSplitRequest) String() string { return proto.CompactTextString(m) } -func (*ReportSplitRequest) ProtoMessage() {} -func (*ReportSplitRequest) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{37} } - -func (m *ReportSplitRequest) GetHeader() *RequestHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *ReportSplitRequest) GetLeft() *metapb.Region { - if m != nil { - return m.Left - } - return nil -} - -func (m *ReportSplitRequest) GetRight() *metapb.Region { - if m != nil { - return m.Right - } - return nil -} - -type ReportSplitResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *ReportSplitResponse) Reset() { *m = ReportSplitResponse{} } -func (m *ReportSplitResponse) String() string { return proto.CompactTextString(m) } -func (*ReportSplitResponse) ProtoMessage() {} -func (*ReportSplitResponse) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{38} } - -func (m *ReportSplitResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -type TimeInterval struct { - // The unix timestamp in seconds of the start of this period. - StartTimestamp uint64 `protobuf:"varint,1,opt,name=start_timestamp,json=startTimestamp,proto3" json:"start_timestamp,omitempty"` - // The unix timestamp in seconds of the end of this period. - EndTimestamp uint64 `protobuf:"varint,2,opt,name=end_timestamp,json=endTimestamp,proto3" json:"end_timestamp,omitempty"` -} - -func (m *TimeInterval) Reset() { *m = TimeInterval{} } -func (m *TimeInterval) String() string { return proto.CompactTextString(m) } -func (*TimeInterval) ProtoMessage() {} -func (*TimeInterval) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{39} } - -func (m *TimeInterval) GetStartTimestamp() uint64 { - if m != nil { - return m.StartTimestamp - } - return 0 -} - -func (m *TimeInterval) GetEndTimestamp() uint64 { - if m != nil { - return m.EndTimestamp - } - return 0 -} - -type StoreStats struct { - StoreId uint64 `protobuf:"varint,1,opt,name=store_id,json=storeId,proto3" json:"store_id,omitempty"` - // Capacity for the store. - Capacity uint64 `protobuf:"varint,2,opt,name=capacity,proto3" json:"capacity,omitempty"` - // Available size for the store. - Available uint64 `protobuf:"varint,3,opt,name=available,proto3" json:"available,omitempty"` - // Total region count in this store. - RegionCount uint32 `protobuf:"varint,4,opt,name=region_count,json=regionCount,proto3" json:"region_count,omitempty"` - // Current sending snapshot count. - SendingSnapCount uint32 `protobuf:"varint,5,opt,name=sending_snap_count,json=sendingSnapCount,proto3" json:"sending_snap_count,omitempty"` - // Current receiving snapshot count. - ReceivingSnapCount uint32 `protobuf:"varint,6,opt,name=receiving_snap_count,json=receivingSnapCount,proto3" json:"receiving_snap_count,omitempty"` - // When the store is started (unix timestamp in seconds). - StartTime uint32 `protobuf:"varint,7,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` - // How many region is applying snapshot. - ApplyingSnapCount uint32 `protobuf:"varint,8,opt,name=applying_snap_count,json=applyingSnapCount,proto3" json:"applying_snap_count,omitempty"` - // If the store is busy - IsBusy bool `protobuf:"varint,9,opt,name=is_busy,json=isBusy,proto3" json:"is_busy,omitempty"` - // Actually used space by db - UsedSize uint64 `protobuf:"varint,10,opt,name=used_size,json=usedSize,proto3" json:"used_size,omitempty"` - // Bytes written for the store during this period. - BytesWritten uint64 `protobuf:"varint,11,opt,name=bytes_written,json=bytesWritten,proto3" json:"bytes_written,omitempty"` - // Keys written for the store during this period. - KeysWritten uint64 `protobuf:"varint,12,opt,name=keys_written,json=keysWritten,proto3" json:"keys_written,omitempty"` - // Bytes read for the store during this period. - BytesRead uint64 `protobuf:"varint,13,opt,name=bytes_read,json=bytesRead,proto3" json:"bytes_read,omitempty"` - // Keys read for the store during this period. - KeysRead uint64 `protobuf:"varint,14,opt,name=keys_read,json=keysRead,proto3" json:"keys_read,omitempty"` - // Actually reported time interval - Interval *TimeInterval `protobuf:"bytes,15,opt,name=interval" json:"interval,omitempty"` -} - -func (m *StoreStats) Reset() { *m = StoreStats{} } -func (m *StoreStats) String() string { return proto.CompactTextString(m) } -func (*StoreStats) ProtoMessage() {} -func (*StoreStats) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{40} } - -func (m *StoreStats) GetStoreId() uint64 { - if m != nil { - return m.StoreId - } - return 0 -} - -func (m *StoreStats) GetCapacity() uint64 { - if m != nil { - return m.Capacity - } - return 0 -} - -func (m *StoreStats) GetAvailable() uint64 { - if m != nil { - return m.Available - } - return 0 -} - -func (m *StoreStats) GetRegionCount() uint32 { - if m != nil { - return m.RegionCount - } - return 0 -} - -func (m *StoreStats) GetSendingSnapCount() uint32 { - if m != nil { - return m.SendingSnapCount - } - return 0 -} - -func (m *StoreStats) GetReceivingSnapCount() uint32 { - if m != nil { - return m.ReceivingSnapCount - } - return 0 -} - -func (m *StoreStats) GetStartTime() uint32 { - if m != nil { - return m.StartTime - } - return 0 -} - -func (m *StoreStats) GetApplyingSnapCount() uint32 { - if m != nil { - return m.ApplyingSnapCount - } - return 0 -} - -func (m *StoreStats) GetIsBusy() bool { - if m != nil { - return m.IsBusy - } - return false -} - -func (m *StoreStats) GetUsedSize() uint64 { - if m != nil { - return m.UsedSize - } - return 0 -} - -func (m *StoreStats) GetBytesWritten() uint64 { - if m != nil { - return m.BytesWritten - } - return 0 -} - -func (m *StoreStats) GetKeysWritten() uint64 { - if m != nil { - return m.KeysWritten - } - return 0 -} - -func (m *StoreStats) GetBytesRead() uint64 { - if m != nil { - return m.BytesRead - } - return 0 -} - -func (m *StoreStats) GetKeysRead() uint64 { - if m != nil { - return m.KeysRead - } - return 0 -} - -func (m *StoreStats) GetInterval() *TimeInterval { - if m != nil { - return m.Interval - } - return nil -} - -type StoreHeartbeatRequest struct { - Header *RequestHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - Stats *StoreStats `protobuf:"bytes,2,opt,name=stats" json:"stats,omitempty"` -} - -func (m *StoreHeartbeatRequest) Reset() { *m = StoreHeartbeatRequest{} } -func (m *StoreHeartbeatRequest) String() string { return proto.CompactTextString(m) } -func (*StoreHeartbeatRequest) ProtoMessage() {} -func (*StoreHeartbeatRequest) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{41} } - -func (m *StoreHeartbeatRequest) GetHeader() *RequestHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *StoreHeartbeatRequest) GetStats() *StoreStats { - if m != nil { - return m.Stats - } - return nil -} - -type StoreHeartbeatResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *StoreHeartbeatResponse) Reset() { *m = StoreHeartbeatResponse{} } -func (m *StoreHeartbeatResponse) String() string { return proto.CompactTextString(m) } -func (*StoreHeartbeatResponse) ProtoMessage() {} -func (*StoreHeartbeatResponse) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{42} } - -func (m *StoreHeartbeatResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -type ScatterRegionRequest struct { - Header *RequestHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - RegionId uint64 `protobuf:"varint,2,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - // PD will use these region information if it can't find the region. - // For example, the region is just split and hasn't report to PD yet. - Region *metapb.Region `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` - Leader *metapb.Peer `protobuf:"bytes,4,opt,name=leader" json:"leader,omitempty"` -} - -func (m *ScatterRegionRequest) Reset() { *m = ScatterRegionRequest{} } -func (m *ScatterRegionRequest) String() string { return proto.CompactTextString(m) } -func (*ScatterRegionRequest) ProtoMessage() {} -func (*ScatterRegionRequest) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{43} } - -func (m *ScatterRegionRequest) GetHeader() *RequestHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *ScatterRegionRequest) GetRegionId() uint64 { - if m != nil { - return m.RegionId - } - return 0 -} - -func (m *ScatterRegionRequest) GetRegion() *metapb.Region { - if m != nil { - return m.Region - } - return nil -} - -func (m *ScatterRegionRequest) GetLeader() *metapb.Peer { - if m != nil { - return m.Leader - } - return nil -} - -type ScatterRegionResponse struct { - Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` -} - -func (m *ScatterRegionResponse) Reset() { *m = ScatterRegionResponse{} } -func (m *ScatterRegionResponse) String() string { return proto.CompactTextString(m) } -func (*ScatterRegionResponse) ProtoMessage() {} -func (*ScatterRegionResponse) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{44} } - -func (m *ScatterRegionResponse) GetHeader() *ResponseHeader { - if m != nil { - return m.Header - } - return nil -} - -func init() { - proto.RegisterType((*RequestHeader)(nil), "pdpb.RequestHeader") - proto.RegisterType((*ResponseHeader)(nil), "pdpb.ResponseHeader") - proto.RegisterType((*Error)(nil), "pdpb.Error") - proto.RegisterType((*TsoRequest)(nil), "pdpb.TsoRequest") - proto.RegisterType((*Timestamp)(nil), "pdpb.Timestamp") - proto.RegisterType((*TsoResponse)(nil), "pdpb.TsoResponse") - proto.RegisterType((*BootstrapRequest)(nil), "pdpb.BootstrapRequest") - proto.RegisterType((*BootstrapResponse)(nil), "pdpb.BootstrapResponse") - proto.RegisterType((*IsBootstrappedRequest)(nil), "pdpb.IsBootstrappedRequest") - proto.RegisterType((*IsBootstrappedResponse)(nil), "pdpb.IsBootstrappedResponse") - proto.RegisterType((*AllocIDRequest)(nil), "pdpb.AllocIDRequest") - proto.RegisterType((*AllocIDResponse)(nil), "pdpb.AllocIDResponse") - proto.RegisterType((*GetStoreRequest)(nil), "pdpb.GetStoreRequest") - proto.RegisterType((*GetStoreResponse)(nil), "pdpb.GetStoreResponse") - proto.RegisterType((*PutStoreRequest)(nil), "pdpb.PutStoreRequest") - proto.RegisterType((*PutStoreResponse)(nil), "pdpb.PutStoreResponse") - proto.RegisterType((*GetAllStoresRequest)(nil), "pdpb.GetAllStoresRequest") - proto.RegisterType((*GetAllStoresResponse)(nil), "pdpb.GetAllStoresResponse") - proto.RegisterType((*GetRegionRequest)(nil), "pdpb.GetRegionRequest") - proto.RegisterType((*GetRegionResponse)(nil), "pdpb.GetRegionResponse") - proto.RegisterType((*GetRegionByIDRequest)(nil), "pdpb.GetRegionByIDRequest") - proto.RegisterType((*GetClusterConfigRequest)(nil), "pdpb.GetClusterConfigRequest") - proto.RegisterType((*GetClusterConfigResponse)(nil), "pdpb.GetClusterConfigResponse") - proto.RegisterType((*PutClusterConfigRequest)(nil), "pdpb.PutClusterConfigRequest") - proto.RegisterType((*PutClusterConfigResponse)(nil), "pdpb.PutClusterConfigResponse") - proto.RegisterType((*Member)(nil), "pdpb.Member") - proto.RegisterType((*GetMembersRequest)(nil), "pdpb.GetMembersRequest") - proto.RegisterType((*GetMembersResponse)(nil), "pdpb.GetMembersResponse") - proto.RegisterType((*PeerStats)(nil), "pdpb.PeerStats") - proto.RegisterType((*RegionHeartbeatRequest)(nil), "pdpb.RegionHeartbeatRequest") - proto.RegisterType((*ChangePeer)(nil), "pdpb.ChangePeer") - proto.RegisterType((*TransferLeader)(nil), "pdpb.TransferLeader") - proto.RegisterType((*Merge)(nil), "pdpb.Merge") - proto.RegisterType((*SplitRegion)(nil), "pdpb.SplitRegion") - proto.RegisterType((*RegionHeartbeatResponse)(nil), "pdpb.RegionHeartbeatResponse") - proto.RegisterType((*AskSplitRequest)(nil), "pdpb.AskSplitRequest") - proto.RegisterType((*AskSplitResponse)(nil), "pdpb.AskSplitResponse") - proto.RegisterType((*ReportSplitRequest)(nil), "pdpb.ReportSplitRequest") - proto.RegisterType((*ReportSplitResponse)(nil), "pdpb.ReportSplitResponse") - proto.RegisterType((*TimeInterval)(nil), "pdpb.TimeInterval") - proto.RegisterType((*StoreStats)(nil), "pdpb.StoreStats") - proto.RegisterType((*StoreHeartbeatRequest)(nil), "pdpb.StoreHeartbeatRequest") - proto.RegisterType((*StoreHeartbeatResponse)(nil), "pdpb.StoreHeartbeatResponse") - proto.RegisterType((*ScatterRegionRequest)(nil), "pdpb.ScatterRegionRequest") - proto.RegisterType((*ScatterRegionResponse)(nil), "pdpb.ScatterRegionResponse") - proto.RegisterEnum("pdpb.ErrorType", ErrorType_name, ErrorType_value) -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// Client API for PD service - -type PDClient interface { - // GetMembers get the member list of this cluster. It does not require - // the cluster_id in request matchs the id of this cluster. - GetMembers(ctx context.Context, in *GetMembersRequest, opts ...grpc.CallOption) (*GetMembersResponse, error) - Tso(ctx context.Context, opts ...grpc.CallOption) (PD_TsoClient, error) - Bootstrap(ctx context.Context, in *BootstrapRequest, opts ...grpc.CallOption) (*BootstrapResponse, error) - IsBootstrapped(ctx context.Context, in *IsBootstrappedRequest, opts ...grpc.CallOption) (*IsBootstrappedResponse, error) - AllocID(ctx context.Context, in *AllocIDRequest, opts ...grpc.CallOption) (*AllocIDResponse, error) - GetStore(ctx context.Context, in *GetStoreRequest, opts ...grpc.CallOption) (*GetStoreResponse, error) - PutStore(ctx context.Context, in *PutStoreRequest, opts ...grpc.CallOption) (*PutStoreResponse, error) - GetAllStores(ctx context.Context, in *GetAllStoresRequest, opts ...grpc.CallOption) (*GetAllStoresResponse, error) - StoreHeartbeat(ctx context.Context, in *StoreHeartbeatRequest, opts ...grpc.CallOption) (*StoreHeartbeatResponse, error) - RegionHeartbeat(ctx context.Context, opts ...grpc.CallOption) (PD_RegionHeartbeatClient, error) - GetRegion(ctx context.Context, in *GetRegionRequest, opts ...grpc.CallOption) (*GetRegionResponse, error) - GetRegionByID(ctx context.Context, in *GetRegionByIDRequest, opts ...grpc.CallOption) (*GetRegionResponse, error) - AskSplit(ctx context.Context, in *AskSplitRequest, opts ...grpc.CallOption) (*AskSplitResponse, error) - ReportSplit(ctx context.Context, in *ReportSplitRequest, opts ...grpc.CallOption) (*ReportSplitResponse, error) - GetClusterConfig(ctx context.Context, in *GetClusterConfigRequest, opts ...grpc.CallOption) (*GetClusterConfigResponse, error) - PutClusterConfig(ctx context.Context, in *PutClusterConfigRequest, opts ...grpc.CallOption) (*PutClusterConfigResponse, error) - ScatterRegion(ctx context.Context, in *ScatterRegionRequest, opts ...grpc.CallOption) (*ScatterRegionResponse, error) -} - -type pDClient struct { - cc *grpc.ClientConn -} - -func NewPDClient(cc *grpc.ClientConn) PDClient { - return &pDClient{cc} -} - -func (c *pDClient) GetMembers(ctx context.Context, in *GetMembersRequest, opts ...grpc.CallOption) (*GetMembersResponse, error) { - out := new(GetMembersResponse) - err := grpc.Invoke(ctx, "/pdpb.PD/GetMembers", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pDClient) Tso(ctx context.Context, opts ...grpc.CallOption) (PD_TsoClient, error) { - stream, err := grpc.NewClientStream(ctx, &_PD_serviceDesc.Streams[0], c.cc, "/pdpb.PD/Tso", opts...) - if err != nil { - return nil, err - } - x := &pDTsoClient{stream} - return x, nil -} - -type PD_TsoClient interface { - Send(*TsoRequest) error - Recv() (*TsoResponse, error) - grpc.ClientStream -} - -type pDTsoClient struct { - grpc.ClientStream -} - -func (x *pDTsoClient) Send(m *TsoRequest) error { - return x.ClientStream.SendMsg(m) -} - -func (x *pDTsoClient) Recv() (*TsoResponse, error) { - m := new(TsoResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *pDClient) Bootstrap(ctx context.Context, in *BootstrapRequest, opts ...grpc.CallOption) (*BootstrapResponse, error) { - out := new(BootstrapResponse) - err := grpc.Invoke(ctx, "/pdpb.PD/Bootstrap", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pDClient) IsBootstrapped(ctx context.Context, in *IsBootstrappedRequest, opts ...grpc.CallOption) (*IsBootstrappedResponse, error) { - out := new(IsBootstrappedResponse) - err := grpc.Invoke(ctx, "/pdpb.PD/IsBootstrapped", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pDClient) AllocID(ctx context.Context, in *AllocIDRequest, opts ...grpc.CallOption) (*AllocIDResponse, error) { - out := new(AllocIDResponse) - err := grpc.Invoke(ctx, "/pdpb.PD/AllocID", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pDClient) GetStore(ctx context.Context, in *GetStoreRequest, opts ...grpc.CallOption) (*GetStoreResponse, error) { - out := new(GetStoreResponse) - err := grpc.Invoke(ctx, "/pdpb.PD/GetStore", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pDClient) PutStore(ctx context.Context, in *PutStoreRequest, opts ...grpc.CallOption) (*PutStoreResponse, error) { - out := new(PutStoreResponse) - err := grpc.Invoke(ctx, "/pdpb.PD/PutStore", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pDClient) GetAllStores(ctx context.Context, in *GetAllStoresRequest, opts ...grpc.CallOption) (*GetAllStoresResponse, error) { - out := new(GetAllStoresResponse) - err := grpc.Invoke(ctx, "/pdpb.PD/GetAllStores", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pDClient) StoreHeartbeat(ctx context.Context, in *StoreHeartbeatRequest, opts ...grpc.CallOption) (*StoreHeartbeatResponse, error) { - out := new(StoreHeartbeatResponse) - err := grpc.Invoke(ctx, "/pdpb.PD/StoreHeartbeat", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pDClient) RegionHeartbeat(ctx context.Context, opts ...grpc.CallOption) (PD_RegionHeartbeatClient, error) { - stream, err := grpc.NewClientStream(ctx, &_PD_serviceDesc.Streams[1], c.cc, "/pdpb.PD/RegionHeartbeat", opts...) - if err != nil { - return nil, err - } - x := &pDRegionHeartbeatClient{stream} - return x, nil -} - -type PD_RegionHeartbeatClient interface { - Send(*RegionHeartbeatRequest) error - Recv() (*RegionHeartbeatResponse, error) - grpc.ClientStream -} - -type pDRegionHeartbeatClient struct { - grpc.ClientStream -} - -func (x *pDRegionHeartbeatClient) Send(m *RegionHeartbeatRequest) error { - return x.ClientStream.SendMsg(m) -} - -func (x *pDRegionHeartbeatClient) Recv() (*RegionHeartbeatResponse, error) { - m := new(RegionHeartbeatResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *pDClient) GetRegion(ctx context.Context, in *GetRegionRequest, opts ...grpc.CallOption) (*GetRegionResponse, error) { - out := new(GetRegionResponse) - err := grpc.Invoke(ctx, "/pdpb.PD/GetRegion", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pDClient) GetRegionByID(ctx context.Context, in *GetRegionByIDRequest, opts ...grpc.CallOption) (*GetRegionResponse, error) { - out := new(GetRegionResponse) - err := grpc.Invoke(ctx, "/pdpb.PD/GetRegionByID", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pDClient) AskSplit(ctx context.Context, in *AskSplitRequest, opts ...grpc.CallOption) (*AskSplitResponse, error) { - out := new(AskSplitResponse) - err := grpc.Invoke(ctx, "/pdpb.PD/AskSplit", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pDClient) ReportSplit(ctx context.Context, in *ReportSplitRequest, opts ...grpc.CallOption) (*ReportSplitResponse, error) { - out := new(ReportSplitResponse) - err := grpc.Invoke(ctx, "/pdpb.PD/ReportSplit", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pDClient) GetClusterConfig(ctx context.Context, in *GetClusterConfigRequest, opts ...grpc.CallOption) (*GetClusterConfigResponse, error) { - out := new(GetClusterConfigResponse) - err := grpc.Invoke(ctx, "/pdpb.PD/GetClusterConfig", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pDClient) PutClusterConfig(ctx context.Context, in *PutClusterConfigRequest, opts ...grpc.CallOption) (*PutClusterConfigResponse, error) { - out := new(PutClusterConfigResponse) - err := grpc.Invoke(ctx, "/pdpb.PD/PutClusterConfig", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pDClient) ScatterRegion(ctx context.Context, in *ScatterRegionRequest, opts ...grpc.CallOption) (*ScatterRegionResponse, error) { - out := new(ScatterRegionResponse) - err := grpc.Invoke(ctx, "/pdpb.PD/ScatterRegion", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Server API for PD service - -type PDServer interface { - // GetMembers get the member list of this cluster. It does not require - // the cluster_id in request matchs the id of this cluster. - GetMembers(context.Context, *GetMembersRequest) (*GetMembersResponse, error) - Tso(PD_TsoServer) error - Bootstrap(context.Context, *BootstrapRequest) (*BootstrapResponse, error) - IsBootstrapped(context.Context, *IsBootstrappedRequest) (*IsBootstrappedResponse, error) - AllocID(context.Context, *AllocIDRequest) (*AllocIDResponse, error) - GetStore(context.Context, *GetStoreRequest) (*GetStoreResponse, error) - PutStore(context.Context, *PutStoreRequest) (*PutStoreResponse, error) - GetAllStores(context.Context, *GetAllStoresRequest) (*GetAllStoresResponse, error) - StoreHeartbeat(context.Context, *StoreHeartbeatRequest) (*StoreHeartbeatResponse, error) - RegionHeartbeat(PD_RegionHeartbeatServer) error - GetRegion(context.Context, *GetRegionRequest) (*GetRegionResponse, error) - GetRegionByID(context.Context, *GetRegionByIDRequest) (*GetRegionResponse, error) - AskSplit(context.Context, *AskSplitRequest) (*AskSplitResponse, error) - ReportSplit(context.Context, *ReportSplitRequest) (*ReportSplitResponse, error) - GetClusterConfig(context.Context, *GetClusterConfigRequest) (*GetClusterConfigResponse, error) - PutClusterConfig(context.Context, *PutClusterConfigRequest) (*PutClusterConfigResponse, error) - ScatterRegion(context.Context, *ScatterRegionRequest) (*ScatterRegionResponse, error) -} - -func RegisterPDServer(s *grpc.Server, srv PDServer) { - s.RegisterService(&_PD_serviceDesc, srv) -} - -func _PD_GetMembers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetMembersRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PDServer).GetMembers(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/pdpb.PD/GetMembers", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PDServer).GetMembers(ctx, req.(*GetMembersRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PD_Tso_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(PDServer).Tso(&pDTsoServer{stream}) -} - -type PD_TsoServer interface { - Send(*TsoResponse) error - Recv() (*TsoRequest, error) - grpc.ServerStream -} - -type pDTsoServer struct { - grpc.ServerStream -} - -func (x *pDTsoServer) Send(m *TsoResponse) error { - return x.ServerStream.SendMsg(m) -} - -func (x *pDTsoServer) Recv() (*TsoRequest, error) { - m := new(TsoRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func _PD_Bootstrap_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(BootstrapRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PDServer).Bootstrap(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/pdpb.PD/Bootstrap", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PDServer).Bootstrap(ctx, req.(*BootstrapRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PD_IsBootstrapped_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(IsBootstrappedRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PDServer).IsBootstrapped(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/pdpb.PD/IsBootstrapped", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PDServer).IsBootstrapped(ctx, req.(*IsBootstrappedRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PD_AllocID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AllocIDRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PDServer).AllocID(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/pdpb.PD/AllocID", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PDServer).AllocID(ctx, req.(*AllocIDRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PD_GetStore_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetStoreRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PDServer).GetStore(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/pdpb.PD/GetStore", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PDServer).GetStore(ctx, req.(*GetStoreRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PD_PutStore_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PutStoreRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PDServer).PutStore(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/pdpb.PD/PutStore", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PDServer).PutStore(ctx, req.(*PutStoreRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PD_GetAllStores_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetAllStoresRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PDServer).GetAllStores(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/pdpb.PD/GetAllStores", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PDServer).GetAllStores(ctx, req.(*GetAllStoresRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PD_StoreHeartbeat_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(StoreHeartbeatRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PDServer).StoreHeartbeat(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/pdpb.PD/StoreHeartbeat", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PDServer).StoreHeartbeat(ctx, req.(*StoreHeartbeatRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PD_RegionHeartbeat_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(PDServer).RegionHeartbeat(&pDRegionHeartbeatServer{stream}) -} - -type PD_RegionHeartbeatServer interface { - Send(*RegionHeartbeatResponse) error - Recv() (*RegionHeartbeatRequest, error) - grpc.ServerStream -} - -type pDRegionHeartbeatServer struct { - grpc.ServerStream -} - -func (x *pDRegionHeartbeatServer) Send(m *RegionHeartbeatResponse) error { - return x.ServerStream.SendMsg(m) -} - -func (x *pDRegionHeartbeatServer) Recv() (*RegionHeartbeatRequest, error) { - m := new(RegionHeartbeatRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func _PD_GetRegion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetRegionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PDServer).GetRegion(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/pdpb.PD/GetRegion", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PDServer).GetRegion(ctx, req.(*GetRegionRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PD_GetRegionByID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetRegionByIDRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PDServer).GetRegionByID(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/pdpb.PD/GetRegionByID", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PDServer).GetRegionByID(ctx, req.(*GetRegionByIDRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PD_AskSplit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AskSplitRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PDServer).AskSplit(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/pdpb.PD/AskSplit", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PDServer).AskSplit(ctx, req.(*AskSplitRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PD_ReportSplit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ReportSplitRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PDServer).ReportSplit(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/pdpb.PD/ReportSplit", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PDServer).ReportSplit(ctx, req.(*ReportSplitRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PD_GetClusterConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetClusterConfigRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PDServer).GetClusterConfig(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/pdpb.PD/GetClusterConfig", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PDServer).GetClusterConfig(ctx, req.(*GetClusterConfigRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PD_PutClusterConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PutClusterConfigRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PDServer).PutClusterConfig(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/pdpb.PD/PutClusterConfig", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PDServer).PutClusterConfig(ctx, req.(*PutClusterConfigRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PD_ScatterRegion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ScatterRegionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PDServer).ScatterRegion(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/pdpb.PD/ScatterRegion", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PDServer).ScatterRegion(ctx, req.(*ScatterRegionRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _PD_serviceDesc = grpc.ServiceDesc{ - ServiceName: "pdpb.PD", - HandlerType: (*PDServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "GetMembers", - Handler: _PD_GetMembers_Handler, - }, - { - MethodName: "Bootstrap", - Handler: _PD_Bootstrap_Handler, - }, - { - MethodName: "IsBootstrapped", - Handler: _PD_IsBootstrapped_Handler, - }, - { - MethodName: "AllocID", - Handler: _PD_AllocID_Handler, - }, - { - MethodName: "GetStore", - Handler: _PD_GetStore_Handler, - }, - { - MethodName: "PutStore", - Handler: _PD_PutStore_Handler, - }, - { - MethodName: "GetAllStores", - Handler: _PD_GetAllStores_Handler, - }, - { - MethodName: "StoreHeartbeat", - Handler: _PD_StoreHeartbeat_Handler, - }, - { - MethodName: "GetRegion", - Handler: _PD_GetRegion_Handler, - }, - { - MethodName: "GetRegionByID", - Handler: _PD_GetRegionByID_Handler, - }, - { - MethodName: "AskSplit", - Handler: _PD_AskSplit_Handler, - }, - { - MethodName: "ReportSplit", - Handler: _PD_ReportSplit_Handler, - }, - { - MethodName: "GetClusterConfig", - Handler: _PD_GetClusterConfig_Handler, - }, - { - MethodName: "PutClusterConfig", - Handler: _PD_PutClusterConfig_Handler, - }, - { - MethodName: "ScatterRegion", - Handler: _PD_ScatterRegion_Handler, - }, - }, - Streams: []grpc.StreamDesc{ - { - StreamName: "Tso", - Handler: _PD_Tso_Handler, - ServerStreams: true, - ClientStreams: true, - }, - { - StreamName: "RegionHeartbeat", - Handler: _PD_RegionHeartbeat_Handler, - ServerStreams: true, - ClientStreams: true, - }, - }, - Metadata: "pdpb.proto", -} - -func (m *RequestHeader) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RequestHeader) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.ClusterId != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.ClusterId)) - } - return i, nil -} - -func (m *ResponseHeader) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ResponseHeader) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.ClusterId != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.ClusterId)) - } - if m.Error != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Error.Size())) - n1, err := m.Error.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - return i, nil -} - -func (m *Error) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Error) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Type != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Type)) - } - if len(m.Message) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - } - return i, nil -} - -func (m *TsoRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *TsoRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n2, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.Count != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Count)) - } - return i, nil -} - -func (m *Timestamp) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Timestamp) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Physical != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Physical)) - } - if m.Logical != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Logical)) - } - return i, nil -} - -func (m *TsoResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *TsoResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n3, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.Count != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Count)) - } - if m.Timestamp != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Timestamp.Size())) - n4, err := m.Timestamp.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - return i, nil -} - -func (m *BootstrapRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *BootstrapRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n5, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if m.Store != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Store.Size())) - n6, err := m.Store.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - if m.Region != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Region.Size())) - n7, err := m.Region.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - } - return i, nil -} - -func (m *BootstrapResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *BootstrapResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n8, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 - } - return i, nil -} - -func (m *IsBootstrappedRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *IsBootstrappedRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n9, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 - } - return i, nil -} - -func (m *IsBootstrappedResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *IsBootstrappedResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n10, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 - } - if m.Bootstrapped { - dAtA[i] = 0x10 - i++ - if m.Bootstrapped { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - return i, nil -} - -func (m *AllocIDRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AllocIDRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n11, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n11 - } - return i, nil -} - -func (m *AllocIDResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AllocIDResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n12, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n12 - } - if m.Id != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Id)) - } - return i, nil -} - -func (m *GetStoreRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GetStoreRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n13, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n13 - } - if m.StoreId != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.StoreId)) - } - return i, nil -} - -func (m *GetStoreResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GetStoreResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n14, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n14 - } - if m.Store != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Store.Size())) - n15, err := m.Store.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n15 - } - return i, nil -} - -func (m *PutStoreRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *PutStoreRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n16, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n16 - } - if m.Store != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Store.Size())) - n17, err := m.Store.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n17 - } - return i, nil -} - -func (m *PutStoreResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *PutStoreResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n18, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n18 - } - return i, nil -} - -func (m *GetAllStoresRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GetAllStoresRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n19, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n19 - } - return i, nil -} - -func (m *GetAllStoresResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GetAllStoresResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n20, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n20 - } - if len(m.Stores) > 0 { - for _, msg := range m.Stores { - dAtA[i] = 0x12 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *GetRegionRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GetRegionRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n21, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n21 - } - if len(m.RegionKey) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(len(m.RegionKey))) - i += copy(dAtA[i:], m.RegionKey) - } - return i, nil -} - -func (m *GetRegionResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GetRegionResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n22, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n22 - } - if m.Region != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Region.Size())) - n23, err := m.Region.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n23 - } - if m.Leader != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Leader.Size())) - n24, err := m.Leader.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n24 - } - return i, nil -} - -func (m *GetRegionByIDRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GetRegionByIDRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n25, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n25 - } - if m.RegionId != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.RegionId)) - } - return i, nil -} - -func (m *GetClusterConfigRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GetClusterConfigRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n26, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n26 - } - return i, nil -} - -func (m *GetClusterConfigResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GetClusterConfigResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n27, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n27 - } - if m.Cluster != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Cluster.Size())) - n28, err := m.Cluster.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n28 - } - return i, nil -} - -func (m *PutClusterConfigRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *PutClusterConfigRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n29, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n29 - } - if m.Cluster != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Cluster.Size())) - n30, err := m.Cluster.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n30 - } - return i, nil -} - -func (m *PutClusterConfigResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *PutClusterConfigResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n31, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n31 - } - return i, nil -} - -func (m *Member) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Member) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if m.MemberId != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.MemberId)) - } - if len(m.PeerUrls) > 0 { - for _, s := range m.PeerUrls { - dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.ClientUrls) > 0 { - for _, s := range m.ClientUrls { - dAtA[i] = 0x22 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if m.LeaderPriority != 0 { - dAtA[i] = 0x28 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.LeaderPriority)) - } - return i, nil -} - -func (m *GetMembersRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GetMembersRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n32, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n32 - } - return i, nil -} - -func (m *GetMembersResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GetMembersResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n33, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n33 - } - if len(m.Members) > 0 { - for _, msg := range m.Members { - dAtA[i] = 0x12 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.Leader != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Leader.Size())) - n34, err := m.Leader.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n34 - } - if m.EtcdLeader != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.EtcdLeader.Size())) - n35, err := m.EtcdLeader.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n35 - } - return i, nil -} - -func (m *PeerStats) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *PeerStats) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Peer != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Peer.Size())) - n36, err := m.Peer.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n36 - } - if m.DownSeconds != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.DownSeconds)) - } - return i, nil -} - -func (m *RegionHeartbeatRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RegionHeartbeatRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n37, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n37 - } - if m.Region != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Region.Size())) - n38, err := m.Region.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n38 - } - if m.Leader != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Leader.Size())) - n39, err := m.Leader.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n39 - } - if len(m.DownPeers) > 0 { - for _, msg := range m.DownPeers { - dAtA[i] = 0x22 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.PendingPeers) > 0 { - for _, msg := range m.PendingPeers { - dAtA[i] = 0x2a - i++ - i = encodeVarintPdpb(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.BytesWritten != 0 { - dAtA[i] = 0x30 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.BytesWritten)) - } - if m.BytesRead != 0 { - dAtA[i] = 0x38 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.BytesRead)) - } - if m.KeysWritten != 0 { - dAtA[i] = 0x40 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.KeysWritten)) - } - if m.KeysRead != 0 { - dAtA[i] = 0x48 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.KeysRead)) - } - if m.ApproximateSize != 0 { - dAtA[i] = 0x50 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.ApproximateSize)) - } - if m.Interval != nil { - dAtA[i] = 0x62 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Interval.Size())) - n40, err := m.Interval.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n40 - } - if m.ApproximateRows != 0 { - dAtA[i] = 0x68 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.ApproximateRows)) - } - return i, nil -} - -func (m *ChangePeer) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ChangePeer) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Peer != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Peer.Size())) - n41, err := m.Peer.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n41 - } - if m.ChangeType != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.ChangeType)) - } - return i, nil -} - -func (m *TransferLeader) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *TransferLeader) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Peer != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Peer.Size())) - n42, err := m.Peer.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n42 - } - return i, nil -} - -func (m *Merge) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Merge) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Target != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Target.Size())) - n43, err := m.Target.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n43 - } - return i, nil -} - -func (m *SplitRegion) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *SplitRegion) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - return i, nil -} - -func (m *RegionHeartbeatResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RegionHeartbeatResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n44, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n44 - } - if m.ChangePeer != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.ChangePeer.Size())) - n45, err := m.ChangePeer.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n45 - } - if m.TransferLeader != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.TransferLeader.Size())) - n46, err := m.TransferLeader.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n46 - } - if m.RegionId != 0 { - dAtA[i] = 0x20 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.RegionId)) - } - if m.RegionEpoch != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.RegionEpoch.Size())) - n47, err := m.RegionEpoch.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n47 - } - if m.TargetPeer != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.TargetPeer.Size())) - n48, err := m.TargetPeer.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n48 - } - if m.Merge != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Merge.Size())) - n49, err := m.Merge.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n49 - } - if m.SplitRegion != nil { - dAtA[i] = 0x42 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.SplitRegion.Size())) - n50, err := m.SplitRegion.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n50 - } - return i, nil -} - -func (m *AskSplitRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AskSplitRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n51, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n51 - } - if m.Region != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Region.Size())) - n52, err := m.Region.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n52 - } - return i, nil -} - -func (m *AskSplitResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AskSplitResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n53, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n53 - } - if m.NewRegionId != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.NewRegionId)) - } - if len(m.NewPeerIds) > 0 { - dAtA55 := make([]byte, len(m.NewPeerIds)*10) - var j54 int - for _, num := range m.NewPeerIds { - for num >= 1<<7 { - dAtA55[j54] = uint8(uint64(num)&0x7f | 0x80) - num >>= 7 - j54++ - } - dAtA55[j54] = uint8(num) - j54++ - } - dAtA[i] = 0x1a - i++ - i = encodeVarintPdpb(dAtA, i, uint64(j54)) - i += copy(dAtA[i:], dAtA55[:j54]) - } - return i, nil -} - -func (m *ReportSplitRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ReportSplitRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n56, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n56 - } - if m.Left != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Left.Size())) - n57, err := m.Left.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n57 - } - if m.Right != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Right.Size())) - n58, err := m.Right.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n58 - } - return i, nil -} - -func (m *ReportSplitResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ReportSplitResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n59, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n59 - } - return i, nil -} - -func (m *TimeInterval) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *TimeInterval) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.StartTimestamp != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.StartTimestamp)) - } - if m.EndTimestamp != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.EndTimestamp)) - } - return i, nil -} - -func (m *StoreStats) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *StoreStats) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.StoreId != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.StoreId)) - } - if m.Capacity != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Capacity)) - } - if m.Available != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Available)) - } - if m.RegionCount != 0 { - dAtA[i] = 0x20 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.RegionCount)) - } - if m.SendingSnapCount != 0 { - dAtA[i] = 0x28 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.SendingSnapCount)) - } - if m.ReceivingSnapCount != 0 { - dAtA[i] = 0x30 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.ReceivingSnapCount)) - } - if m.StartTime != 0 { - dAtA[i] = 0x38 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.StartTime)) - } - if m.ApplyingSnapCount != 0 { - dAtA[i] = 0x40 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.ApplyingSnapCount)) - } - if m.IsBusy { - dAtA[i] = 0x48 - i++ - if m.IsBusy { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.UsedSize != 0 { - dAtA[i] = 0x50 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.UsedSize)) - } - if m.BytesWritten != 0 { - dAtA[i] = 0x58 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.BytesWritten)) - } - if m.KeysWritten != 0 { - dAtA[i] = 0x60 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.KeysWritten)) - } - if m.BytesRead != 0 { - dAtA[i] = 0x68 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.BytesRead)) - } - if m.KeysRead != 0 { - dAtA[i] = 0x70 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.KeysRead)) - } - if m.Interval != nil { - dAtA[i] = 0x7a - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Interval.Size())) - n60, err := m.Interval.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n60 - } - return i, nil -} - -func (m *StoreHeartbeatRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *StoreHeartbeatRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n61, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n61 - } - if m.Stats != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Stats.Size())) - n62, err := m.Stats.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n62 - } - return i, nil -} - -func (m *StoreHeartbeatResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *StoreHeartbeatResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n63, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n63 - } - return i, nil -} - -func (m *ScatterRegionRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ScatterRegionRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n64, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n64 - } - if m.RegionId != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.RegionId)) - } - if m.Region != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Region.Size())) - n65, err := m.Region.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n65 - } - if m.Leader != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Leader.Size())) - n66, err := m.Leader.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n66 - } - return i, nil -} - -func (m *ScatterRegionResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ScatterRegionResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) - n67, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n67 - } - return i, nil -} - -func encodeFixed64Pdpb(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Pdpb(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintPdpb(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *RequestHeader) Size() (n int) { - var l int - _ = l - if m.ClusterId != 0 { - n += 1 + sovPdpb(uint64(m.ClusterId)) - } - return n -} - -func (m *ResponseHeader) Size() (n int) { - var l int - _ = l - if m.ClusterId != 0 { - n += 1 + sovPdpb(uint64(m.ClusterId)) - } - if m.Error != nil { - l = m.Error.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *Error) Size() (n int) { - var l int - _ = l - if m.Type != 0 { - n += 1 + sovPdpb(uint64(m.Type)) - } - l = len(m.Message) - if l > 0 { - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *TsoRequest) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.Count != 0 { - n += 1 + sovPdpb(uint64(m.Count)) - } - return n -} - -func (m *Timestamp) Size() (n int) { - var l int - _ = l - if m.Physical != 0 { - n += 1 + sovPdpb(uint64(m.Physical)) - } - if m.Logical != 0 { - n += 1 + sovPdpb(uint64(m.Logical)) - } - return n -} - -func (m *TsoResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.Count != 0 { - n += 1 + sovPdpb(uint64(m.Count)) - } - if m.Timestamp != nil { - l = m.Timestamp.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *BootstrapRequest) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.Store != nil { - l = m.Store.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.Region != nil { - l = m.Region.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *BootstrapResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *IsBootstrappedRequest) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *IsBootstrappedResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.Bootstrapped { - n += 2 - } - return n -} - -func (m *AllocIDRequest) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *AllocIDResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.Id != 0 { - n += 1 + sovPdpb(uint64(m.Id)) - } - return n -} - -func (m *GetStoreRequest) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.StoreId != 0 { - n += 1 + sovPdpb(uint64(m.StoreId)) - } - return n -} - -func (m *GetStoreResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.Store != nil { - l = m.Store.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *PutStoreRequest) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.Store != nil { - l = m.Store.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *PutStoreResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *GetAllStoresRequest) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *GetAllStoresResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if len(m.Stores) > 0 { - for _, e := range m.Stores { - l = e.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - } - return n -} - -func (m *GetRegionRequest) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - l = len(m.RegionKey) - if l > 0 { - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *GetRegionResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.Region != nil { - l = m.Region.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.Leader != nil { - l = m.Leader.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *GetRegionByIDRequest) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.RegionId != 0 { - n += 1 + sovPdpb(uint64(m.RegionId)) - } - return n -} - -func (m *GetClusterConfigRequest) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *GetClusterConfigResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.Cluster != nil { - l = m.Cluster.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *PutClusterConfigRequest) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.Cluster != nil { - l = m.Cluster.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *PutClusterConfigResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *Member) Size() (n int) { - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovPdpb(uint64(l)) - } - if m.MemberId != 0 { - n += 1 + sovPdpb(uint64(m.MemberId)) - } - if len(m.PeerUrls) > 0 { - for _, s := range m.PeerUrls { - l = len(s) - n += 1 + l + sovPdpb(uint64(l)) - } - } - if len(m.ClientUrls) > 0 { - for _, s := range m.ClientUrls { - l = len(s) - n += 1 + l + sovPdpb(uint64(l)) - } - } - if m.LeaderPriority != 0 { - n += 1 + sovPdpb(uint64(m.LeaderPriority)) - } - return n -} - -func (m *GetMembersRequest) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *GetMembersResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if len(m.Members) > 0 { - for _, e := range m.Members { - l = e.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - } - if m.Leader != nil { - l = m.Leader.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.EtcdLeader != nil { - l = m.EtcdLeader.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *PeerStats) Size() (n int) { - var l int - _ = l - if m.Peer != nil { - l = m.Peer.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.DownSeconds != 0 { - n += 1 + sovPdpb(uint64(m.DownSeconds)) - } - return n -} - -func (m *RegionHeartbeatRequest) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.Region != nil { - l = m.Region.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.Leader != nil { - l = m.Leader.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if len(m.DownPeers) > 0 { - for _, e := range m.DownPeers { - l = e.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - } - if len(m.PendingPeers) > 0 { - for _, e := range m.PendingPeers { - l = e.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - } - if m.BytesWritten != 0 { - n += 1 + sovPdpb(uint64(m.BytesWritten)) - } - if m.BytesRead != 0 { - n += 1 + sovPdpb(uint64(m.BytesRead)) - } - if m.KeysWritten != 0 { - n += 1 + sovPdpb(uint64(m.KeysWritten)) - } - if m.KeysRead != 0 { - n += 1 + sovPdpb(uint64(m.KeysRead)) - } - if m.ApproximateSize != 0 { - n += 1 + sovPdpb(uint64(m.ApproximateSize)) - } - if m.Interval != nil { - l = m.Interval.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.ApproximateRows != 0 { - n += 1 + sovPdpb(uint64(m.ApproximateRows)) - } - return n -} - -func (m *ChangePeer) Size() (n int) { - var l int - _ = l - if m.Peer != nil { - l = m.Peer.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.ChangeType != 0 { - n += 1 + sovPdpb(uint64(m.ChangeType)) - } - return n -} - -func (m *TransferLeader) Size() (n int) { - var l int - _ = l - if m.Peer != nil { - l = m.Peer.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *Merge) Size() (n int) { - var l int - _ = l - if m.Target != nil { - l = m.Target.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *SplitRegion) Size() (n int) { - var l int - _ = l - return n -} - -func (m *RegionHeartbeatResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.ChangePeer != nil { - l = m.ChangePeer.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.TransferLeader != nil { - l = m.TransferLeader.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.RegionId != 0 { - n += 1 + sovPdpb(uint64(m.RegionId)) - } - if m.RegionEpoch != nil { - l = m.RegionEpoch.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.TargetPeer != nil { - l = m.TargetPeer.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.Merge != nil { - l = m.Merge.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.SplitRegion != nil { - l = m.SplitRegion.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *AskSplitRequest) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.Region != nil { - l = m.Region.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *AskSplitResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.NewRegionId != 0 { - n += 1 + sovPdpb(uint64(m.NewRegionId)) - } - if len(m.NewPeerIds) > 0 { - l = 0 - for _, e := range m.NewPeerIds { - l += sovPdpb(uint64(e)) - } - n += 1 + sovPdpb(uint64(l)) + l - } - return n -} - -func (m *ReportSplitRequest) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.Left != nil { - l = m.Left.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.Right != nil { - l = m.Right.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *ReportSplitResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *TimeInterval) Size() (n int) { - var l int - _ = l - if m.StartTimestamp != 0 { - n += 1 + sovPdpb(uint64(m.StartTimestamp)) - } - if m.EndTimestamp != 0 { - n += 1 + sovPdpb(uint64(m.EndTimestamp)) - } - return n -} - -func (m *StoreStats) Size() (n int) { - var l int - _ = l - if m.StoreId != 0 { - n += 1 + sovPdpb(uint64(m.StoreId)) - } - if m.Capacity != 0 { - n += 1 + sovPdpb(uint64(m.Capacity)) - } - if m.Available != 0 { - n += 1 + sovPdpb(uint64(m.Available)) - } - if m.RegionCount != 0 { - n += 1 + sovPdpb(uint64(m.RegionCount)) - } - if m.SendingSnapCount != 0 { - n += 1 + sovPdpb(uint64(m.SendingSnapCount)) - } - if m.ReceivingSnapCount != 0 { - n += 1 + sovPdpb(uint64(m.ReceivingSnapCount)) - } - if m.StartTime != 0 { - n += 1 + sovPdpb(uint64(m.StartTime)) - } - if m.ApplyingSnapCount != 0 { - n += 1 + sovPdpb(uint64(m.ApplyingSnapCount)) - } - if m.IsBusy { - n += 2 - } - if m.UsedSize != 0 { - n += 1 + sovPdpb(uint64(m.UsedSize)) - } - if m.BytesWritten != 0 { - n += 1 + sovPdpb(uint64(m.BytesWritten)) - } - if m.KeysWritten != 0 { - n += 1 + sovPdpb(uint64(m.KeysWritten)) - } - if m.BytesRead != 0 { - n += 1 + sovPdpb(uint64(m.BytesRead)) - } - if m.KeysRead != 0 { - n += 1 + sovPdpb(uint64(m.KeysRead)) - } - if m.Interval != nil { - l = m.Interval.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *StoreHeartbeatRequest) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.Stats != nil { - l = m.Stats.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *StoreHeartbeatResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *ScatterRegionRequest) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.RegionId != 0 { - n += 1 + sovPdpb(uint64(m.RegionId)) - } - if m.Region != nil { - l = m.Region.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - if m.Leader != nil { - l = m.Leader.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func (m *ScatterRegionResponse) Size() (n int) { - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovPdpb(uint64(l)) - } - return n -} - -func sovPdpb(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozPdpb(x uint64) (n int) { - return sovPdpb(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *RequestHeader) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RequestHeader: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RequestHeader: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType) - } - m.ClusterId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ClusterId |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ResponseHeader) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ResponseHeader: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ResponseHeader: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType) - } - m.ClusterId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ClusterId |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Error == nil { - m.Error = &Error{} - } - if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Error) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Error: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Error: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) - } - m.Type = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Type |= (ErrorType(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Message = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *TsoRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: TsoRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TsoRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &RequestHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Count", wireType) - } - m.Count = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Count |= (uint32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Timestamp) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Timestamp: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Timestamp: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Physical", wireType) - } - m.Physical = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Physical |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Logical", wireType) - } - m.Logical = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Logical |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *TsoResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: TsoResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TsoResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Count", wireType) - } - m.Count = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Count |= (uint32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Timestamp == nil { - m.Timestamp = &Timestamp{} - } - if err := m.Timestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *BootstrapRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: BootstrapRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: BootstrapRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &RequestHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Store", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Store == nil { - m.Store = &metapb.Store{} - } - if err := m.Store.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Region", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Region == nil { - m.Region = &metapb.Region{} - } - if err := m.Region.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *BootstrapResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: BootstrapResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: BootstrapResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *IsBootstrappedRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: IsBootstrappedRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: IsBootstrappedRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &RequestHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *IsBootstrappedResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: IsBootstrappedResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: IsBootstrappedResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Bootstrapped", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Bootstrapped = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AllocIDRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AllocIDRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AllocIDRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &RequestHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AllocIDResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AllocIDResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AllocIDResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) - } - m.Id = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Id |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetStoreRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GetStoreRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetStoreRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &RequestHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StoreId", wireType) - } - m.StoreId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.StoreId |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetStoreResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GetStoreResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetStoreResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Store", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Store == nil { - m.Store = &metapb.Store{} - } - if err := m.Store.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PutStoreRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PutStoreRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PutStoreRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &RequestHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Store", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Store == nil { - m.Store = &metapb.Store{} - } - if err := m.Store.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PutStoreResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PutStoreResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PutStoreResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetAllStoresRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GetAllStoresRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetAllStoresRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &RequestHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetAllStoresResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GetAllStoresResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetAllStoresResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Stores", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Stores = append(m.Stores, &metapb.Store{}) - if err := m.Stores[len(m.Stores)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetRegionRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GetRegionRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetRegionRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &RequestHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionKey", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RegionKey = append(m.RegionKey[:0], dAtA[iNdEx:postIndex]...) - if m.RegionKey == nil { - m.RegionKey = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetRegionResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GetRegionResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetRegionResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Region", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Region == nil { - m.Region = &metapb.Region{} - } - if err := m.Region.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Leader", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Leader == nil { - m.Leader = &metapb.Peer{} - } - if err := m.Leader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetRegionByIDRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GetRegionByIDRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetRegionByIDRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &RequestHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionId", wireType) - } - m.RegionId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RegionId |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetClusterConfigRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GetClusterConfigRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetClusterConfigRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &RequestHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetClusterConfigResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GetClusterConfigResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetClusterConfigResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Cluster == nil { - m.Cluster = &metapb.Cluster{} - } - if err := m.Cluster.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PutClusterConfigRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PutClusterConfigRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PutClusterConfigRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &RequestHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Cluster == nil { - m.Cluster = &metapb.Cluster{} - } - if err := m.Cluster.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PutClusterConfigResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PutClusterConfigResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PutClusterConfigResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Member) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Member: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Member: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MemberId", wireType) - } - m.MemberId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.MemberId |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PeerUrls", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PeerUrls = append(m.PeerUrls, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClientUrls", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ClientUrls = append(m.ClientUrls, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field LeaderPriority", wireType) - } - m.LeaderPriority = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.LeaderPriority |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetMembersRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GetMembersRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetMembersRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &RequestHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetMembersResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GetMembersResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetMembersResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Members", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Members = append(m.Members, &Member{}) - if err := m.Members[len(m.Members)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Leader", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Leader == nil { - m.Leader = &Member{} - } - if err := m.Leader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EtcdLeader", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.EtcdLeader == nil { - m.EtcdLeader = &Member{} - } - if err := m.EtcdLeader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PeerStats) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PeerStats: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PeerStats: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Peer", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Peer == nil { - m.Peer = &metapb.Peer{} - } - if err := m.Peer.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field DownSeconds", wireType) - } - m.DownSeconds = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.DownSeconds |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RegionHeartbeatRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RegionHeartbeatRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RegionHeartbeatRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &RequestHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Region", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Region == nil { - m.Region = &metapb.Region{} - } - if err := m.Region.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Leader", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Leader == nil { - m.Leader = &metapb.Peer{} - } - if err := m.Leader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DownPeers", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DownPeers = append(m.DownPeers, &PeerStats{}) - if err := m.DownPeers[len(m.DownPeers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PendingPeers", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PendingPeers = append(m.PendingPeers, &metapb.Peer{}) - if err := m.PendingPeers[len(m.PendingPeers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field BytesWritten", wireType) - } - m.BytesWritten = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.BytesWritten |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 7: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field BytesRead", wireType) - } - m.BytesRead = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.BytesRead |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 8: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field KeysWritten", wireType) - } - m.KeysWritten = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.KeysWritten |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 9: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field KeysRead", wireType) - } - m.KeysRead = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.KeysRead |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 10: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ApproximateSize", wireType) - } - m.ApproximateSize = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ApproximateSize |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 12: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Interval", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Interval == nil { - m.Interval = &TimeInterval{} - } - if err := m.Interval.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 13: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ApproximateRows", wireType) - } - m.ApproximateRows = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ApproximateRows |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ChangePeer) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ChangePeer: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ChangePeer: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Peer", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Peer == nil { - m.Peer = &metapb.Peer{} - } - if err := m.Peer.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ChangeType", wireType) - } - m.ChangeType = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ChangeType |= (eraftpb.ConfChangeType(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *TransferLeader) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: TransferLeader: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TransferLeader: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Peer", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Peer == nil { - m.Peer = &metapb.Peer{} - } - if err := m.Peer.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Merge) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Merge: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Merge: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Target", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Target == nil { - m.Target = &metapb.Region{} - } - if err := m.Target.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SplitRegion) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SplitRegion: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SplitRegion: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RegionHeartbeatResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RegionHeartbeatResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RegionHeartbeatResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ChangePeer", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ChangePeer == nil { - m.ChangePeer = &ChangePeer{} - } - if err := m.ChangePeer.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TransferLeader", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.TransferLeader == nil { - m.TransferLeader = &TransferLeader{} - } - if err := m.TransferLeader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionId", wireType) - } - m.RegionId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RegionId |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionEpoch", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionEpoch == nil { - m.RegionEpoch = &metapb.RegionEpoch{} - } - if err := m.RegionEpoch.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TargetPeer", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.TargetPeer == nil { - m.TargetPeer = &metapb.Peer{} - } - if err := m.TargetPeer.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Merge", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Merge == nil { - m.Merge = &Merge{} - } - if err := m.Merge.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SplitRegion", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.SplitRegion == nil { - m.SplitRegion = &SplitRegion{} - } - if err := m.SplitRegion.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AskSplitRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AskSplitRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AskSplitRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &RequestHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Region", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Region == nil { - m.Region = &metapb.Region{} - } - if err := m.Region.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AskSplitResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AskSplitResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AskSplitResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field NewRegionId", wireType) - } - m.NewRegionId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.NewRegionId |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType == 2 { - var packedLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - packedLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if packedLen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + packedLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - for iNdEx < postIndex { - var v uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.NewPeerIds = append(m.NewPeerIds, v) - } - } else if wireType == 0 { - var v uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.NewPeerIds = append(m.NewPeerIds, v) - } else { - return fmt.Errorf("proto: wrong wireType = %d for field NewPeerIds", wireType) - } - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ReportSplitRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ReportSplitRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ReportSplitRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &RequestHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Left", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Left == nil { - m.Left = &metapb.Region{} - } - if err := m.Left.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Right", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Right == nil { - m.Right = &metapb.Region{} - } - if err := m.Right.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ReportSplitResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ReportSplitResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ReportSplitResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *TimeInterval) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: TimeInterval: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TimeInterval: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StartTimestamp", wireType) - } - m.StartTimestamp = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.StartTimestamp |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field EndTimestamp", wireType) - } - m.EndTimestamp = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.EndTimestamp |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *StoreStats) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: StoreStats: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: StoreStats: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StoreId", wireType) - } - m.StoreId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.StoreId |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Capacity", wireType) - } - m.Capacity = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Capacity |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Available", wireType) - } - m.Available = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Available |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionCount", wireType) - } - m.RegionCount = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RegionCount |= (uint32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field SendingSnapCount", wireType) - } - m.SendingSnapCount = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.SendingSnapCount |= (uint32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ReceivingSnapCount", wireType) - } - m.ReceivingSnapCount = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ReceivingSnapCount |= (uint32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 7: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StartTime", wireType) - } - m.StartTime = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.StartTime |= (uint32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 8: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ApplyingSnapCount", wireType) - } - m.ApplyingSnapCount = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ApplyingSnapCount |= (uint32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 9: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field IsBusy", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.IsBusy = bool(v != 0) - case 10: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field UsedSize", wireType) - } - m.UsedSize = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.UsedSize |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 11: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field BytesWritten", wireType) - } - m.BytesWritten = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.BytesWritten |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 12: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field KeysWritten", wireType) - } - m.KeysWritten = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.KeysWritten |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 13: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field BytesRead", wireType) - } - m.BytesRead = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.BytesRead |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 14: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field KeysRead", wireType) - } - m.KeysRead = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.KeysRead |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 15: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Interval", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Interval == nil { - m.Interval = &TimeInterval{} - } - if err := m.Interval.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *StoreHeartbeatRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: StoreHeartbeatRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: StoreHeartbeatRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &RequestHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Stats", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Stats == nil { - m.Stats = &StoreStats{} - } - if err := m.Stats.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *StoreHeartbeatResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: StoreHeartbeatResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: StoreHeartbeatResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ScatterRegionRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ScatterRegionRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ScatterRegionRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &RequestHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionId", wireType) - } - m.RegionId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RegionId |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Region", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Region == nil { - m.Region = &metapb.Region{} - } - if err := m.Region.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Leader", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Leader == nil { - m.Leader = &metapb.Peer{} - } - if err := m.Leader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ScatterRegionResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ScatterRegionResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ScatterRegionResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPdpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthPdpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &ResponseHeader{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipPdpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPdpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipPdpb(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowPdpb - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowPdpb - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowPdpb - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - iNdEx += length - if length < 0 { - return 0, ErrInvalidLengthPdpb - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowPdpb - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipPdpb(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthPdpb = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowPdpb = fmt.Errorf("proto: integer overflow") -) - -func init() { proto.RegisterFile("pdpb.proto", fileDescriptorPdpb) } - -var fileDescriptorPdpb = []byte{ - // 2016 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x59, 0x4b, 0x6f, 0x23, 0xc7, - 0x11, 0xd6, 0x50, 0x24, 0x45, 0x16, 0x9f, 0xdb, 0x7a, 0x71, 0xb9, 0x2b, 0x45, 0xee, 0x75, 0x12, - 0xd9, 0xb1, 0xe9, 0xb5, 0x12, 0x04, 0x06, 0x0c, 0x07, 0xd6, 0x6b, 0x77, 0xe5, 0xf5, 0x8a, 0x42, - 0x93, 0x86, 0x61, 0x20, 0x08, 0x33, 0xe2, 0xb4, 0xa8, 0x89, 0xc8, 0x99, 0xf1, 0x74, 0x53, 0x0a, - 0x7d, 0xca, 0xc9, 0x97, 0x04, 0xc8, 0x2d, 0xc8, 0x25, 0x40, 0xee, 0x01, 0xf2, 0x17, 0x72, 0xcd, - 0x31, 0x3f, 0x21, 0xd8, 0xfc, 0x91, 0xa0, 0x1f, 0xf3, 0x24, 0x25, 0x2b, 0xb3, 0xf1, 0x49, 0x9c, - 0xaa, 0xea, 0xea, 0xea, 0xaf, 0xeb, 0xd5, 0x25, 0x00, 0xcf, 0xf2, 0xce, 0x3b, 0x9e, 0xef, 0x72, - 0x17, 0xe5, 0xc5, 0xef, 0x76, 0x75, 0x42, 0xb9, 0x19, 0xd0, 0xda, 0x35, 0xea, 0x9b, 0x17, 0x3c, - 0xfc, 0x5c, 0x1b, 0xb9, 0x23, 0x57, 0xfe, 0xfc, 0x40, 0xfc, 0x52, 0x54, 0xdc, 0x81, 0x1a, 0xa1, - 0x5f, 0x4f, 0x29, 0xe3, 0x2f, 0xa8, 0x69, 0x51, 0x1f, 0x6d, 0x01, 0x0c, 0xc7, 0x53, 0xc6, 0xa9, - 0x3f, 0xb0, 0xad, 0x96, 0xb1, 0x63, 0xec, 0xe6, 0x49, 0x59, 0x53, 0x4e, 0x2c, 0x4c, 0xa0, 0x4e, - 0x28, 0xf3, 0x5c, 0x87, 0xd1, 0x7b, 0x2d, 0x40, 0x6f, 0x41, 0x81, 0xfa, 0xbe, 0xeb, 0xb7, 0x72, - 0x3b, 0xc6, 0x6e, 0x65, 0xaf, 0xd2, 0x91, 0x56, 0x1f, 0x0b, 0x12, 0x51, 0x1c, 0xfc, 0x0c, 0x0a, - 0xf2, 0x1b, 0x3d, 0x81, 0x3c, 0x9f, 0x79, 0x54, 0x2a, 0xa9, 0xef, 0x35, 0x62, 0xa2, 0xfd, 0x99, - 0x47, 0x89, 0x64, 0xa2, 0x16, 0xac, 0x4c, 0x28, 0x63, 0xe6, 0x88, 0x4a, 0x95, 0x65, 0x12, 0x7c, - 0xe2, 0x2e, 0x40, 0x9f, 0xb9, 0xfa, 0x38, 0xe8, 0x27, 0x50, 0xbc, 0x94, 0x16, 0x4a, 0x75, 0x95, - 0xbd, 0x55, 0xa5, 0x2e, 0x71, 0x5a, 0xa2, 0x45, 0xd0, 0x1a, 0x14, 0x86, 0xee, 0xd4, 0xe1, 0x52, - 0x65, 0x8d, 0xa8, 0x0f, 0xbc, 0x0f, 0xe5, 0xbe, 0x3d, 0xa1, 0x8c, 0x9b, 0x13, 0x0f, 0xb5, 0xa1, - 0xe4, 0x5d, 0xce, 0x98, 0x3d, 0x34, 0xc7, 0x52, 0xe3, 0x32, 0x09, 0xbf, 0x85, 0x4d, 0x63, 0x77, - 0x24, 0x59, 0x39, 0xc9, 0x0a, 0x3e, 0xf1, 0xef, 0x0c, 0xa8, 0x48, 0xa3, 0x14, 0x66, 0xe8, 0xbd, - 0x94, 0x55, 0x6b, 0x81, 0x55, 0x71, 0x4c, 0xef, 0x36, 0x0b, 0xbd, 0x0f, 0x65, 0x1e, 0x98, 0xd5, - 0x5a, 0x96, 0x6a, 0x34, 0x56, 0xa1, 0xb5, 0x24, 0x92, 0xc0, 0x7f, 0x30, 0xa0, 0x79, 0xe0, 0xba, - 0x9c, 0x71, 0xdf, 0xf4, 0x32, 0xa1, 0xf3, 0x04, 0x0a, 0x8c, 0xbb, 0x3e, 0xd5, 0x77, 0x58, 0xeb, - 0x68, 0x3f, 0xeb, 0x09, 0x22, 0x51, 0x3c, 0xf4, 0x23, 0x28, 0xfa, 0x74, 0x64, 0xbb, 0x8e, 0x36, - 0xa9, 0x1e, 0x48, 0x11, 0x49, 0x25, 0x9a, 0x8b, 0xf7, 0xe1, 0x41, 0xcc, 0x9a, 0x2c, 0xb0, 0xe0, - 0x23, 0x58, 0x3f, 0x61, 0xa1, 0x12, 0x8f, 0x5a, 0x59, 0x4e, 0x85, 0x7f, 0x03, 0x1b, 0x69, 0x2d, - 0x99, 0x2e, 0x09, 0x43, 0xf5, 0x3c, 0xa6, 0x45, 0x82, 0x54, 0x22, 0x09, 0x1a, 0xfe, 0x04, 0xea, - 0xfb, 0xe3, 0xb1, 0x3b, 0x3c, 0x39, 0xca, 0x64, 0x6a, 0x17, 0x1a, 0xe1, 0xf2, 0x4c, 0x36, 0xd6, - 0x21, 0x67, 0x2b, 0xcb, 0xf2, 0x24, 0x67, 0x5b, 0xf8, 0x2b, 0x68, 0x3c, 0xa7, 0x5c, 0xdd, 0x5f, - 0x16, 0x8f, 0x78, 0x08, 0x25, 0x79, 0xeb, 0x83, 0x50, 0xeb, 0x8a, 0xfc, 0x3e, 0xb1, 0x30, 0x85, - 0x66, 0xa4, 0x3a, 0x93, 0xb1, 0xf7, 0x71, 0x37, 0x3c, 0x84, 0xc6, 0xd9, 0xf4, 0x0d, 0x4e, 0x70, - 0xaf, 0x4d, 0x3e, 0x85, 0x66, 0xb4, 0x49, 0x26, 0x57, 0x3d, 0x80, 0xd5, 0xe7, 0x94, 0xef, 0x8f, - 0xc7, 0x52, 0x09, 0xcb, 0x74, 0xfb, 0x57, 0xb0, 0x96, 0xd4, 0x91, 0x09, 0xd5, 0x1f, 0x42, 0x51, - 0x1e, 0x8a, 0xb5, 0x72, 0x3b, 0xcb, 0xf3, 0x27, 0xd6, 0x4c, 0xfc, 0x2b, 0x79, 0x7d, 0x3a, 0x66, - 0xb3, 0x00, 0xbb, 0x05, 0xa0, 0x22, 0x7d, 0x70, 0x45, 0x67, 0x12, 0xdd, 0x2a, 0x29, 0x2b, 0xca, - 0x4b, 0x3a, 0xc3, 0x7f, 0x34, 0xe0, 0x41, 0x6c, 0x83, 0x4c, 0x47, 0x89, 0x52, 0x4d, 0xee, 0xae, - 0x54, 0x83, 0xde, 0x86, 0xe2, 0x58, 0x69, 0x55, 0x29, 0xa9, 0x1a, 0xc8, 0x9d, 0x51, 0xa1, 0x4d, - 0xf1, 0xf0, 0xaf, 0x25, 0xbc, 0x6a, 0xe9, 0xc1, 0x2c, 0x5b, 0x84, 0xa2, 0x47, 0xa0, 0xcf, 0x18, - 0x45, 0x44, 0x49, 0x11, 0x4e, 0x2c, 0xfc, 0x0c, 0x36, 0x9f, 0x53, 0x7e, 0xa8, 0x6a, 0xe2, 0xa1, - 0xeb, 0x5c, 0xd8, 0xa3, 0x4c, 0x8e, 0xc0, 0xa0, 0x35, 0xaf, 0x27, 0x13, 0x82, 0xef, 0xc0, 0x8a, - 0x2e, 0xd1, 0x1a, 0xc2, 0x46, 0x00, 0x8d, 0xd6, 0x4e, 0x02, 0x3e, 0xfe, 0x1a, 0x36, 0xcf, 0xa6, - 0x6f, 0x6e, 0xfc, 0xff, 0xb2, 0xe5, 0x0b, 0x68, 0xcd, 0x6f, 0x99, 0x29, 0xfc, 0xfe, 0x6a, 0x40, - 0xf1, 0x15, 0x9d, 0x9c, 0x53, 0x1f, 0x21, 0xc8, 0x3b, 0xe6, 0x44, 0x35, 0x17, 0x65, 0x22, 0x7f, - 0x8b, 0x5b, 0x9b, 0x48, 0x6e, 0xec, 0xd6, 0x14, 0xe1, 0xc4, 0x12, 0x4c, 0x8f, 0x52, 0x7f, 0x30, - 0xf5, 0xc7, 0xac, 0xb5, 0xbc, 0xb3, 0xbc, 0x5b, 0x26, 0x25, 0x41, 0xf8, 0xc2, 0x1f, 0x33, 0xf4, - 0x03, 0xa8, 0x0c, 0xc7, 0x36, 0x75, 0xb8, 0x62, 0xe7, 0x25, 0x1b, 0x14, 0x49, 0x0a, 0xfc, 0x18, - 0x1a, 0xca, 0xbf, 0x06, 0x9e, 0x6f, 0xbb, 0xbe, 0xcd, 0x67, 0xad, 0xc2, 0x8e, 0xb1, 0x5b, 0x20, - 0x75, 0x45, 0x3e, 0xd3, 0x54, 0xfc, 0xa9, 0x8c, 0x07, 0x65, 0x64, 0xb6, 0xfc, 0xf0, 0x0f, 0x03, - 0x50, 0x5c, 0x45, 0xc6, 0x98, 0x5a, 0x51, 0x27, 0x0f, 0xf2, 0x43, 0x55, 0x89, 0x2b, 0xad, 0x24, - 0x60, 0x2e, 0x88, 0xa9, 0xb8, 0x98, 0xe6, 0xa1, 0xf7, 0xa1, 0x42, 0xf9, 0xd0, 0x1a, 0x68, 0xd1, - 0xfc, 0x02, 0x51, 0x10, 0x02, 0x9f, 0xab, 0x13, 0x9c, 0x41, 0x59, 0x84, 0x64, 0x8f, 0x9b, 0x9c, - 0xa1, 0x1d, 0xc8, 0x0b, 0x98, 0xb5, 0xd5, 0xc9, 0x98, 0x95, 0x1c, 0xf4, 0x16, 0x54, 0x2d, 0xf7, - 0xc6, 0x19, 0x30, 0x3a, 0x74, 0x1d, 0x8b, 0xe9, 0x9b, 0xab, 0x08, 0x5a, 0x4f, 0x91, 0xf0, 0xb7, - 0x79, 0xd8, 0x50, 0x21, 0xfd, 0x82, 0x9a, 0x3e, 0x3f, 0xa7, 0x26, 0xcf, 0xe4, 0xb5, 0xff, 0xd7, - 0x54, 0x83, 0x3a, 0x00, 0xd2, 0x70, 0x71, 0x0a, 0xe5, 0x34, 0x61, 0xeb, 0x16, 0x9e, 0x9f, 0x94, - 0x85, 0x88, 0xf8, 0x64, 0xe8, 0x43, 0xa8, 0x79, 0xd4, 0xb1, 0x6c, 0x67, 0xa4, 0x97, 0x14, 0xf4, - 0xd5, 0xc4, 0x95, 0x57, 0xb5, 0x88, 0x5a, 0xf2, 0x04, 0x6a, 0xe7, 0x33, 0x4e, 0xd9, 0xe0, 0xc6, - 0xb7, 0x39, 0xa7, 0x4e, 0xab, 0x28, 0xc1, 0xa9, 0x4a, 0xe2, 0x97, 0x8a, 0x26, 0x72, 0xb4, 0x12, - 0xf2, 0xa9, 0x69, 0xb5, 0x56, 0x54, 0xcf, 0x2e, 0x29, 0x84, 0x9a, 0xa2, 0x67, 0xaf, 0x5e, 0xd1, - 0x59, 0xa4, 0xa2, 0xa4, 0xf0, 0x15, 0xb4, 0x40, 0xc3, 0x23, 0x28, 0x4b, 0x11, 0xa9, 0xa0, 0xac, - 0x22, 0x47, 0x10, 0xe4, 0xfa, 0x77, 0xa0, 0x69, 0x7a, 0x9e, 0xef, 0xfe, 0xd6, 0x9e, 0x98, 0x9c, - 0x0e, 0x98, 0xfd, 0x0d, 0x6d, 0x81, 0x94, 0x69, 0xc4, 0xe8, 0x3d, 0xfb, 0x1b, 0x8a, 0x3a, 0x50, - 0xb2, 0x1d, 0x4e, 0xfd, 0x6b, 0x73, 0xdc, 0xaa, 0x4a, 0xe4, 0x50, 0xd4, 0xca, 0x9e, 0x68, 0x0e, - 0x09, 0x65, 0xd2, 0xaa, 0x7d, 0xf7, 0x86, 0xb5, 0x6a, 0x73, 0xaa, 0x89, 0x7b, 0xc3, 0x3e, 0xcb, - 0x97, 0x2a, 0xcd, 0x2a, 0xbe, 0x04, 0x38, 0xbc, 0x34, 0x9d, 0x11, 0x15, 0xf0, 0xdc, 0xc3, 0xb7, - 0x3e, 0x82, 0xca, 0x50, 0xca, 0x0f, 0xe4, 0x53, 0x24, 0x27, 0x9f, 0x22, 0x9b, 0x9d, 0xe0, 0x2d, - 0x25, 0xb2, 0x91, 0xd2, 0x27, 0x9f, 0x24, 0x30, 0x0c, 0x7f, 0xe3, 0x3d, 0xa8, 0xf7, 0x7d, 0xd3, - 0x61, 0x17, 0xd4, 0x57, 0x6e, 0xfd, 0xdd, 0xbb, 0xe1, 0x0f, 0xa0, 0xf0, 0x8a, 0xfa, 0x23, 0xd9, - 0x3d, 0x73, 0xd3, 0x1f, 0x51, 0xae, 0x85, 0xe7, 0xfc, 0x4c, 0x71, 0x71, 0x0d, 0x2a, 0x3d, 0x6f, - 0x6c, 0xeb, 0x72, 0x85, 0xff, 0xb4, 0x0c, 0x9b, 0x73, 0x6e, 0x9e, 0x29, 0xfe, 0x3f, 0x0c, 0xcf, - 0x2d, 0x4d, 0x56, 0xde, 0xde, 0x54, 0x4b, 0x22, 0x00, 0x83, 0x03, 0x4b, 0x30, 0x3f, 0x81, 0x06, - 0xd7, 0x07, 0x1e, 0x24, 0x9c, 0x5f, 0xef, 0x94, 0x44, 0x83, 0xd4, 0x79, 0x12, 0x9d, 0x44, 0xc9, - 0xcc, 0x27, 0x4b, 0x26, 0xfa, 0x39, 0x54, 0x35, 0x93, 0x7a, 0xee, 0xf0, 0x52, 0xe6, 0x4e, 0x11, - 0xaa, 0x09, 0x54, 0x8e, 0x05, 0x8b, 0x54, 0xfc, 0xe8, 0x43, 0x24, 0x1e, 0x85, 0x94, 0x3a, 0x46, - 0x71, 0x01, 0xf2, 0xa0, 0x04, 0xce, 0x54, 0x26, 0x29, 0x4c, 0x04, 0xfe, 0x32, 0x06, 0xc2, 0xd7, - 0xa9, 0xbc, 0x12, 0xa2, 0x38, 0xe8, 0x67, 0x50, 0x65, 0x02, 0xf1, 0x81, 0xce, 0x03, 0x25, 0x29, - 0xf9, 0x40, 0x49, 0xc6, 0xee, 0x82, 0x54, 0x58, 0xec, 0x62, 0x2e, 0xa0, 0xb1, 0xcf, 0xae, 0x34, - 0xfb, 0xfb, 0xcb, 0x3b, 0xf8, 0x5b, 0x03, 0x9a, 0xd1, 0x46, 0x19, 0xdf, 0x2f, 0x35, 0x87, 0xde, - 0x0c, 0xd2, 0xed, 0x4b, 0xc5, 0xa1, 0x37, 0x24, 0xb8, 0x8e, 0x1d, 0xa8, 0x0a, 0x19, 0x59, 0x0f, - 0x6d, 0x4b, 0x95, 0xc3, 0x3c, 0x01, 0x87, 0xde, 0x08, 0x18, 0x4f, 0x2c, 0x86, 0x7f, 0x6f, 0x00, - 0x22, 0xd4, 0x73, 0x7d, 0x9e, 0xfd, 0xd0, 0x18, 0xf2, 0x63, 0x7a, 0xc1, 0x6f, 0x39, 0xb2, 0xe4, - 0xa1, 0xb7, 0xa1, 0xe0, 0xdb, 0xa3, 0x4b, 0x7e, 0xcb, 0x2b, 0x53, 0x31, 0xf1, 0x21, 0xac, 0x26, - 0x8c, 0xc9, 0xd4, 0x3c, 0xfc, 0x12, 0xaa, 0xf1, 0x2c, 0x24, 0x4a, 0x3a, 0xe3, 0xa6, 0xcf, 0x07, - 0xd1, 0xeb, 0x5b, 0x8d, 0x3b, 0xea, 0x92, 0x1c, 0x8d, 0x0a, 0x9e, 0x40, 0x8d, 0x3a, 0x56, 0x4c, - 0x4c, 0x21, 0x5a, 0xa5, 0x8e, 0x15, 0x0a, 0xe1, 0xbf, 0xe4, 0x01, 0x64, 0xeb, 0xad, 0xaa, 0x5e, - 0xfc, 0x45, 0x65, 0x24, 0x5e, 0x54, 0xa8, 0x0d, 0xa5, 0xa1, 0xe9, 0x99, 0x43, 0xd1, 0x43, 0xe8, - 0x26, 0x25, 0xf8, 0x46, 0x8f, 0xa1, 0x6c, 0x5e, 0x9b, 0xf6, 0xd8, 0x3c, 0x1f, 0x53, 0x09, 0x49, - 0x9e, 0x44, 0x04, 0x91, 0xc8, 0xf5, 0xb5, 0xaa, 0x31, 0x42, 0x5e, 0x8e, 0x11, 0x74, 0xc0, 0x1c, - 0xca, 0x61, 0xc2, 0x7b, 0x80, 0x98, 0x2e, 0x31, 0xcc, 0x31, 0x3d, 0x2d, 0x58, 0x90, 0x82, 0x4d, - 0xcd, 0xe9, 0x39, 0xa6, 0xa7, 0xa4, 0x9f, 0xc2, 0x9a, 0x4f, 0x87, 0xd4, 0xbe, 0x4e, 0xc9, 0x17, - 0xa5, 0x3c, 0x0a, 0x79, 0xd1, 0x8a, 0x2d, 0x80, 0x08, 0x34, 0x19, 0x66, 0x35, 0x52, 0x0e, 0xf1, - 0x42, 0x1d, 0x58, 0x35, 0x3d, 0x6f, 0x3c, 0x4b, 0xe9, 0x2b, 0x49, 0xb9, 0x07, 0x01, 0x2b, 0x52, - 0xb7, 0x09, 0x2b, 0x36, 0x1b, 0x9c, 0x4f, 0xd9, 0x4c, 0x56, 0x9d, 0x12, 0x29, 0xda, 0xec, 0x60, - 0xca, 0x66, 0x22, 0x9b, 0x4c, 0x19, 0xb5, 0xe2, 0xc5, 0xa6, 0x24, 0x08, 0xb2, 0xca, 0xcc, 0x15, - 0xc5, 0xca, 0x82, 0xa2, 0x98, 0xae, 0x7a, 0xd5, 0xf9, 0xaa, 0x97, 0xac, 0x9b, 0xb5, 0x74, 0xdd, - 0x4c, 0x14, 0xc5, 0x7a, 0xaa, 0x28, 0xc6, 0x2b, 0x5d, 0xe3, 0xbb, 0x2b, 0x1d, 0x1e, 0xc3, 0xba, - 0x74, 0x8f, 0x37, 0xed, 0x5f, 0x0a, 0x4c, 0xf8, 0x57, 0x32, 0xa1, 0x47, 0x7e, 0x47, 0x14, 0x1b, - 0x3f, 0x83, 0x8d, 0xf4, 0x6e, 0x99, 0x62, 0xe6, 0xef, 0x06, 0xac, 0xf5, 0x86, 0x26, 0x17, 0xfd, - 0x7c, 0xf6, 0x37, 0xe4, 0x5d, 0xaf, 0xa9, 0xfb, 0x0e, 0x9a, 0x62, 0x2d, 0x59, 0xfe, 0x8e, 0xd7, - 0xdf, 0x31, 0xac, 0xa7, 0xec, 0xcd, 0x72, 0xee, 0x77, 0x29, 0x94, 0xc3, 0x41, 0x25, 0x2a, 0x42, - 0xae, 0xfb, 0xb2, 0xb9, 0x84, 0x2a, 0xb0, 0xf2, 0xc5, 0xe9, 0xcb, 0xd3, 0xee, 0x97, 0xa7, 0x4d, - 0x03, 0xad, 0x41, 0xf3, 0xb4, 0xdb, 0x1f, 0x1c, 0x74, 0xbb, 0xfd, 0x5e, 0x9f, 0xec, 0x9f, 0x9d, - 0x1d, 0x1f, 0x35, 0x73, 0x68, 0x15, 0x1a, 0xbd, 0x7e, 0x97, 0x1c, 0x0f, 0xfa, 0xdd, 0x57, 0x07, - 0xbd, 0x7e, 0xf7, 0xf4, 0xb8, 0xb9, 0x8c, 0x5a, 0xb0, 0xb6, 0xff, 0x39, 0x39, 0xde, 0x3f, 0xfa, - 0x2a, 0x29, 0x9e, 0xdf, 0xfb, 0x5b, 0x19, 0x72, 0x67, 0x47, 0x68, 0x1f, 0x20, 0x6a, 0xf8, 0xd1, - 0xa6, 0xb2, 0x6c, 0xee, 0x15, 0xd1, 0x6e, 0xcd, 0x33, 0x94, 0xf1, 0x78, 0x09, 0x3d, 0x85, 0xe5, - 0x3e, 0x73, 0x91, 0x76, 0x88, 0x68, 0x6e, 0xda, 0x7e, 0x10, 0xa3, 0x04, 0xd2, 0xbb, 0xc6, 0x53, - 0x03, 0xfd, 0x02, 0xca, 0xe1, 0xb4, 0x0c, 0x6d, 0x28, 0xa9, 0xf4, 0x5c, 0xb1, 0xbd, 0x39, 0x47, - 0x0f, 0x77, 0x7c, 0x05, 0xf5, 0xe4, 0xbc, 0x0d, 0x3d, 0x52, 0xc2, 0x0b, 0x67, 0x79, 0xed, 0xc7, - 0x8b, 0x99, 0xa1, 0xba, 0x8f, 0x60, 0x45, 0xcf, 0xc4, 0x90, 0xbe, 0x9a, 0xe4, 0x84, 0xad, 0xbd, - 0x9e, 0xa2, 0x86, 0x2b, 0x3f, 0x86, 0x52, 0x30, 0xa1, 0x42, 0xeb, 0x21, 0x44, 0xf1, 0x51, 0x52, - 0x7b, 0x23, 0x4d, 0x8e, 0x2f, 0x0e, 0x46, 0x42, 0xc1, 0xe2, 0xd4, 0x1c, 0x2a, 0x58, 0x9c, 0x9e, - 0x1c, 0xe1, 0x25, 0xf4, 0x1c, 0xaa, 0xf1, 0x49, 0x0e, 0x7a, 0x18, 0x6e, 0x93, 0x9e, 0x10, 0xb5, - 0xdb, 0x8b, 0x58, 0x71, 0x2c, 0x93, 0xe1, 0x1a, 0x60, 0xb9, 0x30, 0x65, 0x04, 0x58, 0x2e, 0x8e, - 0x70, 0xbc, 0x84, 0xfa, 0xd0, 0x48, 0x75, 0x91, 0xe8, 0x71, 0xe0, 0xee, 0x8b, 0xde, 0x50, 0xed, - 0xad, 0x5b, 0xb8, 0x69, 0x87, 0x09, 0x07, 0x2b, 0x28, 0x42, 0x34, 0x91, 0x17, 0xda, 0x9b, 0x73, - 0xf4, 0xd0, 0xaa, 0x67, 0x50, 0x4b, 0x0c, 0x66, 0x50, 0x3b, 0x25, 0x1b, 0x9b, 0xd6, 0xdc, 0xa5, - 0xe7, 0x63, 0x28, 0x05, 0x2d, 0x52, 0x70, 0x65, 0xa9, 0xde, 0x2c, 0xb8, 0xb2, 0x74, 0x27, 0x85, - 0x97, 0xd0, 0x11, 0x54, 0x62, 0x9d, 0x04, 0x6a, 0x05, 0x07, 0x4f, 0x77, 0x3a, 0xed, 0x87, 0x0b, - 0x38, 0xa1, 0x96, 0x9e, 0x9c, 0xaa, 0x25, 0x26, 0x1a, 0x68, 0x2b, 0xb4, 0x78, 0xd1, 0x70, 0xa5, - 0xbd, 0x7d, 0x1b, 0x3b, 0xae, 0x34, 0x3d, 0x26, 0x09, 0x94, 0xde, 0x32, 0xb1, 0x09, 0x94, 0xde, - 0x36, 0x5d, 0xc1, 0x4b, 0xe8, 0x33, 0xa8, 0x25, 0xf2, 0x61, 0x00, 0xfa, 0xa2, 0xa4, 0xde, 0x7e, - 0xb4, 0x90, 0x17, 0xe8, 0x3a, 0x78, 0xf7, 0x9f, 0xaf, 0xb7, 0x8d, 0x7f, 0xbd, 0xde, 0x36, 0xfe, - 0xfd, 0x7a, 0xdb, 0xf8, 0xf3, 0x7f, 0xb6, 0x97, 0xa0, 0x35, 0x74, 0x27, 0x1d, 0xcf, 0x76, 0x46, - 0x43, 0xd3, 0xeb, 0x70, 0xfb, 0xea, 0xba, 0x73, 0x75, 0x2d, 0xff, 0x11, 0x75, 0x5e, 0x94, 0x7f, - 0x7e, 0xfa, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x45, 0x28, 0x8f, 0x40, 0xd6, 0x1a, 0x00, 0x00, -} diff --git a/vendor/github.com/pingcap/kvproto/pkg/raft_serverpb/raft_serverpb.pb.go b/vendor/github.com/pingcap/kvproto/pkg/raft_serverpb/raft_serverpb.pb.go deleted file mode 100644 index 3f99653..0000000 --- a/vendor/github.com/pingcap/kvproto/pkg/raft_serverpb/raft_serverpb.pb.go +++ /dev/null @@ -1,3019 +0,0 @@ -// Code generated by protoc-gen-gogo. -// source: raft_serverpb.proto -// DO NOT EDIT! - -/* - Package raft_serverpb is a generated protocol buffer package. - - It is generated from these files: - raft_serverpb.proto - - It has these top-level messages: - RaftMessage - RaftTruncatedState - SnapshotCFFile - SnapshotMeta - SnapshotChunk - Done - KeyValue - RaftSnapshotData - StoreIdent - RaftLocalState - RaftApplyState - MergeState - RegionLocalState -*/ -package raft_serverpb - -import ( - "fmt" - "io" - "math" - - proto "github.com/golang/protobuf/proto" - - eraftpb "github.com/pingcap/kvproto/pkg/eraftpb" - - metapb "github.com/pingcap/kvproto/pkg/metapb" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -type PeerState int32 - -const ( - PeerState_Normal PeerState = 0 - PeerState_Applying PeerState = 1 - PeerState_Tombstone PeerState = 2 - PeerState_Merging PeerState = 3 -) - -var PeerState_name = map[int32]string{ - 0: "Normal", - 1: "Applying", - 2: "Tombstone", - 3: "Merging", -} -var PeerState_value = map[string]int32{ - "Normal": 0, - "Applying": 1, - "Tombstone": 2, - "Merging": 3, -} - -func (x PeerState) String() string { - return proto.EnumName(PeerState_name, int32(x)) -} -func (PeerState) EnumDescriptor() ([]byte, []int) { return fileDescriptorRaftServerpb, []int{0} } - -type RaftMessage struct { - RegionId uint64 `protobuf:"varint,1,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` - FromPeer *metapb.Peer `protobuf:"bytes,2,opt,name=from_peer,json=fromPeer" json:"from_peer,omitempty"` - ToPeer *metapb.Peer `protobuf:"bytes,3,opt,name=to_peer,json=toPeer" json:"to_peer,omitempty"` - Message *eraftpb.Message `protobuf:"bytes,4,opt,name=message" json:"message,omitempty"` - RegionEpoch *metapb.RegionEpoch `protobuf:"bytes,5,opt,name=region_epoch,json=regionEpoch" json:"region_epoch,omitempty"` - // true means to_peer is a tombstone peer and it should remove itself. - IsTombstone bool `protobuf:"varint,6,opt,name=is_tombstone,json=isTombstone,proto3" json:"is_tombstone,omitempty"` - // Region key range [start_key, end_key). - StartKey []byte `protobuf:"bytes,7,opt,name=start_key,json=startKey,proto3" json:"start_key,omitempty"` - EndKey []byte `protobuf:"bytes,8,opt,name=end_key,json=endKey,proto3" json:"end_key,omitempty"` - // If it has value, to_peer should be removed if merge is never going to complete. - MergeTarget *metapb.Region `protobuf:"bytes,9,opt,name=merge_target,json=mergeTarget" json:"merge_target,omitempty"` -} - -func (m *RaftMessage) Reset() { *m = RaftMessage{} } -func (m *RaftMessage) String() string { return proto.CompactTextString(m) } -func (*RaftMessage) ProtoMessage() {} -func (*RaftMessage) Descriptor() ([]byte, []int) { return fileDescriptorRaftServerpb, []int{0} } - -func (m *RaftMessage) GetRegionId() uint64 { - if m != nil { - return m.RegionId - } - return 0 -} - -func (m *RaftMessage) GetFromPeer() *metapb.Peer { - if m != nil { - return m.FromPeer - } - return nil -} - -func (m *RaftMessage) GetToPeer() *metapb.Peer { - if m != nil { - return m.ToPeer - } - return nil -} - -func (m *RaftMessage) GetMessage() *eraftpb.Message { - if m != nil { - return m.Message - } - return nil -} - -func (m *RaftMessage) GetRegionEpoch() *metapb.RegionEpoch { - if m != nil { - return m.RegionEpoch - } - return nil -} - -func (m *RaftMessage) GetIsTombstone() bool { - if m != nil { - return m.IsTombstone - } - return false -} - -func (m *RaftMessage) GetStartKey() []byte { - if m != nil { - return m.StartKey - } - return nil -} - -func (m *RaftMessage) GetEndKey() []byte { - if m != nil { - return m.EndKey - } - return nil -} - -func (m *RaftMessage) GetMergeTarget() *metapb.Region { - if m != nil { - return m.MergeTarget - } - return nil -} - -type RaftTruncatedState struct { - Index uint64 `protobuf:"varint,1,opt,name=index,proto3" json:"index,omitempty"` - Term uint64 `protobuf:"varint,2,opt,name=term,proto3" json:"term,omitempty"` -} - -func (m *RaftTruncatedState) Reset() { *m = RaftTruncatedState{} } -func (m *RaftTruncatedState) String() string { return proto.CompactTextString(m) } -func (*RaftTruncatedState) ProtoMessage() {} -func (*RaftTruncatedState) Descriptor() ([]byte, []int) { return fileDescriptorRaftServerpb, []int{1} } - -func (m *RaftTruncatedState) GetIndex() uint64 { - if m != nil { - return m.Index - } - return 0 -} - -func (m *RaftTruncatedState) GetTerm() uint64 { - if m != nil { - return m.Term - } - return 0 -} - -type SnapshotCFFile struct { - Cf string `protobuf:"bytes,1,opt,name=cf,proto3" json:"cf,omitempty"` - Size_ uint64 `protobuf:"varint,2,opt,name=size,proto3" json:"size,omitempty"` - Checksum uint32 `protobuf:"varint,3,opt,name=checksum,proto3" json:"checksum,omitempty"` -} - -func (m *SnapshotCFFile) Reset() { *m = SnapshotCFFile{} } -func (m *SnapshotCFFile) String() string { return proto.CompactTextString(m) } -func (*SnapshotCFFile) ProtoMessage() {} -func (*SnapshotCFFile) Descriptor() ([]byte, []int) { return fileDescriptorRaftServerpb, []int{2} } - -func (m *SnapshotCFFile) GetCf() string { - if m != nil { - return m.Cf - } - return "" -} - -func (m *SnapshotCFFile) GetSize_() uint64 { - if m != nil { - return m.Size_ - } - return 0 -} - -func (m *SnapshotCFFile) GetChecksum() uint32 { - if m != nil { - return m.Checksum - } - return 0 -} - -type SnapshotMeta struct { - CfFiles []*SnapshotCFFile `protobuf:"bytes,1,rep,name=cf_files,json=cfFiles" json:"cf_files,omitempty"` -} - -func (m *SnapshotMeta) Reset() { *m = SnapshotMeta{} } -func (m *SnapshotMeta) String() string { return proto.CompactTextString(m) } -func (*SnapshotMeta) ProtoMessage() {} -func (*SnapshotMeta) Descriptor() ([]byte, []int) { return fileDescriptorRaftServerpb, []int{3} } - -func (m *SnapshotMeta) GetCfFiles() []*SnapshotCFFile { - if m != nil { - return m.CfFiles - } - return nil -} - -type SnapshotChunk struct { - Message *RaftMessage `protobuf:"bytes,1,opt,name=message" json:"message,omitempty"` - Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` -} - -func (m *SnapshotChunk) Reset() { *m = SnapshotChunk{} } -func (m *SnapshotChunk) String() string { return proto.CompactTextString(m) } -func (*SnapshotChunk) ProtoMessage() {} -func (*SnapshotChunk) Descriptor() ([]byte, []int) { return fileDescriptorRaftServerpb, []int{4} } - -func (m *SnapshotChunk) GetMessage() *RaftMessage { - if m != nil { - return m.Message - } - return nil -} - -func (m *SnapshotChunk) GetData() []byte { - if m != nil { - return m.Data - } - return nil -} - -type Done struct { -} - -func (m *Done) Reset() { *m = Done{} } -func (m *Done) String() string { return proto.CompactTextString(m) } -func (*Done) ProtoMessage() {} -func (*Done) Descriptor() ([]byte, []int) { return fileDescriptorRaftServerpb, []int{5} } - -type KeyValue struct { - Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` -} - -func (m *KeyValue) Reset() { *m = KeyValue{} } -func (m *KeyValue) String() string { return proto.CompactTextString(m) } -func (*KeyValue) ProtoMessage() {} -func (*KeyValue) Descriptor() ([]byte, []int) { return fileDescriptorRaftServerpb, []int{6} } - -func (m *KeyValue) GetKey() []byte { - if m != nil { - return m.Key - } - return nil -} - -func (m *KeyValue) GetValue() []byte { - if m != nil { - return m.Value - } - return nil -} - -type RaftSnapshotData struct { - Region *metapb.Region `protobuf:"bytes,1,opt,name=region" json:"region,omitempty"` - FileSize uint64 `protobuf:"varint,2,opt,name=file_size,json=fileSize,proto3" json:"file_size,omitempty"` - Data []*KeyValue `protobuf:"bytes,3,rep,name=data" json:"data,omitempty"` - Version uint64 `protobuf:"varint,4,opt,name=version,proto3" json:"version,omitempty"` - Meta *SnapshotMeta `protobuf:"bytes,5,opt,name=meta" json:"meta,omitempty"` -} - -func (m *RaftSnapshotData) Reset() { *m = RaftSnapshotData{} } -func (m *RaftSnapshotData) String() string { return proto.CompactTextString(m) } -func (*RaftSnapshotData) ProtoMessage() {} -func (*RaftSnapshotData) Descriptor() ([]byte, []int) { return fileDescriptorRaftServerpb, []int{7} } - -func (m *RaftSnapshotData) GetRegion() *metapb.Region { - if m != nil { - return m.Region - } - return nil -} - -func (m *RaftSnapshotData) GetFileSize() uint64 { - if m != nil { - return m.FileSize - } - return 0 -} - -func (m *RaftSnapshotData) GetData() []*KeyValue { - if m != nil { - return m.Data - } - return nil -} - -func (m *RaftSnapshotData) GetVersion() uint64 { - if m != nil { - return m.Version - } - return 0 -} - -func (m *RaftSnapshotData) GetMeta() *SnapshotMeta { - if m != nil { - return m.Meta - } - return nil -} - -type StoreIdent struct { - ClusterId uint64 `protobuf:"varint,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` - StoreId uint64 `protobuf:"varint,2,opt,name=store_id,json=storeId,proto3" json:"store_id,omitempty"` -} - -func (m *StoreIdent) Reset() { *m = StoreIdent{} } -func (m *StoreIdent) String() string { return proto.CompactTextString(m) } -func (*StoreIdent) ProtoMessage() {} -func (*StoreIdent) Descriptor() ([]byte, []int) { return fileDescriptorRaftServerpb, []int{8} } - -func (m *StoreIdent) GetClusterId() uint64 { - if m != nil { - return m.ClusterId - } - return 0 -} - -func (m *StoreIdent) GetStoreId() uint64 { - if m != nil { - return m.StoreId - } - return 0 -} - -type RaftLocalState struct { - HardState *eraftpb.HardState `protobuf:"bytes,1,opt,name=hard_state,json=hardState" json:"hard_state,omitempty"` - LastIndex uint64 `protobuf:"varint,2,opt,name=last_index,json=lastIndex,proto3" json:"last_index,omitempty"` -} - -func (m *RaftLocalState) Reset() { *m = RaftLocalState{} } -func (m *RaftLocalState) String() string { return proto.CompactTextString(m) } -func (*RaftLocalState) ProtoMessage() {} -func (*RaftLocalState) Descriptor() ([]byte, []int) { return fileDescriptorRaftServerpb, []int{9} } - -func (m *RaftLocalState) GetHardState() *eraftpb.HardState { - if m != nil { - return m.HardState - } - return nil -} - -func (m *RaftLocalState) GetLastIndex() uint64 { - if m != nil { - return m.LastIndex - } - return 0 -} - -type RaftApplyState struct { - AppliedIndex uint64 `protobuf:"varint,1,opt,name=applied_index,json=appliedIndex,proto3" json:"applied_index,omitempty"` - TruncatedState *RaftTruncatedState `protobuf:"bytes,2,opt,name=truncated_state,json=truncatedState" json:"truncated_state,omitempty"` -} - -func (m *RaftApplyState) Reset() { *m = RaftApplyState{} } -func (m *RaftApplyState) String() string { return proto.CompactTextString(m) } -func (*RaftApplyState) ProtoMessage() {} -func (*RaftApplyState) Descriptor() ([]byte, []int) { return fileDescriptorRaftServerpb, []int{10} } - -func (m *RaftApplyState) GetAppliedIndex() uint64 { - if m != nil { - return m.AppliedIndex - } - return 0 -} - -func (m *RaftApplyState) GetTruncatedState() *RaftTruncatedState { - if m != nil { - return m.TruncatedState - } - return nil -} - -type MergeState struct { - MinIndex uint64 `protobuf:"varint,1,opt,name=min_index,json=minIndex,proto3" json:"min_index,omitempty"` - Target *metapb.Region `protobuf:"bytes,2,opt,name=target" json:"target,omitempty"` - Commit uint64 `protobuf:"varint,3,opt,name=commit,proto3" json:"commit,omitempty"` -} - -func (m *MergeState) Reset() { *m = MergeState{} } -func (m *MergeState) String() string { return proto.CompactTextString(m) } -func (*MergeState) ProtoMessage() {} -func (*MergeState) Descriptor() ([]byte, []int) { return fileDescriptorRaftServerpb, []int{11} } - -func (m *MergeState) GetMinIndex() uint64 { - if m != nil { - return m.MinIndex - } - return 0 -} - -func (m *MergeState) GetTarget() *metapb.Region { - if m != nil { - return m.Target - } - return nil -} - -func (m *MergeState) GetCommit() uint64 { - if m != nil { - return m.Commit - } - return 0 -} - -type RegionLocalState struct { - State PeerState `protobuf:"varint,1,opt,name=state,proto3,enum=raft_serverpb.PeerState" json:"state,omitempty"` - Region *metapb.Region `protobuf:"bytes,2,opt,name=region" json:"region,omitempty"` - MergeState *MergeState `protobuf:"bytes,3,opt,name=merge_state,json=mergeState" json:"merge_state,omitempty"` -} - -func (m *RegionLocalState) Reset() { *m = RegionLocalState{} } -func (m *RegionLocalState) String() string { return proto.CompactTextString(m) } -func (*RegionLocalState) ProtoMessage() {} -func (*RegionLocalState) Descriptor() ([]byte, []int) { return fileDescriptorRaftServerpb, []int{12} } - -func (m *RegionLocalState) GetState() PeerState { - if m != nil { - return m.State - } - return PeerState_Normal -} - -func (m *RegionLocalState) GetRegion() *metapb.Region { - if m != nil { - return m.Region - } - return nil -} - -func (m *RegionLocalState) GetMergeState() *MergeState { - if m != nil { - return m.MergeState - } - return nil -} - -func init() { - proto.RegisterType((*RaftMessage)(nil), "raft_serverpb.RaftMessage") - proto.RegisterType((*RaftTruncatedState)(nil), "raft_serverpb.RaftTruncatedState") - proto.RegisterType((*SnapshotCFFile)(nil), "raft_serverpb.SnapshotCFFile") - proto.RegisterType((*SnapshotMeta)(nil), "raft_serverpb.SnapshotMeta") - proto.RegisterType((*SnapshotChunk)(nil), "raft_serverpb.SnapshotChunk") - proto.RegisterType((*Done)(nil), "raft_serverpb.Done") - proto.RegisterType((*KeyValue)(nil), "raft_serverpb.KeyValue") - proto.RegisterType((*RaftSnapshotData)(nil), "raft_serverpb.RaftSnapshotData") - proto.RegisterType((*StoreIdent)(nil), "raft_serverpb.StoreIdent") - proto.RegisterType((*RaftLocalState)(nil), "raft_serverpb.RaftLocalState") - proto.RegisterType((*RaftApplyState)(nil), "raft_serverpb.RaftApplyState") - proto.RegisterType((*MergeState)(nil), "raft_serverpb.MergeState") - proto.RegisterType((*RegionLocalState)(nil), "raft_serverpb.RegionLocalState") - proto.RegisterEnum("raft_serverpb.PeerState", PeerState_name, PeerState_value) -} -func (m *RaftMessage) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RaftMessage) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RegionId != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.RegionId)) - } - if m.FromPeer != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.FromPeer.Size())) - n1, err := m.FromPeer.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if m.ToPeer != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.ToPeer.Size())) - n2, err := m.ToPeer.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.Message != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.Message.Size())) - n3, err := m.Message.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.RegionEpoch != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.RegionEpoch.Size())) - n4, err := m.RegionEpoch.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if m.IsTombstone { - dAtA[i] = 0x30 - i++ - if m.IsTombstone { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if len(m.StartKey) > 0 { - dAtA[i] = 0x3a - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(len(m.StartKey))) - i += copy(dAtA[i:], m.StartKey) - } - if len(m.EndKey) > 0 { - dAtA[i] = 0x42 - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(len(m.EndKey))) - i += copy(dAtA[i:], m.EndKey) - } - if m.MergeTarget != nil { - dAtA[i] = 0x4a - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.MergeTarget.Size())) - n5, err := m.MergeTarget.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - return i, nil -} - -func (m *RaftTruncatedState) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RaftTruncatedState) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Index != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.Index)) - } - if m.Term != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.Term)) - } - return i, nil -} - -func (m *SnapshotCFFile) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *SnapshotCFFile) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Cf) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(len(m.Cf))) - i += copy(dAtA[i:], m.Cf) - } - if m.Size_ != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.Size_)) - } - if m.Checksum != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.Checksum)) - } - return i, nil -} - -func (m *SnapshotMeta) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *SnapshotMeta) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.CfFiles) > 0 { - for _, msg := range m.CfFiles { - dAtA[i] = 0xa - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *SnapshotChunk) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *SnapshotChunk) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Message != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.Message.Size())) - n6, err := m.Message.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - if len(m.Data) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(len(m.Data))) - i += copy(dAtA[i:], m.Data) - } - return i, nil -} - -func (m *Done) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Done) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - return i, nil -} - -func (m *KeyValue) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *KeyValue) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Key) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - } - if len(m.Value) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(len(m.Value))) - i += copy(dAtA[i:], m.Value) - } - return i, nil -} - -func (m *RaftSnapshotData) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RaftSnapshotData) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Region != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.Region.Size())) - n7, err := m.Region.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - } - if m.FileSize != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.FileSize)) - } - if len(m.Data) > 0 { - for _, msg := range m.Data { - dAtA[i] = 0x1a - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.Version != 0 { - dAtA[i] = 0x20 - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.Version)) - } - if m.Meta != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.Meta.Size())) - n8, err := m.Meta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 - } - return i, nil -} - -func (m *StoreIdent) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *StoreIdent) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.ClusterId != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.ClusterId)) - } - if m.StoreId != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.StoreId)) - } - return i, nil -} - -func (m *RaftLocalState) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RaftLocalState) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.HardState != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.HardState.Size())) - n9, err := m.HardState.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 - } - if m.LastIndex != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.LastIndex)) - } - return i, nil -} - -func (m *RaftApplyState) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RaftApplyState) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.AppliedIndex != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.AppliedIndex)) - } - if m.TruncatedState != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.TruncatedState.Size())) - n10, err := m.TruncatedState.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 - } - return i, nil -} - -func (m *MergeState) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MergeState) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.MinIndex != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.MinIndex)) - } - if m.Target != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.Target.Size())) - n11, err := m.Target.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n11 - } - if m.Commit != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.Commit)) - } - return i, nil -} - -func (m *RegionLocalState) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RegionLocalState) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.State != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.State)) - } - if m.Region != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.Region.Size())) - n12, err := m.Region.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n12 - } - if m.MergeState != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintRaftServerpb(dAtA, i, uint64(m.MergeState.Size())) - n13, err := m.MergeState.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n13 - } - return i, nil -} - -func encodeFixed64RaftServerpb(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32RaftServerpb(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintRaftServerpb(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *RaftMessage) Size() (n int) { - var l int - _ = l - if m.RegionId != 0 { - n += 1 + sovRaftServerpb(uint64(m.RegionId)) - } - if m.FromPeer != nil { - l = m.FromPeer.Size() - n += 1 + l + sovRaftServerpb(uint64(l)) - } - if m.ToPeer != nil { - l = m.ToPeer.Size() - n += 1 + l + sovRaftServerpb(uint64(l)) - } - if m.Message != nil { - l = m.Message.Size() - n += 1 + l + sovRaftServerpb(uint64(l)) - } - if m.RegionEpoch != nil { - l = m.RegionEpoch.Size() - n += 1 + l + sovRaftServerpb(uint64(l)) - } - if m.IsTombstone { - n += 2 - } - l = len(m.StartKey) - if l > 0 { - n += 1 + l + sovRaftServerpb(uint64(l)) - } - l = len(m.EndKey) - if l > 0 { - n += 1 + l + sovRaftServerpb(uint64(l)) - } - if m.MergeTarget != nil { - l = m.MergeTarget.Size() - n += 1 + l + sovRaftServerpb(uint64(l)) - } - return n -} - -func (m *RaftTruncatedState) Size() (n int) { - var l int - _ = l - if m.Index != 0 { - n += 1 + sovRaftServerpb(uint64(m.Index)) - } - if m.Term != 0 { - n += 1 + sovRaftServerpb(uint64(m.Term)) - } - return n -} - -func (m *SnapshotCFFile) Size() (n int) { - var l int - _ = l - l = len(m.Cf) - if l > 0 { - n += 1 + l + sovRaftServerpb(uint64(l)) - } - if m.Size_ != 0 { - n += 1 + sovRaftServerpb(uint64(m.Size_)) - } - if m.Checksum != 0 { - n += 1 + sovRaftServerpb(uint64(m.Checksum)) - } - return n -} - -func (m *SnapshotMeta) Size() (n int) { - var l int - _ = l - if len(m.CfFiles) > 0 { - for _, e := range m.CfFiles { - l = e.Size() - n += 1 + l + sovRaftServerpb(uint64(l)) - } - } - return n -} - -func (m *SnapshotChunk) Size() (n int) { - var l int - _ = l - if m.Message != nil { - l = m.Message.Size() - n += 1 + l + sovRaftServerpb(uint64(l)) - } - l = len(m.Data) - if l > 0 { - n += 1 + l + sovRaftServerpb(uint64(l)) - } - return n -} - -func (m *Done) Size() (n int) { - var l int - _ = l - return n -} - -func (m *KeyValue) Size() (n int) { - var l int - _ = l - l = len(m.Key) - if l > 0 { - n += 1 + l + sovRaftServerpb(uint64(l)) - } - l = len(m.Value) - if l > 0 { - n += 1 + l + sovRaftServerpb(uint64(l)) - } - return n -} - -func (m *RaftSnapshotData) Size() (n int) { - var l int - _ = l - if m.Region != nil { - l = m.Region.Size() - n += 1 + l + sovRaftServerpb(uint64(l)) - } - if m.FileSize != 0 { - n += 1 + sovRaftServerpb(uint64(m.FileSize)) - } - if len(m.Data) > 0 { - for _, e := range m.Data { - l = e.Size() - n += 1 + l + sovRaftServerpb(uint64(l)) - } - } - if m.Version != 0 { - n += 1 + sovRaftServerpb(uint64(m.Version)) - } - if m.Meta != nil { - l = m.Meta.Size() - n += 1 + l + sovRaftServerpb(uint64(l)) - } - return n -} - -func (m *StoreIdent) Size() (n int) { - var l int - _ = l - if m.ClusterId != 0 { - n += 1 + sovRaftServerpb(uint64(m.ClusterId)) - } - if m.StoreId != 0 { - n += 1 + sovRaftServerpb(uint64(m.StoreId)) - } - return n -} - -func (m *RaftLocalState) Size() (n int) { - var l int - _ = l - if m.HardState != nil { - l = m.HardState.Size() - n += 1 + l + sovRaftServerpb(uint64(l)) - } - if m.LastIndex != 0 { - n += 1 + sovRaftServerpb(uint64(m.LastIndex)) - } - return n -} - -func (m *RaftApplyState) Size() (n int) { - var l int - _ = l - if m.AppliedIndex != 0 { - n += 1 + sovRaftServerpb(uint64(m.AppliedIndex)) - } - if m.TruncatedState != nil { - l = m.TruncatedState.Size() - n += 1 + l + sovRaftServerpb(uint64(l)) - } - return n -} - -func (m *MergeState) Size() (n int) { - var l int - _ = l - if m.MinIndex != 0 { - n += 1 + sovRaftServerpb(uint64(m.MinIndex)) - } - if m.Target != nil { - l = m.Target.Size() - n += 1 + l + sovRaftServerpb(uint64(l)) - } - if m.Commit != 0 { - n += 1 + sovRaftServerpb(uint64(m.Commit)) - } - return n -} - -func (m *RegionLocalState) Size() (n int) { - var l int - _ = l - if m.State != 0 { - n += 1 + sovRaftServerpb(uint64(m.State)) - } - if m.Region != nil { - l = m.Region.Size() - n += 1 + l + sovRaftServerpb(uint64(l)) - } - if m.MergeState != nil { - l = m.MergeState.Size() - n += 1 + l + sovRaftServerpb(uint64(l)) - } - return n -} - -func sovRaftServerpb(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozRaftServerpb(x uint64) (n int) { - return sovRaftServerpb(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *RaftMessage) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RaftMessage: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RaftMessage: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionId", wireType) - } - m.RegionId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RegionId |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FromPeer", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftServerpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.FromPeer == nil { - m.FromPeer = &metapb.Peer{} - } - if err := m.FromPeer.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ToPeer", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftServerpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ToPeer == nil { - m.ToPeer = &metapb.Peer{} - } - if err := m.ToPeer.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftServerpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Message == nil { - m.Message = &eraftpb.Message{} - } - if err := m.Message.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegionEpoch", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftServerpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RegionEpoch == nil { - m.RegionEpoch = &metapb.RegionEpoch{} - } - if err := m.RegionEpoch.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field IsTombstone", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.IsTombstone = bool(v != 0) - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StartKey", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthRaftServerpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.StartKey = append(m.StartKey[:0], dAtA[iNdEx:postIndex]...) - if m.StartKey == nil { - m.StartKey = []byte{} - } - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EndKey", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthRaftServerpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.EndKey = append(m.EndKey[:0], dAtA[iNdEx:postIndex]...) - if m.EndKey == nil { - m.EndKey = []byte{} - } - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MergeTarget", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftServerpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MergeTarget == nil { - m.MergeTarget = &metapb.Region{} - } - if err := m.MergeTarget.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRaftServerpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRaftServerpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RaftTruncatedState) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RaftTruncatedState: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RaftTruncatedState: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Index", wireType) - } - m.Index = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Index |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Term", wireType) - } - m.Term = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Term |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipRaftServerpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRaftServerpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SnapshotCFFile) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SnapshotCFFile: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SnapshotCFFile: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cf", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRaftServerpb - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Cf = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Size_", wireType) - } - m.Size_ = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Size_ |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Checksum", wireType) - } - m.Checksum = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Checksum |= (uint32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipRaftServerpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRaftServerpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SnapshotMeta) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SnapshotMeta: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SnapshotMeta: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CfFiles", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftServerpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CfFiles = append(m.CfFiles, &SnapshotCFFile{}) - if err := m.CfFiles[len(m.CfFiles)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRaftServerpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRaftServerpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SnapshotChunk) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SnapshotChunk: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SnapshotChunk: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftServerpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Message == nil { - m.Message = &RaftMessage{} - } - if err := m.Message.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthRaftServerpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...) - if m.Data == nil { - m.Data = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRaftServerpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRaftServerpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Done) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Done: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Done: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipRaftServerpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRaftServerpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *KeyValue) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: KeyValue: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: KeyValue: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthRaftServerpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...) - if m.Key == nil { - m.Key = []byte{} - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthRaftServerpb - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Value = append(m.Value[:0], dAtA[iNdEx:postIndex]...) - if m.Value == nil { - m.Value = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRaftServerpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRaftServerpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RaftSnapshotData) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RaftSnapshotData: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RaftSnapshotData: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Region", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftServerpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Region == nil { - m.Region = &metapb.Region{} - } - if err := m.Region.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field FileSize", wireType) - } - m.FileSize = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.FileSize |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftServerpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Data = append(m.Data, &KeyValue{}) - if err := m.Data[len(m.Data)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) - } - m.Version = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Version |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Meta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftServerpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Meta == nil { - m.Meta = &SnapshotMeta{} - } - if err := m.Meta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRaftServerpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRaftServerpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *StoreIdent) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: StoreIdent: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: StoreIdent: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType) - } - m.ClusterId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ClusterId |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StoreId", wireType) - } - m.StoreId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.StoreId |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipRaftServerpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRaftServerpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RaftLocalState) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RaftLocalState: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RaftLocalState: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HardState", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftServerpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.HardState == nil { - m.HardState = &eraftpb.HardState{} - } - if err := m.HardState.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field LastIndex", wireType) - } - m.LastIndex = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.LastIndex |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipRaftServerpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRaftServerpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RaftApplyState) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RaftApplyState: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RaftApplyState: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field AppliedIndex", wireType) - } - m.AppliedIndex = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.AppliedIndex |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TruncatedState", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftServerpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.TruncatedState == nil { - m.TruncatedState = &RaftTruncatedState{} - } - if err := m.TruncatedState.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRaftServerpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRaftServerpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MergeState) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MergeState: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MergeState: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MinIndex", wireType) - } - m.MinIndex = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.MinIndex |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Target", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftServerpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Target == nil { - m.Target = &metapb.Region{} - } - if err := m.Target.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Commit", wireType) - } - m.Commit = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Commit |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipRaftServerpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRaftServerpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RegionLocalState) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RegionLocalState: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RegionLocalState: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) - } - m.State = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.State |= (PeerState(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Region", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftServerpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Region == nil { - m.Region = &metapb.Region{} - } - if err := m.Region.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MergeState", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaftServerpb - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MergeState == nil { - m.MergeState = &MergeState{} - } - if err := m.MergeState.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRaftServerpb(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRaftServerpb - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipRaftServerpb(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - iNdEx += length - if length < 0 { - return 0, ErrInvalidLengthRaftServerpb - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRaftServerpb - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipRaftServerpb(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthRaftServerpb = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowRaftServerpb = fmt.Errorf("proto: integer overflow") -) - -func init() { proto.RegisterFile("raft_serverpb.proto", fileDescriptorRaftServerpb) } - -var fileDescriptorRaftServerpb = []byte{ - // 866 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x55, 0xdd, 0x6e, 0xe3, 0x44, - 0x14, 0x5e, 0x27, 0xae, 0x63, 0x9f, 0x38, 0x21, 0x9a, 0x45, 0xac, 0xb7, 0xd5, 0x56, 0x59, 0x23, - 0x56, 0xa1, 0x48, 0x41, 0x5b, 0x10, 0x42, 0x5c, 0x20, 0x2d, 0x2c, 0xd5, 0x96, 0xa5, 0xa8, 0x9a, - 0x56, 0x48, 0x5c, 0x59, 0x53, 0xfb, 0x38, 0xb1, 0xe2, 0x3f, 0xcd, 0x4c, 0x22, 0xc2, 0x1d, 0x6f, - 0xc1, 0x13, 0xf0, 0x2c, 0xdc, 0xc1, 0x23, 0xa0, 0x72, 0xcb, 0x43, 0xa0, 0x99, 0xb1, 0xf3, 0xa7, - 0xc2, 0x95, 0xe7, 0xfc, 0xcd, 0x39, 0xe7, 0x3b, 0xdf, 0x19, 0xc3, 0x63, 0xce, 0x52, 0x19, 0x09, - 0xe4, 0x2b, 0xe4, 0xf5, 0xdd, 0xb4, 0xe6, 0x95, 0xac, 0xc8, 0x60, 0x4f, 0x79, 0x3c, 0x40, 0x25, - 0xb7, 0xd6, 0x63, 0xbf, 0x40, 0xc9, 0x5a, 0x29, 0xfc, 0xa7, 0x03, 0x7d, 0xca, 0x52, 0x79, 0x85, - 0x42, 0xb0, 0x19, 0x92, 0x13, 0xf0, 0x38, 0xce, 0xb2, 0xaa, 0x8c, 0xb2, 0x24, 0xb0, 0xc6, 0xd6, - 0xc4, 0xa6, 0xae, 0x51, 0x5c, 0x26, 0xe4, 0x43, 0xf0, 0x52, 0x5e, 0x15, 0x51, 0x8d, 0xc8, 0x83, - 0xce, 0xd8, 0x9a, 0xf4, 0xcf, 0xfd, 0x69, 0x73, 0xdd, 0x35, 0x22, 0xa7, 0xae, 0x32, 0xab, 0x13, - 0xf9, 0x00, 0x7a, 0xb2, 0x32, 0x8e, 0xdd, 0x07, 0x1c, 0x1d, 0x59, 0x69, 0xb7, 0x33, 0xe8, 0x15, - 0x26, 0x73, 0x60, 0x6b, 0xb7, 0xd1, 0xb4, 0xad, 0xb6, 0xa9, 0x88, 0xb6, 0x0e, 0xe4, 0x33, 0xf0, - 0x9b, 0xd2, 0xb0, 0xae, 0xe2, 0x79, 0x70, 0xa4, 0x03, 0x1e, 0xb7, 0xf7, 0x52, 0x6d, 0xfb, 0x46, - 0x99, 0x68, 0x9f, 0x6f, 0x05, 0xf2, 0x1c, 0xfc, 0x4c, 0x44, 0xb2, 0x2a, 0xee, 0x84, 0xac, 0x4a, - 0x0c, 0x9c, 0xb1, 0x35, 0x71, 0x69, 0x3f, 0x13, 0xb7, 0xad, 0x4a, 0x75, 0x2d, 0x24, 0xe3, 0x32, - 0x5a, 0xe0, 0x3a, 0xe8, 0x8d, 0xad, 0x89, 0x4f, 0x5d, 0xad, 0x78, 0x8b, 0x6b, 0xf2, 0x04, 0x7a, - 0x58, 0x26, 0xda, 0xe4, 0x6a, 0x93, 0x83, 0x65, 0xa2, 0x0c, 0x2f, 0xc1, 0x2f, 0x90, 0xcf, 0x30, - 0x92, 0x8c, 0xcf, 0x50, 0x06, 0x9e, 0x2e, 0x68, 0xb8, 0x5f, 0x10, 0xed, 0x6b, 0x9f, 0x5b, 0xed, - 0x12, 0x7e, 0x09, 0x44, 0xa1, 0x7d, 0xcb, 0x97, 0x65, 0xcc, 0x24, 0x26, 0x37, 0x92, 0x49, 0x24, - 0xef, 0xc2, 0x51, 0x56, 0x26, 0xf8, 0x53, 0x03, 0xb8, 0x11, 0x08, 0x01, 0x5b, 0x22, 0x2f, 0x34, - 0xd0, 0x36, 0xd5, 0xe7, 0xf0, 0x1a, 0x86, 0x37, 0x25, 0xab, 0xc5, 0xbc, 0x92, 0x5f, 0x5f, 0x5c, - 0x64, 0x39, 0x92, 0x21, 0x74, 0xe2, 0x54, 0x07, 0x7a, 0xb4, 0x13, 0xa7, 0x2a, 0x4a, 0x64, 0x3f, - 0x63, 0x1b, 0xa5, 0xce, 0xe4, 0x18, 0xdc, 0x78, 0x8e, 0xf1, 0x42, 0x2c, 0x0b, 0x3d, 0x8d, 0x01, - 0xdd, 0xc8, 0xe1, 0x1b, 0xf0, 0xdb, 0x1b, 0xaf, 0x50, 0x32, 0xf2, 0x39, 0xb8, 0x71, 0x1a, 0xa5, - 0x59, 0x8e, 0x22, 0xb0, 0xc6, 0xdd, 0x49, 0xff, 0xfc, 0xd9, 0x74, 0x9f, 0x64, 0xfb, 0x05, 0xd0, - 0x5e, 0x9c, 0xaa, 0xaf, 0x08, 0x7f, 0x84, 0xc1, 0xc6, 0x34, 0x5f, 0x96, 0x0b, 0xf2, 0xe9, 0x76, - 0xb8, 0x96, 0x86, 0xe6, 0xf8, 0xe0, 0xa6, 0x1d, 0xe2, 0x6d, 0xc7, 0x4c, 0xc0, 0x4e, 0x98, 0x64, - 0xba, 0x01, 0x9f, 0xea, 0x73, 0xe8, 0x80, 0xfd, 0xba, 0x2a, 0x31, 0x3c, 0x07, 0xf7, 0x2d, 0xae, - 0x7f, 0x60, 0xf9, 0x12, 0xc9, 0x08, 0xba, 0x6a, 0x24, 0x96, 0x76, 0x53, 0x47, 0x05, 0xe3, 0x4a, - 0x99, 0x9a, 0x50, 0x23, 0x84, 0x7f, 0x58, 0x30, 0x52, 0x89, 0xda, 0xda, 0x5e, 0x33, 0xc9, 0xc8, - 0x0b, 0x70, 0x0c, 0x45, 0x9a, 0xca, 0x0e, 0x87, 0xd6, 0x58, 0x15, 0x31, 0x14, 0x14, 0xd1, 0x0e, - 0xa4, 0xae, 0x52, 0xdc, 0x28, 0x58, 0x3f, 0x6a, 0x2a, 0xed, 0x6a, 0x98, 0x9e, 0x1c, 0x34, 0xd7, - 0x16, 0x6a, 0x5a, 0x20, 0x01, 0xf4, 0x56, 0xc8, 0x85, 0x4a, 0x69, 0xeb, 0x7b, 0x5a, 0x91, 0x7c, - 0x0c, 0xb6, 0x4a, 0xde, 0xf0, 0xf9, 0xe4, 0x3f, 0xd0, 0x56, 0xc3, 0xa1, 0xda, 0x31, 0xbc, 0x00, - 0xb8, 0x91, 0x15, 0xc7, 0xcb, 0x04, 0x4b, 0x49, 0x9e, 0x01, 0xc4, 0xf9, 0x52, 0x48, 0xe4, 0xdb, - 0x95, 0xf5, 0x1a, 0xcd, 0x65, 0x42, 0x9e, 0x82, 0x2b, 0x94, 0xb3, 0x32, 0x9a, 0x06, 0x7a, 0xc2, - 0x04, 0x87, 0x77, 0x30, 0x54, 0xc0, 0x7c, 0x57, 0xc5, 0x2c, 0x37, 0x44, 0x7c, 0x09, 0x30, 0x67, - 0x3c, 0x89, 0x84, 0x92, 0x1a, 0x68, 0xc8, 0x66, 0x23, 0xdf, 0x30, 0x6e, 0x08, 0x4b, 0xbd, 0x79, - 0x7b, 0x54, 0xe9, 0x73, 0x26, 0x64, 0x64, 0x08, 0x6c, 0x32, 0x78, 0x4a, 0x73, 0xa9, 0x14, 0xe1, - 0x2f, 0x96, 0x49, 0xf2, 0xaa, 0xae, 0xf3, 0xb5, 0x89, 0x78, 0x1f, 0x06, 0xac, 0xae, 0xf3, 0x0c, - 0x93, 0x68, 0x97, 0xf5, 0x7e, 0xa3, 0xd4, 0x71, 0xe4, 0x5b, 0x78, 0x47, 0xb6, 0x4b, 0xd2, 0x94, - 0x63, 0x1e, 0x9c, 0xe7, 0x0f, 0x70, 0x68, 0x7f, 0x9d, 0xe8, 0x50, 0xee, 0xc9, 0x61, 0x06, 0x70, - 0xa5, 0x76, 0xd0, 0xa4, 0x3f, 0x01, 0xaf, 0xc8, 0xca, 0xbd, 0xd4, 0x6e, 0x91, 0x95, 0x26, 0xed, - 0x0b, 0x70, 0x9a, 0x65, 0xee, 0x3c, 0xcc, 0x0b, 0x63, 0x25, 0xef, 0x81, 0x13, 0x57, 0x45, 0x91, - 0x49, 0xbd, 0x4f, 0x36, 0x6d, 0xa4, 0xf0, 0x37, 0x45, 0x36, 0xed, 0xba, 0x83, 0xea, 0x14, 0x8e, - 0xb6, 0x80, 0x0e, 0xcf, 0x83, 0x83, 0x0e, 0xd4, 0x43, 0x68, 0x0a, 0x37, 0x6e, 0x3b, 0xe4, 0xec, - 0xfc, 0x2f, 0x39, 0xbf, 0x00, 0xf3, 0xb6, 0x34, 0xf8, 0x98, 0x77, 0xf6, 0xe9, 0xc1, 0xed, 0xdb, - 0xce, 0x29, 0x14, 0x9b, 0xf3, 0xd9, 0x2b, 0xf0, 0x36, 0x79, 0x09, 0x80, 0xf3, 0x7d, 0xc5, 0x0b, - 0x96, 0x8f, 0x1e, 0x11, 0x1f, 0x5c, 0x3d, 0xab, 0xac, 0x9c, 0x8d, 0x2c, 0x32, 0x00, 0x6f, 0xf3, - 0x4a, 0x8e, 0x3a, 0xa4, 0x0f, 0x3d, 0x75, 0x9f, 0xb2, 0x75, 0xbf, 0x3a, 0xfb, 0xfd, 0xfe, 0xd4, - 0xfa, 0xf3, 0xfe, 0xd4, 0xfa, 0xeb, 0xfe, 0xd4, 0xfa, 0xf5, 0xef, 0xd3, 0x47, 0x10, 0xc4, 0x55, - 0x31, 0xad, 0xb3, 0x72, 0x16, 0xb3, 0x7a, 0x2a, 0xb3, 0xc5, 0x6a, 0xba, 0x58, 0xe9, 0xdf, 0xcc, - 0x9d, 0xa3, 0x3f, 0x9f, 0xfc, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x6d, 0xac, 0x3c, 0x58, 0xb0, 0x06, - 0x00, 0x00, -} diff --git a/vendor/github.com/pingcap/kvproto/pkg/tikvpb/tikvpb.pb.go b/vendor/github.com/pingcap/kvproto/pkg/tikvpb/tikvpb.pb.go deleted file mode 100644 index 05dd50e..0000000 --- a/vendor/github.com/pingcap/kvproto/pkg/tikvpb/tikvpb.pb.go +++ /dev/null @@ -1,1161 +0,0 @@ -// Code generated by protoc-gen-gogo. -// source: tikvpb.proto -// DO NOT EDIT! - -/* - Package tikvpb is a generated protocol buffer package. - - It is generated from these files: - tikvpb.proto - - It has these top-level messages: -*/ -package tikvpb - -import ( - "fmt" - "math" - - proto "github.com/golang/protobuf/proto" - - coprocessor "github.com/pingcap/kvproto/pkg/coprocessor" - - kvrpcpb "github.com/pingcap/kvproto/pkg/kvrpcpb" - - raft_serverpb "github.com/pingcap/kvproto/pkg/raft_serverpb" - - context "golang.org/x/net/context" - - grpc "google.golang.org/grpc" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// Client API for Tikv service - -type TikvClient interface { - // KV commands with mvcc/txn supported. - KvGet(ctx context.Context, in *kvrpcpb.GetRequest, opts ...grpc.CallOption) (*kvrpcpb.GetResponse, error) - KvScan(ctx context.Context, in *kvrpcpb.ScanRequest, opts ...grpc.CallOption) (*kvrpcpb.ScanResponse, error) - KvPrewrite(ctx context.Context, in *kvrpcpb.PrewriteRequest, opts ...grpc.CallOption) (*kvrpcpb.PrewriteResponse, error) - KvCommit(ctx context.Context, in *kvrpcpb.CommitRequest, opts ...grpc.CallOption) (*kvrpcpb.CommitResponse, error) - KvImport(ctx context.Context, in *kvrpcpb.ImportRequest, opts ...grpc.CallOption) (*kvrpcpb.ImportResponse, error) - KvCleanup(ctx context.Context, in *kvrpcpb.CleanupRequest, opts ...grpc.CallOption) (*kvrpcpb.CleanupResponse, error) - KvBatchGet(ctx context.Context, in *kvrpcpb.BatchGetRequest, opts ...grpc.CallOption) (*kvrpcpb.BatchGetResponse, error) - KvBatchRollback(ctx context.Context, in *kvrpcpb.BatchRollbackRequest, opts ...grpc.CallOption) (*kvrpcpb.BatchRollbackResponse, error) - KvScanLock(ctx context.Context, in *kvrpcpb.ScanLockRequest, opts ...grpc.CallOption) (*kvrpcpb.ScanLockResponse, error) - KvResolveLock(ctx context.Context, in *kvrpcpb.ResolveLockRequest, opts ...grpc.CallOption) (*kvrpcpb.ResolveLockResponse, error) - KvGC(ctx context.Context, in *kvrpcpb.GCRequest, opts ...grpc.CallOption) (*kvrpcpb.GCResponse, error) - KvDeleteRange(ctx context.Context, in *kvrpcpb.DeleteRangeRequest, opts ...grpc.CallOption) (*kvrpcpb.DeleteRangeResponse, error) - // RawKV commands. - RawGet(ctx context.Context, in *kvrpcpb.RawGetRequest, opts ...grpc.CallOption) (*kvrpcpb.RawGetResponse, error) - RawBatchGet(ctx context.Context, in *kvrpcpb.RawBatchGetRequest, opts ...grpc.CallOption) (*kvrpcpb.RawBatchGetResponse, error) - RawPut(ctx context.Context, in *kvrpcpb.RawPutRequest, opts ...grpc.CallOption) (*kvrpcpb.RawPutResponse, error) - RawBatchPut(ctx context.Context, in *kvrpcpb.RawBatchPutRequest, opts ...grpc.CallOption) (*kvrpcpb.RawBatchPutResponse, error) - RawDelete(ctx context.Context, in *kvrpcpb.RawDeleteRequest, opts ...grpc.CallOption) (*kvrpcpb.RawDeleteResponse, error) - RawBatchDelete(ctx context.Context, in *kvrpcpb.RawBatchDeleteRequest, opts ...grpc.CallOption) (*kvrpcpb.RawBatchDeleteResponse, error) - RawScan(ctx context.Context, in *kvrpcpb.RawScanRequest, opts ...grpc.CallOption) (*kvrpcpb.RawScanResponse, error) - RawDeleteRange(ctx context.Context, in *kvrpcpb.RawDeleteRangeRequest, opts ...grpc.CallOption) (*kvrpcpb.RawDeleteRangeResponse, error) - RawBatchScan(ctx context.Context, in *kvrpcpb.RawBatchScanRequest, opts ...grpc.CallOption) (*kvrpcpb.RawBatchScanResponse, error) - // SQL push down commands. - Coprocessor(ctx context.Context, in *coprocessor.Request, opts ...grpc.CallOption) (*coprocessor.Response, error) - CoprocessorStream(ctx context.Context, in *coprocessor.Request, opts ...grpc.CallOption) (Tikv_CoprocessorStreamClient, error) - // Raft commands (tikv <-> tikv). - Raft(ctx context.Context, opts ...grpc.CallOption) (Tikv_RaftClient, error) - Snapshot(ctx context.Context, opts ...grpc.CallOption) (Tikv_SnapshotClient, error) - // Region commands. - SplitRegion(ctx context.Context, in *kvrpcpb.SplitRegionRequest, opts ...grpc.CallOption) (*kvrpcpb.SplitRegionResponse, error) - // transaction debugger commands. - MvccGetByKey(ctx context.Context, in *kvrpcpb.MvccGetByKeyRequest, opts ...grpc.CallOption) (*kvrpcpb.MvccGetByKeyResponse, error) - MvccGetByStartTs(ctx context.Context, in *kvrpcpb.MvccGetByStartTsRequest, opts ...grpc.CallOption) (*kvrpcpb.MvccGetByStartTsResponse, error) -} - -type tikvClient struct { - cc *grpc.ClientConn -} - -func NewTikvClient(cc *grpc.ClientConn) TikvClient { - return &tikvClient{cc} -} - -func (c *tikvClient) KvGet(ctx context.Context, in *kvrpcpb.GetRequest, opts ...grpc.CallOption) (*kvrpcpb.GetResponse, error) { - out := new(kvrpcpb.GetResponse) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/KvGet", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *tikvClient) KvScan(ctx context.Context, in *kvrpcpb.ScanRequest, opts ...grpc.CallOption) (*kvrpcpb.ScanResponse, error) { - out := new(kvrpcpb.ScanResponse) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/KvScan", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *tikvClient) KvPrewrite(ctx context.Context, in *kvrpcpb.PrewriteRequest, opts ...grpc.CallOption) (*kvrpcpb.PrewriteResponse, error) { - out := new(kvrpcpb.PrewriteResponse) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/KvPrewrite", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *tikvClient) KvCommit(ctx context.Context, in *kvrpcpb.CommitRequest, opts ...grpc.CallOption) (*kvrpcpb.CommitResponse, error) { - out := new(kvrpcpb.CommitResponse) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/KvCommit", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *tikvClient) KvImport(ctx context.Context, in *kvrpcpb.ImportRequest, opts ...grpc.CallOption) (*kvrpcpb.ImportResponse, error) { - out := new(kvrpcpb.ImportResponse) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/KvImport", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *tikvClient) KvCleanup(ctx context.Context, in *kvrpcpb.CleanupRequest, opts ...grpc.CallOption) (*kvrpcpb.CleanupResponse, error) { - out := new(kvrpcpb.CleanupResponse) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/KvCleanup", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *tikvClient) KvBatchGet(ctx context.Context, in *kvrpcpb.BatchGetRequest, opts ...grpc.CallOption) (*kvrpcpb.BatchGetResponse, error) { - out := new(kvrpcpb.BatchGetResponse) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/KvBatchGet", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *tikvClient) KvBatchRollback(ctx context.Context, in *kvrpcpb.BatchRollbackRequest, opts ...grpc.CallOption) (*kvrpcpb.BatchRollbackResponse, error) { - out := new(kvrpcpb.BatchRollbackResponse) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/KvBatchRollback", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *tikvClient) KvScanLock(ctx context.Context, in *kvrpcpb.ScanLockRequest, opts ...grpc.CallOption) (*kvrpcpb.ScanLockResponse, error) { - out := new(kvrpcpb.ScanLockResponse) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/KvScanLock", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *tikvClient) KvResolveLock(ctx context.Context, in *kvrpcpb.ResolveLockRequest, opts ...grpc.CallOption) (*kvrpcpb.ResolveLockResponse, error) { - out := new(kvrpcpb.ResolveLockResponse) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/KvResolveLock", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *tikvClient) KvGC(ctx context.Context, in *kvrpcpb.GCRequest, opts ...grpc.CallOption) (*kvrpcpb.GCResponse, error) { - out := new(kvrpcpb.GCResponse) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/KvGC", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *tikvClient) KvDeleteRange(ctx context.Context, in *kvrpcpb.DeleteRangeRequest, opts ...grpc.CallOption) (*kvrpcpb.DeleteRangeResponse, error) { - out := new(kvrpcpb.DeleteRangeResponse) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/KvDeleteRange", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *tikvClient) RawGet(ctx context.Context, in *kvrpcpb.RawGetRequest, opts ...grpc.CallOption) (*kvrpcpb.RawGetResponse, error) { - out := new(kvrpcpb.RawGetResponse) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/RawGet", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *tikvClient) RawBatchGet(ctx context.Context, in *kvrpcpb.RawBatchGetRequest, opts ...grpc.CallOption) (*kvrpcpb.RawBatchGetResponse, error) { - out := new(kvrpcpb.RawBatchGetResponse) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/RawBatchGet", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *tikvClient) RawPut(ctx context.Context, in *kvrpcpb.RawPutRequest, opts ...grpc.CallOption) (*kvrpcpb.RawPutResponse, error) { - out := new(kvrpcpb.RawPutResponse) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/RawPut", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *tikvClient) RawBatchPut(ctx context.Context, in *kvrpcpb.RawBatchPutRequest, opts ...grpc.CallOption) (*kvrpcpb.RawBatchPutResponse, error) { - out := new(kvrpcpb.RawBatchPutResponse) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/RawBatchPut", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *tikvClient) RawDelete(ctx context.Context, in *kvrpcpb.RawDeleteRequest, opts ...grpc.CallOption) (*kvrpcpb.RawDeleteResponse, error) { - out := new(kvrpcpb.RawDeleteResponse) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/RawDelete", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *tikvClient) RawBatchDelete(ctx context.Context, in *kvrpcpb.RawBatchDeleteRequest, opts ...grpc.CallOption) (*kvrpcpb.RawBatchDeleteResponse, error) { - out := new(kvrpcpb.RawBatchDeleteResponse) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/RawBatchDelete", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *tikvClient) RawScan(ctx context.Context, in *kvrpcpb.RawScanRequest, opts ...grpc.CallOption) (*kvrpcpb.RawScanResponse, error) { - out := new(kvrpcpb.RawScanResponse) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/RawScan", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *tikvClient) RawDeleteRange(ctx context.Context, in *kvrpcpb.RawDeleteRangeRequest, opts ...grpc.CallOption) (*kvrpcpb.RawDeleteRangeResponse, error) { - out := new(kvrpcpb.RawDeleteRangeResponse) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/RawDeleteRange", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *tikvClient) RawBatchScan(ctx context.Context, in *kvrpcpb.RawBatchScanRequest, opts ...grpc.CallOption) (*kvrpcpb.RawBatchScanResponse, error) { - out := new(kvrpcpb.RawBatchScanResponse) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/RawBatchScan", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *tikvClient) Coprocessor(ctx context.Context, in *coprocessor.Request, opts ...grpc.CallOption) (*coprocessor.Response, error) { - out := new(coprocessor.Response) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/Coprocessor", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *tikvClient) CoprocessorStream(ctx context.Context, in *coprocessor.Request, opts ...grpc.CallOption) (Tikv_CoprocessorStreamClient, error) { - stream, err := grpc.NewClientStream(ctx, &_Tikv_serviceDesc.Streams[0], c.cc, "/tikvpb.Tikv/CoprocessorStream", opts...) - if err != nil { - return nil, err - } - x := &tikvCoprocessorStreamClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type Tikv_CoprocessorStreamClient interface { - Recv() (*coprocessor.Response, error) - grpc.ClientStream -} - -type tikvCoprocessorStreamClient struct { - grpc.ClientStream -} - -func (x *tikvCoprocessorStreamClient) Recv() (*coprocessor.Response, error) { - m := new(coprocessor.Response) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *tikvClient) Raft(ctx context.Context, opts ...grpc.CallOption) (Tikv_RaftClient, error) { - stream, err := grpc.NewClientStream(ctx, &_Tikv_serviceDesc.Streams[1], c.cc, "/tikvpb.Tikv/Raft", opts...) - if err != nil { - return nil, err - } - x := &tikvRaftClient{stream} - return x, nil -} - -type Tikv_RaftClient interface { - Send(*raft_serverpb.RaftMessage) error - CloseAndRecv() (*raft_serverpb.Done, error) - grpc.ClientStream -} - -type tikvRaftClient struct { - grpc.ClientStream -} - -func (x *tikvRaftClient) Send(m *raft_serverpb.RaftMessage) error { - return x.ClientStream.SendMsg(m) -} - -func (x *tikvRaftClient) CloseAndRecv() (*raft_serverpb.Done, error) { - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - m := new(raft_serverpb.Done) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *tikvClient) Snapshot(ctx context.Context, opts ...grpc.CallOption) (Tikv_SnapshotClient, error) { - stream, err := grpc.NewClientStream(ctx, &_Tikv_serviceDesc.Streams[2], c.cc, "/tikvpb.Tikv/Snapshot", opts...) - if err != nil { - return nil, err - } - x := &tikvSnapshotClient{stream} - return x, nil -} - -type Tikv_SnapshotClient interface { - Send(*raft_serverpb.SnapshotChunk) error - CloseAndRecv() (*raft_serverpb.Done, error) - grpc.ClientStream -} - -type tikvSnapshotClient struct { - grpc.ClientStream -} - -func (x *tikvSnapshotClient) Send(m *raft_serverpb.SnapshotChunk) error { - return x.ClientStream.SendMsg(m) -} - -func (x *tikvSnapshotClient) CloseAndRecv() (*raft_serverpb.Done, error) { - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - m := new(raft_serverpb.Done) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *tikvClient) SplitRegion(ctx context.Context, in *kvrpcpb.SplitRegionRequest, opts ...grpc.CallOption) (*kvrpcpb.SplitRegionResponse, error) { - out := new(kvrpcpb.SplitRegionResponse) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/SplitRegion", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *tikvClient) MvccGetByKey(ctx context.Context, in *kvrpcpb.MvccGetByKeyRequest, opts ...grpc.CallOption) (*kvrpcpb.MvccGetByKeyResponse, error) { - out := new(kvrpcpb.MvccGetByKeyResponse) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/MvccGetByKey", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *tikvClient) MvccGetByStartTs(ctx context.Context, in *kvrpcpb.MvccGetByStartTsRequest, opts ...grpc.CallOption) (*kvrpcpb.MvccGetByStartTsResponse, error) { - out := new(kvrpcpb.MvccGetByStartTsResponse) - err := grpc.Invoke(ctx, "/tikvpb.Tikv/MvccGetByStartTs", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Server API for Tikv service - -type TikvServer interface { - // KV commands with mvcc/txn supported. - KvGet(context.Context, *kvrpcpb.GetRequest) (*kvrpcpb.GetResponse, error) - KvScan(context.Context, *kvrpcpb.ScanRequest) (*kvrpcpb.ScanResponse, error) - KvPrewrite(context.Context, *kvrpcpb.PrewriteRequest) (*kvrpcpb.PrewriteResponse, error) - KvCommit(context.Context, *kvrpcpb.CommitRequest) (*kvrpcpb.CommitResponse, error) - KvImport(context.Context, *kvrpcpb.ImportRequest) (*kvrpcpb.ImportResponse, error) - KvCleanup(context.Context, *kvrpcpb.CleanupRequest) (*kvrpcpb.CleanupResponse, error) - KvBatchGet(context.Context, *kvrpcpb.BatchGetRequest) (*kvrpcpb.BatchGetResponse, error) - KvBatchRollback(context.Context, *kvrpcpb.BatchRollbackRequest) (*kvrpcpb.BatchRollbackResponse, error) - KvScanLock(context.Context, *kvrpcpb.ScanLockRequest) (*kvrpcpb.ScanLockResponse, error) - KvResolveLock(context.Context, *kvrpcpb.ResolveLockRequest) (*kvrpcpb.ResolveLockResponse, error) - KvGC(context.Context, *kvrpcpb.GCRequest) (*kvrpcpb.GCResponse, error) - KvDeleteRange(context.Context, *kvrpcpb.DeleteRangeRequest) (*kvrpcpb.DeleteRangeResponse, error) - // RawKV commands. - RawGet(context.Context, *kvrpcpb.RawGetRequest) (*kvrpcpb.RawGetResponse, error) - RawBatchGet(context.Context, *kvrpcpb.RawBatchGetRequest) (*kvrpcpb.RawBatchGetResponse, error) - RawPut(context.Context, *kvrpcpb.RawPutRequest) (*kvrpcpb.RawPutResponse, error) - RawBatchPut(context.Context, *kvrpcpb.RawBatchPutRequest) (*kvrpcpb.RawBatchPutResponse, error) - RawDelete(context.Context, *kvrpcpb.RawDeleteRequest) (*kvrpcpb.RawDeleteResponse, error) - RawBatchDelete(context.Context, *kvrpcpb.RawBatchDeleteRequest) (*kvrpcpb.RawBatchDeleteResponse, error) - RawScan(context.Context, *kvrpcpb.RawScanRequest) (*kvrpcpb.RawScanResponse, error) - RawDeleteRange(context.Context, *kvrpcpb.RawDeleteRangeRequest) (*kvrpcpb.RawDeleteRangeResponse, error) - RawBatchScan(context.Context, *kvrpcpb.RawBatchScanRequest) (*kvrpcpb.RawBatchScanResponse, error) - // SQL push down commands. - Coprocessor(context.Context, *coprocessor.Request) (*coprocessor.Response, error) - CoprocessorStream(*coprocessor.Request, Tikv_CoprocessorStreamServer) error - // Raft commands (tikv <-> tikv). - Raft(Tikv_RaftServer) error - Snapshot(Tikv_SnapshotServer) error - // Region commands. - SplitRegion(context.Context, *kvrpcpb.SplitRegionRequest) (*kvrpcpb.SplitRegionResponse, error) - // transaction debugger commands. - MvccGetByKey(context.Context, *kvrpcpb.MvccGetByKeyRequest) (*kvrpcpb.MvccGetByKeyResponse, error) - MvccGetByStartTs(context.Context, *kvrpcpb.MvccGetByStartTsRequest) (*kvrpcpb.MvccGetByStartTsResponse, error) -} - -func RegisterTikvServer(s *grpc.Server, srv TikvServer) { - s.RegisterService(&_Tikv_serviceDesc, srv) -} - -func _Tikv_KvGet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(kvrpcpb.GetRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).KvGet(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/KvGet", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).KvGet(ctx, req.(*kvrpcpb.GetRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Tikv_KvScan_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(kvrpcpb.ScanRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).KvScan(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/KvScan", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).KvScan(ctx, req.(*kvrpcpb.ScanRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Tikv_KvPrewrite_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(kvrpcpb.PrewriteRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).KvPrewrite(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/KvPrewrite", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).KvPrewrite(ctx, req.(*kvrpcpb.PrewriteRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Tikv_KvCommit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(kvrpcpb.CommitRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).KvCommit(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/KvCommit", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).KvCommit(ctx, req.(*kvrpcpb.CommitRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Tikv_KvImport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(kvrpcpb.ImportRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).KvImport(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/KvImport", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).KvImport(ctx, req.(*kvrpcpb.ImportRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Tikv_KvCleanup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(kvrpcpb.CleanupRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).KvCleanup(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/KvCleanup", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).KvCleanup(ctx, req.(*kvrpcpb.CleanupRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Tikv_KvBatchGet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(kvrpcpb.BatchGetRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).KvBatchGet(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/KvBatchGet", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).KvBatchGet(ctx, req.(*kvrpcpb.BatchGetRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Tikv_KvBatchRollback_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(kvrpcpb.BatchRollbackRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).KvBatchRollback(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/KvBatchRollback", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).KvBatchRollback(ctx, req.(*kvrpcpb.BatchRollbackRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Tikv_KvScanLock_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(kvrpcpb.ScanLockRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).KvScanLock(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/KvScanLock", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).KvScanLock(ctx, req.(*kvrpcpb.ScanLockRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Tikv_KvResolveLock_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(kvrpcpb.ResolveLockRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).KvResolveLock(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/KvResolveLock", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).KvResolveLock(ctx, req.(*kvrpcpb.ResolveLockRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Tikv_KvGC_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(kvrpcpb.GCRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).KvGC(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/KvGC", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).KvGC(ctx, req.(*kvrpcpb.GCRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Tikv_KvDeleteRange_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(kvrpcpb.DeleteRangeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).KvDeleteRange(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/KvDeleteRange", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).KvDeleteRange(ctx, req.(*kvrpcpb.DeleteRangeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Tikv_RawGet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(kvrpcpb.RawGetRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).RawGet(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/RawGet", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).RawGet(ctx, req.(*kvrpcpb.RawGetRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Tikv_RawBatchGet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(kvrpcpb.RawBatchGetRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).RawBatchGet(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/RawBatchGet", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).RawBatchGet(ctx, req.(*kvrpcpb.RawBatchGetRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Tikv_RawPut_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(kvrpcpb.RawPutRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).RawPut(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/RawPut", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).RawPut(ctx, req.(*kvrpcpb.RawPutRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Tikv_RawBatchPut_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(kvrpcpb.RawBatchPutRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).RawBatchPut(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/RawBatchPut", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).RawBatchPut(ctx, req.(*kvrpcpb.RawBatchPutRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Tikv_RawDelete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(kvrpcpb.RawDeleteRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).RawDelete(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/RawDelete", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).RawDelete(ctx, req.(*kvrpcpb.RawDeleteRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Tikv_RawBatchDelete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(kvrpcpb.RawBatchDeleteRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).RawBatchDelete(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/RawBatchDelete", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).RawBatchDelete(ctx, req.(*kvrpcpb.RawBatchDeleteRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Tikv_RawScan_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(kvrpcpb.RawScanRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).RawScan(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/RawScan", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).RawScan(ctx, req.(*kvrpcpb.RawScanRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Tikv_RawDeleteRange_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(kvrpcpb.RawDeleteRangeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).RawDeleteRange(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/RawDeleteRange", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).RawDeleteRange(ctx, req.(*kvrpcpb.RawDeleteRangeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Tikv_RawBatchScan_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(kvrpcpb.RawBatchScanRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).RawBatchScan(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/RawBatchScan", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).RawBatchScan(ctx, req.(*kvrpcpb.RawBatchScanRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Tikv_Coprocessor_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(coprocessor.Request) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).Coprocessor(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/Coprocessor", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).Coprocessor(ctx, req.(*coprocessor.Request)) - } - return interceptor(ctx, in, info, handler) -} - -func _Tikv_CoprocessorStream_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(coprocessor.Request) - if err := stream.RecvMsg(m); err != nil { - return err - } - return srv.(TikvServer).CoprocessorStream(m, &tikvCoprocessorStreamServer{stream}) -} - -type Tikv_CoprocessorStreamServer interface { - Send(*coprocessor.Response) error - grpc.ServerStream -} - -type tikvCoprocessorStreamServer struct { - grpc.ServerStream -} - -func (x *tikvCoprocessorStreamServer) Send(m *coprocessor.Response) error { - return x.ServerStream.SendMsg(m) -} - -func _Tikv_Raft_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(TikvServer).Raft(&tikvRaftServer{stream}) -} - -type Tikv_RaftServer interface { - SendAndClose(*raft_serverpb.Done) error - Recv() (*raft_serverpb.RaftMessage, error) - grpc.ServerStream -} - -type tikvRaftServer struct { - grpc.ServerStream -} - -func (x *tikvRaftServer) SendAndClose(m *raft_serverpb.Done) error { - return x.ServerStream.SendMsg(m) -} - -func (x *tikvRaftServer) Recv() (*raft_serverpb.RaftMessage, error) { - m := new(raft_serverpb.RaftMessage) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func _Tikv_Snapshot_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(TikvServer).Snapshot(&tikvSnapshotServer{stream}) -} - -type Tikv_SnapshotServer interface { - SendAndClose(*raft_serverpb.Done) error - Recv() (*raft_serverpb.SnapshotChunk, error) - grpc.ServerStream -} - -type tikvSnapshotServer struct { - grpc.ServerStream -} - -func (x *tikvSnapshotServer) SendAndClose(m *raft_serverpb.Done) error { - return x.ServerStream.SendMsg(m) -} - -func (x *tikvSnapshotServer) Recv() (*raft_serverpb.SnapshotChunk, error) { - m := new(raft_serverpb.SnapshotChunk) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func _Tikv_SplitRegion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(kvrpcpb.SplitRegionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).SplitRegion(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/SplitRegion", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).SplitRegion(ctx, req.(*kvrpcpb.SplitRegionRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Tikv_MvccGetByKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(kvrpcpb.MvccGetByKeyRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).MvccGetByKey(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/MvccGetByKey", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).MvccGetByKey(ctx, req.(*kvrpcpb.MvccGetByKeyRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Tikv_MvccGetByStartTs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(kvrpcpb.MvccGetByStartTsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TikvServer).MvccGetByStartTs(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/tikvpb.Tikv/MvccGetByStartTs", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TikvServer).MvccGetByStartTs(ctx, req.(*kvrpcpb.MvccGetByStartTsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _Tikv_serviceDesc = grpc.ServiceDesc{ - ServiceName: "tikvpb.Tikv", - HandlerType: (*TikvServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "KvGet", - Handler: _Tikv_KvGet_Handler, - }, - { - MethodName: "KvScan", - Handler: _Tikv_KvScan_Handler, - }, - { - MethodName: "KvPrewrite", - Handler: _Tikv_KvPrewrite_Handler, - }, - { - MethodName: "KvCommit", - Handler: _Tikv_KvCommit_Handler, - }, - { - MethodName: "KvImport", - Handler: _Tikv_KvImport_Handler, - }, - { - MethodName: "KvCleanup", - Handler: _Tikv_KvCleanup_Handler, - }, - { - MethodName: "KvBatchGet", - Handler: _Tikv_KvBatchGet_Handler, - }, - { - MethodName: "KvBatchRollback", - Handler: _Tikv_KvBatchRollback_Handler, - }, - { - MethodName: "KvScanLock", - Handler: _Tikv_KvScanLock_Handler, - }, - { - MethodName: "KvResolveLock", - Handler: _Tikv_KvResolveLock_Handler, - }, - { - MethodName: "KvGC", - Handler: _Tikv_KvGC_Handler, - }, - { - MethodName: "KvDeleteRange", - Handler: _Tikv_KvDeleteRange_Handler, - }, - { - MethodName: "RawGet", - Handler: _Tikv_RawGet_Handler, - }, - { - MethodName: "RawBatchGet", - Handler: _Tikv_RawBatchGet_Handler, - }, - { - MethodName: "RawPut", - Handler: _Tikv_RawPut_Handler, - }, - { - MethodName: "RawBatchPut", - Handler: _Tikv_RawBatchPut_Handler, - }, - { - MethodName: "RawDelete", - Handler: _Tikv_RawDelete_Handler, - }, - { - MethodName: "RawBatchDelete", - Handler: _Tikv_RawBatchDelete_Handler, - }, - { - MethodName: "RawScan", - Handler: _Tikv_RawScan_Handler, - }, - { - MethodName: "RawDeleteRange", - Handler: _Tikv_RawDeleteRange_Handler, - }, - { - MethodName: "RawBatchScan", - Handler: _Tikv_RawBatchScan_Handler, - }, - { - MethodName: "Coprocessor", - Handler: _Tikv_Coprocessor_Handler, - }, - { - MethodName: "SplitRegion", - Handler: _Tikv_SplitRegion_Handler, - }, - { - MethodName: "MvccGetByKey", - Handler: _Tikv_MvccGetByKey_Handler, - }, - { - MethodName: "MvccGetByStartTs", - Handler: _Tikv_MvccGetByStartTs_Handler, - }, - }, - Streams: []grpc.StreamDesc{ - { - StreamName: "CoprocessorStream", - Handler: _Tikv_CoprocessorStream_Handler, - ServerStreams: true, - }, - { - StreamName: "Raft", - Handler: _Tikv_Raft_Handler, - ClientStreams: true, - }, - { - StreamName: "Snapshot", - Handler: _Tikv_Snapshot_Handler, - ClientStreams: true, - }, - }, - Metadata: "tikvpb.proto", -} - -func init() { proto.RegisterFile("tikvpb.proto", fileDescriptorTikvpb) } - -var fileDescriptorTikvpb = []byte{ - // 682 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x96, 0xdf, 0x4e, 0xd4, 0x40, - 0x14, 0xc6, 0xd9, 0x04, 0x57, 0x18, 0x40, 0x64, 0x16, 0x75, 0x29, 0x4b, 0x51, 0xae, 0x8c, 0x17, - 0xf5, 0x6f, 0xe2, 0x05, 0x6a, 0x94, 0x92, 0x6c, 0xa4, 0x90, 0x90, 0x96, 0x1b, 0xaf, 0xcc, 0xd0, - 0x0c, 0xa5, 0x69, 0xb7, 0x53, 0xa7, 0xb3, 0xb3, 0xe1, 0x4d, 0x7c, 0x0e, 0x9f, 0xc2, 0x4b, 0x1f, - 0xc1, 0xe0, 0x8b, 0x98, 0xb6, 0x3b, 0xd3, 0x99, 0x4e, 0xd7, 0xc4, 0x2b, 0xda, 0xef, 0x3b, 0xe7, - 0xd7, 0x8f, 0x39, 0x93, 0x99, 0x05, 0xeb, 0x2c, 0x4e, 0x78, 0x7e, 0xe9, 0xe4, 0x94, 0x30, 0x02, - 0xfb, 0xf5, 0x9b, 0xb5, 0x15, 0x92, 0x9c, 0x92, 0x10, 0x17, 0x05, 0xa1, 0xb5, 0x65, 0x6d, 0x24, - 0x9c, 0xe6, 0xa1, 0xa8, 0xb4, 0x06, 0x14, 0x5d, 0xb1, 0xaf, 0x05, 0xa6, 0x1c, 0x53, 0x29, 0x6e, - 0x47, 0x24, 0x22, 0xd5, 0xe3, 0xf3, 0xf2, 0xa9, 0x56, 0x5f, 0xfd, 0xd8, 0x04, 0xcb, 0x17, 0x71, - 0xc2, 0xe1, 0x1b, 0x70, 0xc7, 0xe3, 0x63, 0xcc, 0xe0, 0xc0, 0x11, 0xb0, 0x31, 0x66, 0x3e, 0xfe, - 0x36, 0xc5, 0x05, 0xb3, 0xb6, 0x75, 0xb1, 0xc8, 0x49, 0x56, 0xe0, 0x83, 0x25, 0xf8, 0x16, 0xf4, - 0x3d, 0x1e, 0x84, 0x28, 0x83, 0x4d, 0x45, 0xf9, 0x2a, 0xfa, 0x1e, 0xb4, 0x54, 0xd9, 0xe8, 0x02, - 0xe0, 0xf1, 0x73, 0x8a, 0x67, 0x34, 0x66, 0x18, 0x0e, 0x65, 0x99, 0x90, 0x04, 0x60, 0xa7, 0xc3, - 0x91, 0x90, 0xf7, 0x60, 0xc5, 0xe3, 0x2e, 0x99, 0x4c, 0x62, 0x06, 0x1f, 0xca, 0xc2, 0x5a, 0x10, - 0x80, 0x47, 0x86, 0xae, 0xb7, 0x7f, 0x9e, 0xe4, 0x84, 0xaa, 0xed, 0xb5, 0x60, 0xb6, 0x0b, 0x5d, - 0xb6, 0x7f, 0x04, 0xab, 0x1e, 0x77, 0x53, 0x8c, 0xb2, 0x69, 0x0e, 0x95, 0xcf, 0xd4, 0x8a, 0x00, - 0x0c, 0x4d, 0x43, 0x5f, 0x84, 0x23, 0xc4, 0xc2, 0xeb, 0x72, 0xe1, 0x9b, 0x4a, 0x21, 0x99, 0x8b, - 0xd0, 0x38, 0x12, 0xe2, 0x83, 0xcd, 0x39, 0xc4, 0x27, 0x69, 0x7a, 0x89, 0xc2, 0x04, 0xee, 0xe9, - 0xf5, 0x42, 0x17, 0x38, 0x7b, 0x91, 0xad, 0x07, 0x2b, 0x27, 0x76, 0x4a, 0xc2, 0x44, 0x09, 0x26, - 0x24, 0x33, 0x58, 0xe3, 0x48, 0xc8, 0x29, 0xd8, 0xf0, 0xb8, 0x8f, 0x0b, 0x92, 0x72, 0x5c, 0x71, - 0x76, 0x65, 0xb5, 0xa2, 0x0a, 0xd4, 0xa8, 0xdb, 0x94, 0xb4, 0x97, 0x60, 0xd9, 0xe3, 0x63, 0x17, - 0xc2, 0x66, 0x27, 0xba, 0xa2, 0x77, 0xa0, 0x69, 0x7a, 0x80, 0x63, 0x9c, 0x62, 0x86, 0x7d, 0x94, - 0x45, 0x58, 0x09, 0xa0, 0xa8, 0x66, 0x00, 0xcd, 0x94, 0xb4, 0x43, 0xd0, 0xf7, 0xd1, 0xac, 0x1c, - 0x54, 0xb3, 0x57, 0x6a, 0xc1, 0xdc, 0x2b, 0x42, 0x97, 0xcd, 0x27, 0x60, 0xcd, 0x47, 0x33, 0x39, - 0xea, 0x5d, 0xb5, 0xb2, 0x3d, 0xed, 0x51, 0xb7, 0xd9, 0x0a, 0x72, 0x3e, 0x6d, 0x05, 0x39, 0x9f, - 0x76, 0x07, 0xa9, 0xf4, 0xae, 0x20, 0x25, 0xc1, 0x0c, 0xa2, 0x60, 0x46, 0xdd, 0xa6, 0x64, 0x1d, - 0x83, 0x55, 0x1f, 0xcd, 0xea, 0xd5, 0x82, 0x3b, 0x6a, 0xf1, 0x7c, 0x05, 0xe7, 0x1c, 0xab, 0xcb, - 0x92, 0x94, 0x00, 0xdc, 0x13, 0xf8, 0x39, 0xca, 0x36, 0xbe, 0xab, 0xf3, 0xf6, 0x17, 0xfa, 0x12, - 0xfa, 0x01, 0xdc, 0xf5, 0xd1, 0xac, 0x3a, 0x98, 0xb4, 0xc5, 0x50, 0xcf, 0xa6, 0xa1, 0x69, 0xb4, - 0x42, 0xa9, 0x7b, 0xc7, 0xee, 0xf8, 0x27, 0xd4, 0xed, 0xb3, 0xbf, 0xd0, 0x97, 0xd0, 0x33, 0xb0, - 0x2e, 0x02, 0x57, 0xc9, 0xcc, 0xf5, 0x55, 0xe3, 0xed, 0x2d, 0x70, 0x25, 0xee, 0x1d, 0x58, 0x73, - 0x9b, 0x9b, 0x00, 0x6e, 0x3b, 0xea, 0xbd, 0xd0, 0x1c, 0xc0, 0xba, 0xaa, 0x0c, 0x6f, 0x4b, 0xe9, - 0x0e, 0x18, 0xc5, 0x68, 0xf2, 0x9f, 0x8c, 0x17, 0x3d, 0x78, 0x08, 0x96, 0x7d, 0x74, 0xc5, 0xa0, - 0xe5, 0xe8, 0x57, 0x4e, 0x29, 0x9e, 0xe1, 0xa2, 0x40, 0x11, 0xb6, 0x06, 0x2d, 0xef, 0x98, 0x64, - 0xf8, 0x60, 0xe9, 0x69, 0x0f, 0x7e, 0x02, 0x2b, 0x41, 0x86, 0xf2, 0xe2, 0x9a, 0x30, 0x38, 0x6a, - 0x15, 0x09, 0xc3, 0xbd, 0x9e, 0x66, 0xc9, 0x62, 0xc4, 0x09, 0x58, 0x0b, 0xf2, 0xb4, 0x3c, 0xd5, - 0xa3, 0x98, 0x64, 0xca, 0x76, 0x56, 0x54, 0x73, 0x3b, 0x6b, 0xa6, 0x3a, 0x9e, 0x33, 0x1e, 0x86, - 0x63, 0xcc, 0x8e, 0x6e, 0x3c, 0x7c, 0xa3, 0x8c, 0x47, 0x95, 0xcd, 0xf1, 0xe8, 0xae, 0xc4, 0x7d, - 0x01, 0xf7, 0xa5, 0x13, 0x30, 0x44, 0xd9, 0x45, 0x01, 0x1f, 0x9b, 0x4d, 0x73, 0x4b, 0x60, 0x9f, - 0xfc, 0xa3, 0x42, 0xa0, 0x8f, 0x9e, 0xfd, 0xbc, 0xb5, 0x7b, 0xbf, 0x6e, 0xed, 0xde, 0xef, 0x5b, - 0xbb, 0xf7, 0xfd, 0x8f, 0xbd, 0x04, 0x86, 0x21, 0x99, 0x38, 0x79, 0x9c, 0x45, 0x21, 0xca, 0x9d, - 0xf2, 0x77, 0x82, 0x93, 0xf0, 0xea, 0x82, 0xbf, 0xec, 0x57, 0x7f, 0x5e, 0xff, 0x0d, 0x00, 0x00, - 0xff, 0xff, 0x1e, 0x48, 0x64, 0x89, 0x4c, 0x08, 0x00, 0x00, -} diff --git a/vendor/github.com/pingcap/pd/LICENSE b/vendor/github.com/pingcap/pd/LICENSE deleted file mode 100644 index b67d909..0000000 --- a/vendor/github.com/pingcap/pd/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/pingcap/pd/pd-client/client.go b/vendor/github.com/pingcap/pd/pd-client/client.go deleted file mode 100644 index d22dc86..0000000 --- a/vendor/github.com/pingcap/pd/pd-client/client.go +++ /dev/null @@ -1,654 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package pd - -import ( - "crypto/tls" - "crypto/x509" - "io/ioutil" - "net/url" - "strings" - "sync" - "time" - - "github.com/juju/errors" - "github.com/opentracing/opentracing-go" - "github.com/pingcap/kvproto/pkg/metapb" - "github.com/pingcap/kvproto/pkg/pdpb" - log "github.com/sirupsen/logrus" - "golang.org/x/net/context" - "google.golang.org/grpc" - "google.golang.org/grpc/credentials" -) - -// Client is a PD (Placement Driver) client. -// It should not be used after calling Close(). -type Client interface { - // GetClusterID gets the cluster ID from PD. - GetClusterID(ctx context.Context) uint64 - // GetTS gets a timestamp from PD. - GetTS(ctx context.Context) (int64, int64, error) - // GetTSAsync gets a timestamp from PD, without block the caller. - GetTSAsync(ctx context.Context) TSFuture - // GetRegion gets a region and its leader Peer from PD by key. - // The region may expire after split. Caller is responsible for caching and - // taking care of region change. - // Also it may return nil if PD finds no Region for the key temporarily, - // client should retry later. - GetRegion(ctx context.Context, key []byte) (*metapb.Region, *metapb.Peer, error) - // GetRegionByID gets a region and its leader Peer from PD by id. - GetRegionByID(ctx context.Context, regionID uint64) (*metapb.Region, *metapb.Peer, error) - // GetStore gets a store from PD by store id. - // The store may expire later. Caller is responsible for caching and taking care - // of store change. - GetStore(ctx context.Context, storeID uint64) (*metapb.Store, error) - // Close closes the client. - Close() -} - -type tsoRequest struct { - start time.Time - ctx context.Context - done chan error - physical int64 - logical int64 -} - -const ( - pdTimeout = 3 * time.Second - updateLeaderTimeout = time.Second // Use a shorter timeout to recover faster from network isolation. - maxMergeTSORequests = 10000 - maxInitClusterRetries = 100 -) - -var ( - // errFailInitClusterID is returned when failed to load clusterID from all supplied PD addresses. - errFailInitClusterID = errors.New("[pd] failed to get cluster id") - // errClosing is returned when request is canceled when client is closing. - errClosing = errors.New("[pd] closing") - // errTSOLength is returned when the number of response timestamps is inconsistent with request. - errTSOLength = errors.New("[pd] tso length in rpc response is incorrect") -) - -type client struct { - urls []string - clusterID uint64 - tsoRequests chan *tsoRequest - - connMu struct { - sync.RWMutex - clientConns map[string]*grpc.ClientConn - leader string - } - - tsDeadlineCh chan deadline - checkLeaderCh chan struct{} - - wg sync.WaitGroup - ctx context.Context - cancel context.CancelFunc - - security SecurityOption -} - -// SecurityOption records options about tls -type SecurityOption struct { - CAPath string - CertPath string - KeyPath string -} - -// NewClient creates a PD client. -func NewClient(pdAddrs []string, security SecurityOption) (Client, error) { - log.Infof("[pd] create pd client with endpoints %v", pdAddrs) - ctx, cancel := context.WithCancel(context.Background()) - c := &client{ - urls: addrsToUrls(pdAddrs), - tsoRequests: make(chan *tsoRequest, maxMergeTSORequests), - tsDeadlineCh: make(chan deadline, 1), - checkLeaderCh: make(chan struct{}, 1), - ctx: ctx, - cancel: cancel, - security: security, - } - c.connMu.clientConns = make(map[string]*grpc.ClientConn) - - if err := c.initClusterID(); err != nil { - return nil, errors.Trace(err) - } - if err := c.updateLeader(); err != nil { - return nil, errors.Trace(err) - } - log.Infof("[pd] init cluster id %v", c.clusterID) - - c.wg.Add(3) - go c.tsLoop() - go c.tsCancelLoop() - go c.leaderLoop() - - return c, nil -} - -func (c *client) updateURLs(members []*pdpb.Member) { - urls := make([]string, 0, len(members)) - for _, m := range members { - urls = append(urls, m.GetClientUrls()...) - } - c.urls = urls -} - -func (c *client) initClusterID() error { - ctx, cancel := context.WithCancel(c.ctx) - defer cancel() - for i := 0; i < maxInitClusterRetries; i++ { - for _, u := range c.urls { - members, err := c.getMembers(ctx, u) - if err != nil || members.GetHeader() == nil { - log.Errorf("[pd] failed to get cluster id: %v", err) - continue - } - c.clusterID = members.GetHeader().GetClusterId() - return nil - } - - time.Sleep(time.Second) - } - - return errors.Trace(errFailInitClusterID) -} - -func (c *client) updateLeader() error { - for _, u := range c.urls { - ctx, cancel := context.WithTimeout(c.ctx, updateLeaderTimeout) - members, err := c.getMembers(ctx, u) - cancel() - if err != nil || members.GetLeader() == nil || len(members.GetLeader().GetClientUrls()) == 0 { - continue - } - c.updateURLs(members.GetMembers()) - if err = c.switchLeader(members.GetLeader().GetClientUrls()); err != nil { - return errors.Trace(err) - } - return nil - } - return errors.Errorf("failed to get leader from %v", c.urls) -} - -func (c *client) getMembers(ctx context.Context, url string) (*pdpb.GetMembersResponse, error) { - cc, err := c.getOrCreateGRPCConn(url) - if err != nil { - return nil, errors.Trace(err) - } - members, err := pdpb.NewPDClient(cc).GetMembers(ctx, &pdpb.GetMembersRequest{}) - if err != nil { - return nil, errors.Trace(err) - } - return members, nil -} - -func (c *client) switchLeader(addrs []string) error { - // FIXME: How to safely compare leader urls? For now, only allows one client url. - addr := addrs[0] - - c.connMu.RLock() - oldLeader := c.connMu.leader - c.connMu.RUnlock() - - if addr == oldLeader { - return nil - } - - log.Infof("[pd] leader switches to: %v, previous: %v", addr, oldLeader) - if _, err := c.getOrCreateGRPCConn(addr); err != nil { - return errors.Trace(err) - } - - c.connMu.Lock() - defer c.connMu.Unlock() - c.connMu.leader = addr - return nil -} - -func (c *client) getOrCreateGRPCConn(addr string) (*grpc.ClientConn, error) { - c.connMu.RLock() - conn, ok := c.connMu.clientConns[addr] - c.connMu.RUnlock() - if ok { - return conn, nil - } - - opt := grpc.WithInsecure() - if len(c.security.CAPath) != 0 { - - certificates := []tls.Certificate{} - if len(c.security.CertPath) != 0 && len(c.security.KeyPath) != 0 { - // Load the client certificates from disk - certificate, err := tls.LoadX509KeyPair(c.security.CertPath, c.security.KeyPath) - if err != nil { - return nil, errors.Errorf("could not load client key pair: %s", err) - } - certificates = append(certificates, certificate) - } - - // Create a certificate pool from the certificate authority - certPool := x509.NewCertPool() - ca, err := ioutil.ReadFile(c.security.CAPath) - if err != nil { - return nil, errors.Errorf("could not read ca certificate: %s", err) - } - - // Append the certificates from the CA - if !certPool.AppendCertsFromPEM(ca) { - return nil, errors.New("failed to append ca certs") - } - - creds := credentials.NewTLS(&tls.Config{ - Certificates: certificates, - RootCAs: certPool, - }) - - opt = grpc.WithTransportCredentials(creds) - } - u, err := url.Parse(addr) - if err != nil { - return nil, errors.Trace(err) - } - cc, err := grpc.Dial(u.Host, opt) - if err != nil { - return nil, errors.Trace(err) - } - c.connMu.Lock() - defer c.connMu.Unlock() - if old, ok := c.connMu.clientConns[addr]; ok { - cc.Close() - return old, nil - } - - c.connMu.clientConns[addr] = cc - return cc, nil -} - -func (c *client) leaderLoop() { - defer c.wg.Done() - - ctx, cancel := context.WithCancel(c.ctx) - defer cancel() - - for { - select { - case <-c.checkLeaderCh: - case <-time.After(time.Minute): - case <-ctx.Done(): - return - } - - if err := c.updateLeader(); err != nil { - log.Errorf("[pd] failed updateLeader: %v", err) - } - } -} - -type deadline struct { - timer <-chan time.Time - done chan struct{} - cancel context.CancelFunc -} - -func (c *client) tsCancelLoop() { - defer c.wg.Done() - - ctx, cancel := context.WithCancel(c.ctx) - defer cancel() - - for { - select { - case d := <-c.tsDeadlineCh: - select { - case <-d.timer: - log.Error("tso request is canceled due to timeout") - d.cancel() - case <-d.done: - case <-ctx.Done(): - return - } - case <-ctx.Done(): - return - } - } -} - -func (c *client) tsLoop() { - defer c.wg.Done() - - loopCtx, loopCancel := context.WithCancel(c.ctx) - defer loopCancel() - - var requests []*tsoRequest - var opts []opentracing.StartSpanOption - var stream pdpb.PD_TsoClient - var cancel context.CancelFunc - - for { - var err error - - if stream == nil { - var ctx context.Context - ctx, cancel = context.WithCancel(c.ctx) - stream, err = c.leaderClient().Tso(ctx) - if err != nil { - log.Errorf("[pd] create tso stream error: %v", err) - c.ScheduleCheckLeader() - cancel() - c.revokeTSORequest(err) - select { - case <-time.After(time.Second): - case <-loopCtx.Done(): - return - } - continue - } - } - - select { - case first := <-c.tsoRequests: - requests = append(requests, first) - pending := len(c.tsoRequests) - for i := 0; i < pending; i++ { - requests = append(requests, <-c.tsoRequests) - } - done := make(chan struct{}) - dl := deadline{ - timer: time.After(pdTimeout), - done: done, - cancel: cancel, - } - select { - case c.tsDeadlineCh <- dl: - case <-loopCtx.Done(): - return - } - opts = extractSpanReference(requests, opts[:0]) - err = c.processTSORequests(stream, requests, opts) - close(done) - requests = requests[:0] - case <-loopCtx.Done(): - cancel() - return - } - - if err != nil { - log.Errorf("[pd] getTS error: %v", err) - c.ScheduleCheckLeader() - cancel() - stream, cancel = nil, nil - } - } -} - -func extractSpanReference(requests []*tsoRequest, opts []opentracing.StartSpanOption) []opentracing.StartSpanOption { - for _, req := range requests { - if span := opentracing.SpanFromContext(req.ctx); span != nil { - opts = append(opts, opentracing.ChildOf(span.Context())) - } - } - return opts -} - -func (c *client) processTSORequests(stream pdpb.PD_TsoClient, requests []*tsoRequest, opts []opentracing.StartSpanOption) error { - if len(opts) > 0 { - span := opentracing.StartSpan("pdclient.processTSORequests", opts...) - defer span.Finish() - } - - start := time.Now() - req := &pdpb.TsoRequest{ - Header: c.requestHeader(), - Count: uint32(len(requests)), - } - - if err := stream.Send(req); err != nil { - c.finishTSORequest(requests, 0, 0, err) - return errors.Trace(err) - } - resp, err := stream.Recv() - if err != nil { - c.finishTSORequest(requests, 0, 0, errors.Trace(err)) - return errors.Trace(err) - } - requestDuration.WithLabelValues("tso").Observe(time.Since(start).Seconds()) - if err == nil && resp.GetCount() != uint32(len(requests)) { - err = errTSOLength - } - if err != nil { - c.finishTSORequest(requests, 0, 0, errors.Trace(err)) - return errors.Trace(err) - } - - physical, logical := resp.GetTimestamp().GetPhysical(), resp.GetTimestamp().GetLogical() - // Server returns the highest ts. - logical -= int64(resp.GetCount() - 1) - c.finishTSORequest(requests, physical, logical, nil) - return nil -} - -func (c *client) finishTSORequest(requests []*tsoRequest, physical, firstLogical int64, err error) { - for i := 0; i < len(requests); i++ { - if span := opentracing.SpanFromContext(requests[i].ctx); span != nil { - span.Finish() - } - requests[i].physical, requests[i].logical = physical, firstLogical+int64(i) - requests[i].done <- err - } -} - -func (c *client) revokeTSORequest(err error) { - n := len(c.tsoRequests) - for i := 0; i < n; i++ { - req := <-c.tsoRequests - req.done <- errors.Trace(err) - } -} - -func (c *client) Close() { - c.cancel() - c.wg.Wait() - - c.revokeTSORequest(errClosing) - - c.connMu.Lock() - defer c.connMu.Unlock() - for _, cc := range c.connMu.clientConns { - if err := cc.Close(); err != nil { - log.Errorf("[pd] failed close grpc clientConn: %v", err) - } - } -} - -func (c *client) leaderClient() pdpb.PDClient { - c.connMu.RLock() - defer c.connMu.RUnlock() - - return pdpb.NewPDClient(c.connMu.clientConns[c.connMu.leader]) -} - -func (c *client) ScheduleCheckLeader() { - select { - case c.checkLeaderCh <- struct{}{}: - default: - } -} - -func (c *client) GetClusterID(context.Context) uint64 { - return c.clusterID -} - -// For testing use. -func (c *client) GetLeaderAddr() string { - c.connMu.RLock() - defer c.connMu.RUnlock() - return c.connMu.leader -} - -// For testing use. It should only be called when the client is closed. -func (c *client) GetURLs() []string { - return c.urls -} - -var tsoReqPool = sync.Pool{ - New: func() interface{} { - return &tsoRequest{ - done: make(chan error, 1), - } - }, -} - -func (c *client) GetTSAsync(ctx context.Context) TSFuture { - if span := opentracing.SpanFromContext(ctx); span != nil { - span = opentracing.StartSpan("GetTSAsync", opentracing.ChildOf(span.Context())) - ctx = opentracing.ContextWithSpan(ctx, span) - } - req := tsoReqPool.Get().(*tsoRequest) - req.start = time.Now() - req.ctx = ctx - req.physical = 0 - req.logical = 0 - c.tsoRequests <- req - - return req -} - -// TSFuture is a future which promises to return a TSO. -type TSFuture interface { - // Wait gets the physical and logical time, it would block caller if data is not available yet. - Wait() (int64, int64, error) -} - -func (req *tsoRequest) Wait() (int64, int64, error) { - select { - case err := <-req.done: - defer tsoReqPool.Put(req) - if err != nil { - cmdFailedDuration.WithLabelValues("tso").Observe(time.Since(req.start).Seconds()) - return 0, 0, errors.Trace(err) - } - physical, logical := req.physical, req.logical - cmdDuration.WithLabelValues("tso").Observe(time.Since(req.start).Seconds()) - return physical, logical, err - case <-req.ctx.Done(): - return 0, 0, errors.Trace(req.ctx.Err()) - } -} - -func (c *client) GetTS(ctx context.Context) (int64, int64, error) { - resp := c.GetTSAsync(ctx) - return resp.Wait() -} - -func (c *client) GetRegion(ctx context.Context, key []byte) (*metapb.Region, *metapb.Peer, error) { - if span := opentracing.SpanFromContext(ctx); span != nil { - span = opentracing.StartSpan("pdclient.GetRegion", opentracing.ChildOf(span.Context())) - defer span.Finish() - } - start := time.Now() - defer func() { cmdDuration.WithLabelValues("get_region").Observe(time.Since(start).Seconds()) }() - - ctx, cancel := context.WithTimeout(ctx, pdTimeout) - resp, err := c.leaderClient().GetRegion(ctx, &pdpb.GetRegionRequest{ - Header: c.requestHeader(), - RegionKey: key, - }) - requestDuration.WithLabelValues("get_region").Observe(time.Since(start).Seconds()) - cancel() - - if err != nil { - cmdFailedDuration.WithLabelValues("get_region").Observe(time.Since(start).Seconds()) - c.ScheduleCheckLeader() - return nil, nil, errors.Trace(err) - } - return resp.GetRegion(), resp.GetLeader(), nil -} - -func (c *client) GetRegionByID(ctx context.Context, regionID uint64) (*metapb.Region, *metapb.Peer, error) { - if span := opentracing.SpanFromContext(ctx); span != nil { - span = opentracing.StartSpan("pdclient.GetRegionByID", opentracing.ChildOf(span.Context())) - defer span.Finish() - } - start := time.Now() - defer func() { cmdDuration.WithLabelValues("get_region_byid").Observe(time.Since(start).Seconds()) }() - - ctx, cancel := context.WithTimeout(ctx, pdTimeout) - resp, err := c.leaderClient().GetRegionByID(ctx, &pdpb.GetRegionByIDRequest{ - Header: c.requestHeader(), - RegionId: regionID, - }) - requestDuration.WithLabelValues("get_region_byid").Observe(time.Since(start).Seconds()) - cancel() - - if err != nil { - cmdFailedDuration.WithLabelValues("get_region_byid").Observe(time.Since(start).Seconds()) - c.ScheduleCheckLeader() - return nil, nil, errors.Trace(err) - } - return resp.GetRegion(), resp.GetLeader(), nil -} - -func (c *client) GetStore(ctx context.Context, storeID uint64) (*metapb.Store, error) { - if span := opentracing.SpanFromContext(ctx); span != nil { - span = opentracing.StartSpan("pdclient.GetStore", opentracing.ChildOf(span.Context())) - defer span.Finish() - } - start := time.Now() - defer func() { cmdDuration.WithLabelValues("get_store").Observe(time.Since(start).Seconds()) }() - - ctx, cancel := context.WithTimeout(ctx, pdTimeout) - resp, err := c.leaderClient().GetStore(ctx, &pdpb.GetStoreRequest{ - Header: c.requestHeader(), - StoreId: storeID, - }) - requestDuration.WithLabelValues("get_store").Observe(time.Since(start).Seconds()) - cancel() - - if err != nil { - cmdFailedDuration.WithLabelValues("get_store").Observe(time.Since(start).Seconds()) - c.ScheduleCheckLeader() - return nil, errors.Trace(err) - } - store := resp.GetStore() - if store == nil { - return nil, errors.New("[pd] store field in rpc response not set") - } - if store.GetState() == metapb.StoreState_Tombstone { - return nil, nil - } - return store, nil -} - -func (c *client) requestHeader() *pdpb.RequestHeader { - return &pdpb.RequestHeader{ - ClusterId: c.clusterID, - } -} - -func addrsToUrls(addrs []string) []string { - // Add default schema "http://" to addrs. - urls := make([]string, 0, len(addrs)) - for _, addr := range addrs { - if strings.Contains(addr, "://") { - urls = append(urls, addr) - } else { - urls = append(urls, "http://"+addr) - } - } - return urls -} diff --git a/vendor/github.com/pingcap/pd/pd-client/metrics.go b/vendor/github.com/pingcap/pd/pd-client/metrics.go deleted file mode 100644 index e64199b..0000000 --- a/vendor/github.com/pingcap/pd/pd-client/metrics.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package pd - -import "github.com/prometheus/client_golang/prometheus" - -var ( - cmdDuration = prometheus.NewHistogramVec( - prometheus.HistogramOpts{ - Namespace: "pd_client", - Subsystem: "cmd", - Name: "handle_cmds_duration_seconds", - Help: "Bucketed histogram of processing time (s) of handled success cmds.", - Buckets: prometheus.ExponentialBuckets(0.0005, 2, 13), - }, []string{"type"}) - - cmdFailedDuration = prometheus.NewHistogramVec( - prometheus.HistogramOpts{ - Namespace: "pd_client", - Subsystem: "cmd", - Name: "handle_failed_cmds_duration_seconds", - Help: "Bucketed histogram of processing time (s) of failed handled cmds.", - Buckets: prometheus.ExponentialBuckets(0.0005, 2, 13), - }, []string{"type"}) - - requestDuration = prometheus.NewHistogramVec( - prometheus.HistogramOpts{ - Namespace: "pd_client", - Subsystem: "request", - Name: "handle_requests_duration_seconds", - Help: "Bucketed histogram of processing time (s) of handled requests.", - Buckets: prometheus.ExponentialBuckets(0.0005, 2, 13), - }, []string{"type"}) -) - -func init() { - prometheus.MustRegister(cmdDuration) - prometheus.MustRegister(cmdFailedDuration) - prometheus.MustRegister(requestDuration) -} diff --git a/vendor/github.com/pingcap/tidb/CONTRIBUTORS b/vendor/github.com/pingcap/tidb/CONTRIBUTORS deleted file mode 100644 index ca6115e..0000000 --- a/vendor/github.com/pingcap/tidb/CONTRIBUTORS +++ /dev/null @@ -1,124 +0,0 @@ -# This is the official list of people who can contribute -# (and typically have contributed) code to the TiDB repository. -# -# Names should be added to this file like so: -# Individual's name -# Individual's name -# -# Please keep the list sorted. -8cbx -Akihiro Suda -Arthur Yang <980224951@qq.com> -Asta Xie -Bai Yang -Bin Liu -Blame cosmos -Ce Gao -Chu Chao -Cole R Lawrence -Cui Qiu -David Chen -Deshi Xiao -Di Tang -Dongxu Huang -Du Chuan -Dylan Wen -Eric Romano -Ewan Chou -Fei Han -Guilherme Hübner Franco -Haibin Xie -Hiroaki Nakamura -Hongyuan Wang -Hu Ziming -Huachao Huang -Huaiyu Xu -Ian Zhai -Ivan Yang -Jan Mercl <0xjnml@gmail.com> -Jason W -Jianjun Li -Jie Zhou -Jinpeng Zhang -JunChang Chang -Kangli Mao -Karl Ostendorf -Kuiba -Light -Lijian Li -Liqueur Librazy -Liu Shaohui -Liu Tang -MQ <603730347@qq.com> -Menglong Huang -Michael Belenchenko -MoreFreeze -Neil Shen -Nicole Nie -Peng Qu -Qiannan -Rick Yu -Shen Li -Sheng Tang -Shuning Chen -Shuyu Wang -Simon Xia -Steffen Butzer -Tao Meng -Tennix -Tian Guangyu -Tristan Su -Unknwon -Van -Wang Xiang -Wen Yang -Wenbin Xiao -Xia Li -Xiaoyu Ma -Xuanjia Yang -Xuanwo -Xuelian Wu -Yanzhe Chen -Yiding Cui -Yin Liu -Yiyan Lu -Yu Liu -Yuwen Shen -Zejun Li -Zhang Yuning -Zhao Xingyu -Zhao Yijun -Zhexuan Yang -ZhiFeng Hu -Zhoubirdblue <820486124@qq.com> -alston111111 -c-wind -coldwater -cuiyuan -dawxy <97687341@qq.com> -framlog -fud -fudali -gowink <82091309@qq.com> -hiwjd -insion -jacky liu -jinhelin -knarfeh -kun Jin -luckcolors -maxwell <710028463@qq.com> -morefreeze -netroby -nieyy -silenceper -sllt -ueizhou -v01dstar -wink -woodpenker -zs634134578 -zxylvlp -zyguan -王维真 -仇柯人 diff --git a/vendor/github.com/pingcap/tidb/LICENSE b/vendor/github.com/pingcap/tidb/LICENSE deleted file mode 100644 index b67d909..0000000 --- a/vendor/github.com/pingcap/tidb/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/pingcap/tidb/config/config.go b/vendor/github.com/pingcap/tidb/config/config.go deleted file mode 100644 index b095e2a..0000000 --- a/vendor/github.com/pingcap/tidb/config/config.go +++ /dev/null @@ -1,379 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package config - -import ( - "crypto/tls" - "crypto/x509" - "io/ioutil" - "time" - - "github.com/BurntSushi/toml" - "github.com/juju/errors" - "github.com/pingcap/tidb/util/logutil" - tracing "github.com/uber/jaeger-client-go/config" -) - -// Config number limitations -const ( - MaxLogFileSize = 4096 // MB -) - -// Valid config maps -var ( - ValidStorage = map[string]bool{ - "mocktikv": true, - "tikv": true, - } -) - -// Config contains configuration options. -type Config struct { - Host string `toml:"host" json:"host"` - Port uint `toml:"port" json:"port"` - Store string `toml:"store" json:"store"` - Path string `toml:"path" json:"path"` - Socket string `toml:"socket" json:"socket"` - Lease string `toml:"lease" json:"lease"` - RunDDL bool `toml:"run-ddl" json:"run-ddl"` - SplitTable bool `toml:"split-table" json:"split-table"` - TokenLimit uint `toml:"token-limit" json:"token-limit"` - OOMAction string `toml:"oom-action" json:"oom-action"` - MemQuotaQuery int64 `toml:"mem-quota-query" json:"mem-quota-query"` - EnableStreaming bool `toml:"enable-streaming" json:"enable-streaming"` - TxnLocalLatches TxnLocalLatches `toml:"txn-local-latches" json:"txn-local-latches"` - // Set sys variable lower-case-table-names, ref: https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html. - // TODO: We actually only support mode 2, which keeps the original case, but the comparison is case-insensitive. - LowerCaseTableNames int `toml:"lower-case-table-names" json:"lower-case-table-names"` - - Log Log `toml:"log" json:"log"` - Security Security `toml:"security" json:"security"` - Status Status `toml:"status" json:"status"` - Performance Performance `toml:"performance" json:"performance"` - XProtocol XProtocol `toml:"xprotocol" json:"xprotocol"` - PlanCache PlanCache `toml:"plan-cache" json:"plan-cache"` - PreparedPlanCache PreparedPlanCache `toml:"prepared-plan-cache" json:"prepared-plan-cache"` - OpenTracing OpenTracing `toml:"opentracing" json:"opentracing"` - ProxyProtocol ProxyProtocol `toml:"proxy-protocol" json:"proxy-protocol"` - TiKVClient TiKVClient `toml:"tikv-client" json:"tikv-client"` - Binlog Binlog `toml:"binlog" json:"binlog"` -} - -// Log is the log section of config. -type Log struct { - // Log level. - Level string `toml:"level" json:"level"` - // Log format. one of json, text, or console. - Format string `toml:"format" json:"format"` - // Disable automatic timestamps in output. - DisableTimestamp bool `toml:"disable-timestamp" json:"disable-timestamp"` - // File log config. - File logutil.FileLogConfig `toml:"file" json:"file"` - - SlowQueryFile string `toml:"slow-query-file" json:"slow-query-file"` - SlowThreshold uint `toml:"slow-threshold" json:"slow-threshold"` - ExpensiveThreshold uint `toml:"expensive-threshold" json:"expensive-threshold"` - QueryLogMaxLen uint `toml:"query-log-max-len" json:"query-log-max-len"` -} - -// Security is the security section of the config. -type Security struct { - SkipGrantTable bool `toml:"skip-grant-table" json:"skip-grant-table"` - SSLCA string `toml:"ssl-ca" json:"ssl-ca"` - SSLCert string `toml:"ssl-cert" json:"ssl-cert"` - SSLKey string `toml:"ssl-key" json:"ssl-key"` - ClusterSSLCA string `toml:"cluster-ssl-ca" json:"cluster-ssl-ca"` - ClusterSSLCert string `toml:"cluster-ssl-cert" json:"cluster-ssl-cert"` - ClusterSSLKey string `toml:"cluster-ssl-key" json:"cluster-ssl-key"` -} - -// ToTLSConfig generates tls's config based on security section of the config. -func (s *Security) ToTLSConfig() (*tls.Config, error) { - var tlsConfig *tls.Config - if len(s.ClusterSSLCA) != 0 { - var certificates = make([]tls.Certificate, 0) - if len(s.ClusterSSLCert) != 0 && len(s.ClusterSSLKey) != 0 { - // Load the client certificates from disk - certificate, err := tls.LoadX509KeyPair(s.ClusterSSLCert, s.ClusterSSLKey) - if err != nil { - return nil, errors.Errorf("could not load client key pair: %s", err) - } - certificates = append(certificates, certificate) - } - - // Create a certificate pool from the certificate authority - certPool := x509.NewCertPool() - ca, err := ioutil.ReadFile(s.ClusterSSLCA) - if err != nil { - return nil, errors.Errorf("could not read ca certificate: %s", err) - } - - // Append the certificates from the CA - if !certPool.AppendCertsFromPEM(ca) { - return nil, errors.New("failed to append ca certs") - } - - tlsConfig = &tls.Config{ - Certificates: certificates, - RootCAs: certPool, - } - } - - return tlsConfig, nil -} - -// Status is the status section of the config. -type Status struct { - ReportStatus bool `toml:"report-status" json:"report-status"` - StatusPort uint `toml:"status-port" json:"status-port"` - MetricsAddr string `toml:"metrics-addr" json:"metrics-addr"` - MetricsInterval uint `toml:"metrics-interval" json:"metrics-interval"` -} - -// Performance is the performance section of the config. -type Performance struct { - MaxProcs uint `toml:"max-procs" json:"max-procs"` - TCPKeepAlive bool `toml:"tcp-keep-alive" json:"tcp-keep-alive"` - CrossJoin bool `toml:"cross-join" json:"cross-join"` - StatsLease string `toml:"stats-lease" json:"stats-lease"` - RunAutoAnalyze bool `toml:"run-auto-analyze" json:"run-auto-analyze"` - StmtCountLimit uint `toml:"stmt-count-limit" json:"stmt-count-limit"` - FeedbackProbability float64 `toml:"feedback-probability" json:"feedback-probability"` - QueryFeedbackLimit uint `toml:"query-feedback-limit" json:"query-feedback-limit"` - PseudoEstimateRatio float64 `toml:"pseudo-estimate-ratio" json:"pseudo-estimate-ratio"` -} - -// XProtocol is the XProtocol section of the config. -type XProtocol struct { - XServer bool `toml:"xserver" json:"xserver"` - XHost string `toml:"xhost" json:"xhost"` - XPort uint `toml:"xport" json:"xport"` - XSocket string `toml:"xsocket" json:"xsocket"` -} - -// PlanCache is the PlanCache section of the config. -type PlanCache struct { - Enabled bool `toml:"enabled" json:"enabled"` - Capacity uint `toml:"capacity" json:"capacity"` - Shards uint `toml:"shards" json:"shards"` -} - -// TxnLocalLatches is the TxnLocalLatches section of the config. -type TxnLocalLatches struct { - Enabled bool `toml:"enabled" json:"enabled"` - Capacity uint `toml:"capacity" json:"capacity"` -} - -// PreparedPlanCache is the PreparedPlanCache section of the config. -type PreparedPlanCache struct { - Enabled bool `toml:"enabled" json:"enabled"` - Capacity uint `toml:"capacity" json:"capacity"` -} - -// OpenTracing is the opentracing section of the config. -type OpenTracing struct { - Enable bool `toml:"enable" json:"enbale"` - Sampler OpenTracingSampler `toml:"sampler" json:"sampler"` - Reporter OpenTracingReporter `toml:"reporter" json:"reporter"` - RPCMetrics bool `toml:"rpc-metrics" json:"rpc-metrics"` -} - -// OpenTracingSampler is the config for opentracing sampler. -// See https://godoc.org/github.com/uber/jaeger-client-go/config#SamplerConfig -type OpenTracingSampler struct { - Type string `toml:"type" json:"type"` - Param float64 `toml:"param" json:"param"` - SamplingServerURL string `toml:"sampling-server-url" json:"sampling-server-url"` - MaxOperations int `toml:"max-operations" json:"max-operations"` - SamplingRefreshInterval time.Duration `toml:"sampling-refresh-interval" json:"sampling-refresh-interval"` -} - -// OpenTracingReporter is the config for opentracing reporter. -// See https://godoc.org/github.com/uber/jaeger-client-go/config#ReporterConfig -type OpenTracingReporter struct { - QueueSize int `toml:"queue-size" json:"queue-size"` - BufferFlushInterval time.Duration `toml:"buffer-flush-interval" json:"buffer-flush-interval"` - LogSpans bool `toml:"log-spans" json:"log-spans"` - LocalAgentHostPort string `toml:"local-agent-host-port" json:"local-agent-host-port"` -} - -// ProxyProtocol is the PROXY protocol section of the config. -type ProxyProtocol struct { - // PROXY protocol acceptable client networks. - // Empty string means disable PROXY protocol, - // * means all networks. - Networks string `toml:"networks" json:"networks"` - // PROXY protocol header read timeout, Unit is second. - HeaderTimeout uint `toml:"header-timeout" json:"header-timeout"` -} - -// TiKVClient is the config for tikv client. -type TiKVClient struct { - // GrpcConnectionCount is the max gRPC connections that will be established - // with each tikv-server. - GrpcConnectionCount uint `toml:"grpc-connection-count" json:"grpc-connection-count"` - // CommitTimeout is the max time which command 'commit' will wait. - CommitTimeout string `toml:"commit-timeout" json:"commit-timeout"` -} - -// Binlog is the config for binlog. -type Binlog struct { - BinlogSocket string `toml:"binlog-socket" json:"binlog-socket"` - WriteTimeout string `toml:"write-timeout" json:"write-timeout"` - // If IgnoreError is true, when writting binlog meets error, TiDB would - // ignore the error. - IgnoreError bool `toml:"ignore-error" json:"ignore-error"` -} - -var defaultConf = Config{ - Host: "0.0.0.0", - Port: 4000, - Store: "mocktikv", - Path: "/tmp/tidb", - RunDDL: true, - SplitTable: true, - Lease: "45s", - TokenLimit: 1000, - OOMAction: "log", - MemQuotaQuery: 32 << 30, - EnableStreaming: false, - TxnLocalLatches: TxnLocalLatches{ - Enabled: false, - Capacity: 10240000, - }, - LowerCaseTableNames: 2, - Log: Log{ - Level: "info", - Format: "text", - File: logutil.FileLogConfig{ - LogRotate: true, - MaxSize: logutil.DefaultLogMaxSize, - }, - SlowThreshold: 300, - ExpensiveThreshold: 10000, - QueryLogMaxLen: 2048, - }, - Status: Status{ - ReportStatus: true, - StatusPort: 10080, - MetricsInterval: 15, - }, - Performance: Performance{ - TCPKeepAlive: true, - CrossJoin: true, - StatsLease: "3s", - RunAutoAnalyze: true, - StmtCountLimit: 5000, - FeedbackProbability: 0.05, - QueryFeedbackLimit: 1024, - PseudoEstimateRatio: 0.8, - }, - XProtocol: XProtocol{ - XHost: "", - XPort: 0, - }, - ProxyProtocol: ProxyProtocol{ - Networks: "", - HeaderTimeout: 5, - }, - PlanCache: PlanCache{ - Enabled: false, - Capacity: 2560, - Shards: 256, - }, - PreparedPlanCache: PreparedPlanCache{ - Enabled: false, - Capacity: 100, - }, - OpenTracing: OpenTracing{ - Enable: false, - Sampler: OpenTracingSampler{ - Type: "const", - Param: 1.0, - }, - Reporter: OpenTracingReporter{}, - }, - TiKVClient: TiKVClient{ - GrpcConnectionCount: 16, - CommitTimeout: "41s", - }, - Binlog: Binlog{ - WriteTimeout: "15s", - }, -} - -var globalConf = defaultConf - -// NewConfig creates a new config instance with default value. -func NewConfig() *Config { - conf := defaultConf - return &conf -} - -// GetGlobalConfig returns the global configuration for this server. -// It should store configuration from command line and configuration file. -// Other parts of the system can read the global configuration use this function. -func GetGlobalConfig() *Config { - return &globalConf -} - -// Load loads config options from a toml file. -func (c *Config) Load(confFile string) error { - _, err := toml.DecodeFile(confFile, c) - if c.TokenLimit <= 0 { - c.TokenLimit = 1000 - } - return errors.Trace(err) -} - -// ToLogConfig converts *Log to *logutil.LogConfig. -func (l *Log) ToLogConfig() *logutil.LogConfig { - return &logutil.LogConfig{ - Level: l.Level, - Format: l.Format, - DisableTimestamp: l.DisableTimestamp, - File: l.File, - SlowQueryFile: l.SlowQueryFile, - } -} - -// ToTracingConfig converts *OpenTracing to *tracing.Configuration. -func (t *OpenTracing) ToTracingConfig() *tracing.Configuration { - ret := &tracing.Configuration{ - Disabled: !t.Enable, - RPCMetrics: t.RPCMetrics, - Reporter: &tracing.ReporterConfig{}, - Sampler: &tracing.SamplerConfig{}, - } - ret.Reporter.QueueSize = t.Reporter.QueueSize - ret.Reporter.BufferFlushInterval = t.Reporter.BufferFlushInterval - ret.Reporter.LogSpans = t.Reporter.LogSpans - ret.Reporter.LocalAgentHostPort = t.Reporter.LocalAgentHostPort - - ret.Sampler.Type = t.Sampler.Type - ret.Sampler.Param = t.Sampler.Param - ret.Sampler.SamplingServerURL = t.Sampler.SamplingServerURL - ret.Sampler.MaxOperations = t.Sampler.MaxOperations - ret.Sampler.SamplingRefreshInterval = t.Sampler.SamplingRefreshInterval - return ret -} - -// The following constants represents the valid action configurations for OOMAction. -// NOTE: Althrough the values is case insensitiv, we should use lower-case -// strings because the configuration value will be transformed to lower-case -// string and compared with these constants in the further usage. -const ( - OOMActionCancel = "cancel" - OOMActionLog = "log" -) diff --git a/vendor/github.com/pingcap/tidb/kv/buffer_store.go b/vendor/github.com/pingcap/tidb/kv/buffer_store.go deleted file mode 100644 index be2535e..0000000 --- a/vendor/github.com/pingcap/tidb/kv/buffer_store.go +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import ( - "github.com/juju/errors" -) - -var ( - // DefaultTxnMembufCap is the default transaction membuf capability. - DefaultTxnMembufCap = 4 * 1024 - // ImportingTxnMembufCap is the capability of tidb importing data situation. - ImportingTxnMembufCap = 32 * 1024 - // TempTxnMemBufCap is the capability of temporary membuf. - TempTxnMemBufCap = 64 -) - -// BufferStore wraps a Retriever for read and a MemBuffer for buffered write. -// Common usage pattern: -// bs := NewBufferStore(r) // use BufferStore to wrap a Retriever -// // ... -// // read/write on bs -// // ... -// bs.SaveTo(m) // save above operations to a Mutator -type BufferStore struct { - MemBuffer - r Retriever -} - -// NewBufferStore creates a BufferStore using r for read. -func NewBufferStore(r Retriever, cap int) *BufferStore { - if cap <= 0 { - cap = DefaultTxnMembufCap - } - return &BufferStore{ - r: r, - MemBuffer: &lazyMemBuffer{cap: cap}, - } -} - -// Reset resets s.MemBuffer. -func (s *BufferStore) Reset() { - s.MemBuffer.Reset() -} - -// SetCap sets the MemBuffer capability. -func (s *BufferStore) SetCap(cap int) { - s.MemBuffer.SetCap(cap) -} - -// Get implements the Retriever interface. -func (s *BufferStore) Get(k Key) ([]byte, error) { - val, err := s.MemBuffer.Get(k) - if IsErrNotFound(err) { - val, err = s.r.Get(k) - } - if err != nil { - return nil, errors.Trace(err) - } - if len(val) == 0 { - return nil, ErrNotExist - } - return val, nil -} - -// Seek implements the Retriever interface. -func (s *BufferStore) Seek(k Key) (Iterator, error) { - bufferIt, err := s.MemBuffer.Seek(k) - if err != nil { - return nil, errors.Trace(err) - } - retrieverIt, err := s.r.Seek(k) - if err != nil { - return nil, errors.Trace(err) - } - return NewUnionIter(bufferIt, retrieverIt, false) -} - -// SeekReverse implements the Retriever interface. -func (s *BufferStore) SeekReverse(k Key) (Iterator, error) { - bufferIt, err := s.MemBuffer.SeekReverse(k) - if err != nil { - return nil, errors.Trace(err) - } - retrieverIt, err := s.r.SeekReverse(k) - if err != nil { - return nil, errors.Trace(err) - } - return NewUnionIter(bufferIt, retrieverIt, true) -} - -// WalkBuffer iterates all buffered kv pairs. -func (s *BufferStore) WalkBuffer(f func(k Key, v []byte) error) error { - return errors.Trace(WalkMemBuffer(s.MemBuffer, f)) -} - -// SaveTo saves all buffered kv pairs into a Mutator. -func (s *BufferStore) SaveTo(m Mutator) error { - err := s.WalkBuffer(func(k Key, v []byte) error { - if len(v) == 0 { - return errors.Trace(m.Delete(k)) - } - return errors.Trace(m.Set(k, v)) - }) - return errors.Trace(err) -} diff --git a/vendor/github.com/pingcap/tidb/kv/error.go b/vendor/github.com/pingcap/tidb/kv/error.go deleted file mode 100644 index 68be6b8..0000000 --- a/vendor/github.com/pingcap/tidb/kv/error.go +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import ( - "strings" - - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" -) - -// KV error codes. -const ( - codeClosed terror.ErrCode = 1 - codeNotExist = 2 - codeConditionNotMatch = 3 - codeLockConflict = 4 - codeLazyConditionPairsNotMatch = 5 - codeRetryable = 6 - codeCantSetNilValue = 7 - codeInvalidTxn = 8 - codeNotCommitted = 9 - codeNotImplemented = 10 - codeTxnTooLarge = 11 - codeEntryTooLarge = 12 - - codeKeyExists = 1062 -) - -var ( - // ErrClosed is used when close an already closed txn. - ErrClosed = terror.ClassKV.New(codeClosed, "Error: Transaction already closed") - // ErrNotExist is used when try to get an entry with an unexist key from KV store. - ErrNotExist = terror.ClassKV.New(codeNotExist, "Error: key not exist") - // ErrConditionNotMatch is used when condition is not met. - ErrConditionNotMatch = terror.ClassKV.New(codeConditionNotMatch, "Error: Condition not match") - // ErrLockConflict is used when try to lock an already locked key. - ErrLockConflict = terror.ClassKV.New(codeLockConflict, "Error: Lock conflict") - // ErrLazyConditionPairsNotMatch is used when value in store differs from expect pairs. - ErrLazyConditionPairsNotMatch = terror.ClassKV.New(codeLazyConditionPairsNotMatch, "Error: Lazy condition pairs not match") - // ErrRetryable is used when KV store occurs RPC error or some other - // errors which SQL layer can safely retry. - ErrRetryable = terror.ClassKV.New(codeRetryable, "Error: KV error safe to retry") - // ErrCannotSetNilValue is the error when sets an empty value. - ErrCannotSetNilValue = terror.ClassKV.New(codeCantSetNilValue, "can not set nil value") - // ErrInvalidTxn is the error when commits or rollbacks in an invalid transaction. - ErrInvalidTxn = terror.ClassKV.New(codeInvalidTxn, "invalid transaction") - // ErrTxnTooLarge is the error when transaction is too large, lock time reached the maximum value. - ErrTxnTooLarge = terror.ClassKV.New(codeTxnTooLarge, "transaction is too large") - // ErrEntryTooLarge is the error when a key value entry is too large. - ErrEntryTooLarge = terror.ClassKV.New(codeEntryTooLarge, "entry is too large") - - // ErrNotCommitted is the error returned by CommitVersion when this - // transaction is not committed. - ErrNotCommitted = terror.ClassKV.New(codeNotCommitted, "this transaction has not committed") - - // ErrKeyExists returns when key is already exist. - ErrKeyExists = terror.ClassKV.New(codeKeyExists, "key already exist") - // ErrNotImplemented returns when a function is not implemented yet. - ErrNotImplemented = terror.ClassKV.New(codeNotImplemented, "not implemented") -) - -func init() { - kvMySQLErrCodes := map[terror.ErrCode]uint16{ - codeKeyExists: mysql.ErrDupEntry, - codeEntryTooLarge: mysql.ErrTooBigRowsize, - codeTxnTooLarge: mysql.ErrTxnTooLarge, - } - terror.ErrClassToMySQLCodes[terror.ClassKV] = kvMySQLErrCodes -} - -// IsRetryableError checks if the err is a fatal error and the under going operation is worth to retry. -func IsRetryableError(err error) bool { - if err == nil { - return false - } - - if ErrRetryable.Equal(err) || - ErrLockConflict.Equal(err) || - ErrConditionNotMatch.Equal(err) || - // TiKV exception message will tell you if you should retry or not - strings.Contains(err.Error(), "try again later") { - return true - } - - return false -} - -// IsErrNotFound checks if err is a kind of NotFound error. -func IsErrNotFound(err error) bool { - if ErrNotExist.Equal(err) { - return true - } - - return false -} diff --git a/vendor/github.com/pingcap/tidb/kv/fault_injection.go b/vendor/github.com/pingcap/tidb/kv/fault_injection.go deleted file mode 100644 index 1a6ac23..0000000 --- a/vendor/github.com/pingcap/tidb/kv/fault_injection.go +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import ( - "sync" - - "golang.org/x/net/context" -) - -// InjectionConfig is used for fault injections for KV components. -type InjectionConfig struct { - sync.RWMutex - getError error // kv.Get() always return this error. - commitError error // Transaction.Commit() always return this error. -} - -// SetGetError injects an error for all kv.Get() methods. -func (c *InjectionConfig) SetGetError(err error) { - c.Lock() - defer c.Unlock() - - c.getError = err -} - -// SetCommitError injects an error for all Transaction.Commit() methods. -func (c *InjectionConfig) SetCommitError(err error) { - c.Lock() - defer c.Unlock() - c.commitError = err -} - -// InjectedStore wraps a Storage with injections. -type InjectedStore struct { - Storage - cfg *InjectionConfig -} - -// NewInjectedStore creates a InjectedStore with config. -func NewInjectedStore(store Storage, cfg *InjectionConfig) Storage { - return &InjectedStore{ - Storage: store, - cfg: cfg, - } -} - -// Begin creates an injected Transaction. -func (s *InjectedStore) Begin() (Transaction, error) { - txn, err := s.Storage.Begin() - return &InjectedTransaction{ - Transaction: txn, - cfg: s.cfg, - }, err -} - -// BeginWithStartTS creates an injected Transaction with startTS. -func (s *InjectedStore) BeginWithStartTS(startTS uint64) (Transaction, error) { - txn, err := s.Storage.BeginWithStartTS(startTS) - return &InjectedTransaction{ - Transaction: txn, - cfg: s.cfg, - }, err -} - -// GetSnapshot creates an injected Snapshot. -func (s *InjectedStore) GetSnapshot(ver Version) (Snapshot, error) { - snapshot, err := s.Storage.GetSnapshot(ver) - return &InjectedSnapshot{ - Snapshot: snapshot, - cfg: s.cfg, - }, err -} - -// InjectedTransaction wraps a Transaction with injections. -type InjectedTransaction struct { - Transaction - cfg *InjectionConfig -} - -// Get returns an error if cfg.getError is set. -func (t *InjectedTransaction) Get(k Key) ([]byte, error) { - t.cfg.RLock() - defer t.cfg.RUnlock() - if t.cfg.getError != nil { - return nil, t.cfg.getError - } - return t.Transaction.Get(k) -} - -// Commit returns an error if cfg.commitError is set. -func (t *InjectedTransaction) Commit(ctx context.Context) error { - t.cfg.RLock() - defer t.cfg.RUnlock() - if t.cfg.commitError != nil { - return t.cfg.commitError - } - return t.Transaction.Commit(ctx) -} - -// GetSnapshot implements Transaction GetSnapshot method. -func (t *InjectedTransaction) GetSnapshot() Snapshot { - return &InjectedSnapshot{ - Snapshot: t.Transaction.GetSnapshot(), - cfg: t.cfg, - } -} - -// InjectedSnapshot wraps a Snapshot with injections. -type InjectedSnapshot struct { - Snapshot - cfg *InjectionConfig -} - -// Get returns an error if cfg.getError is set. -func (t *InjectedSnapshot) Get(k Key) ([]byte, error) { - t.cfg.RLock() - defer t.cfg.RUnlock() - if t.cfg.getError != nil { - return nil, t.cfg.getError - } - return t.Snapshot.Get(k) -} - -// BatchGet returns an error if cfg.getError is set. -func (t *InjectedSnapshot) BatchGet(keys []Key) (map[string][]byte, error) { - t.cfg.RLock() - defer t.cfg.RUnlock() - if t.cfg.getError != nil { - return nil, t.cfg.getError - } - return t.Snapshot.BatchGet(keys) -} diff --git a/vendor/github.com/pingcap/tidb/kv/iter.go b/vendor/github.com/pingcap/tidb/kv/iter.go deleted file mode 100644 index 2c337be..0000000 --- a/vendor/github.com/pingcap/tidb/kv/iter.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import "github.com/juju/errors" - -// NextUntil applies FnKeyCmp to each entry of the iterator until meets some condition. -// It will stop when fn returns true, or iterator is invalid or an error occurs. -func NextUntil(it Iterator, fn FnKeyCmp) error { - var err error - for it.Valid() && !fn(it.Key()) { - err = it.Next() - if err != nil { - return errors.Trace(err) - } - } - return nil -} diff --git a/vendor/github.com/pingcap/tidb/kv/key.go b/vendor/github.com/pingcap/tidb/kv/key.go deleted file mode 100644 index 8f80bb7..0000000 --- a/vendor/github.com/pingcap/tidb/kv/key.go +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import "bytes" - -// Key represents high-level Key type. -type Key []byte - -// Next returns the next key in byte-order. -func (k Key) Next() Key { - // add 0x0 to the end of key - buf := make([]byte, len([]byte(k))+1) - copy(buf, []byte(k)) - return buf -} - -// PrefixNext returns the next prefix key. -// -// Assume there are keys like: -// -// rowkey1 -// rowkey1_column1 -// rowkey1_column2 -// rowKey2 -// -// If we seek 'rowkey1' Next, we will get 'rowkey1_column1'. -// If we seek 'rowkey1' PrefixNext, we will get 'rowkey2'. -func (k Key) PrefixNext() Key { - buf := make([]byte, len([]byte(k))) - copy(buf, []byte(k)) - var i int - for i = len(k) - 1; i >= 0; i-- { - buf[i]++ - if buf[i] != 0 { - break - } - } - if i == -1 { - copy(buf, k) - buf = append(buf, 0) - } - return buf -} - -// Cmp returns the comparison result of two key. -// The result will be 0 if a==b, -1 if a < b, and +1 if a > b. -func (k Key) Cmp(another Key) int { - return bytes.Compare(k, another) -} - -// HasPrefix tests whether the Key begins with prefix. -func (k Key) HasPrefix(prefix Key) bool { - return bytes.HasPrefix(k, prefix) -} - -// Clone returns a copy of the Key. -func (k Key) Clone() Key { - return append([]byte(nil), k...) -} - -// KeyRange represents a range where StartKey <= key < EndKey. -type KeyRange struct { - StartKey Key - EndKey Key -} - -// IsPoint checks if the key range represents a point. -func (r *KeyRange) IsPoint() bool { - return bytes.Equal(r.StartKey.PrefixNext(), r.EndKey) -} - -// EncodedKey represents encoded key in low-level storage engine. -type EncodedKey []byte - -// Cmp returns the comparison result of two key. -// The result will be 0 if a==b, -1 if a < b, and +1 if a > b. -func (k EncodedKey) Cmp(another EncodedKey) int { - return bytes.Compare(k, another) -} - -// Next returns the next key in byte-order. -func (k EncodedKey) Next() EncodedKey { - return EncodedKey(bytes.Join([][]byte{k, Key{0}}, nil)) -} diff --git a/vendor/github.com/pingcap/tidb/kv/kv.go b/vendor/github.com/pingcap/tidb/kv/kv.go deleted file mode 100644 index 1dde584..0000000 --- a/vendor/github.com/pingcap/tidb/kv/kv.go +++ /dev/null @@ -1,275 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import ( - "github.com/pingcap/tidb/store/tikv/oracle" - "golang.org/x/net/context" -) - -// Transaction options -const ( - // PresumeKeyNotExists indicates that when dealing with a Get operation but failing to read data from cache, - // we presume that the key does not exist in Store. The actual existence will be checked before the - // transaction's commit. - // This option is an optimization for frequent checks during a transaction, e.g. batch inserts. - PresumeKeyNotExists Option = iota + 1 - // PresumeKeyNotExistsError is the option key for error. - // When PresumeKeyNotExists is set and condition is not match, should throw the error. - PresumeKeyNotExistsError - // BinlogInfo contains the binlog data and client. - BinlogInfo - // Skip existing check when "prewrite". - SkipCheckForWrite - // SchemaLeaseChecker is used for schema lease check. - SchemaLeaseChecker - // IsolationLevel sets isolation level for current transaction. The default level is SI. - IsolationLevel - // Priority marks the priority of this transaction. - Priority - // NotFillCache makes this request do not touch the LRU cache of the underlying storage. - NotFillCache - // SyncLog decides whether the WAL(write-ahead log) of this request should be synchronized. - SyncLog - // ForUpdate option would be set to true in 'select for update' transaction. - ForUpdate -) - -// Priority value for transaction priority. -const ( - PriorityNormal = iota - PriorityLow - PriorityHigh -) - -// IsoLevel is the transaction's isolation level. -type IsoLevel int - -const ( - // SI stands for 'snapshot isolation'. - SI IsoLevel = iota - // RC stands for 'read committed'. - RC -) - -// Those limits is enforced to make sure the transaction can be well handled by TiKV. -var ( - // TxnEntrySizeLimit is limit of single entry size (len(key) + len(value)). - TxnEntrySizeLimit = 6 * 1024 * 1024 - // TxnEntryCountLimit is limit of number of entries in the MemBuffer. - TxnEntryCountLimit uint64 = 300 * 1000 - // TxnTotalSizeLimit is limit of the sum of all entry size. - TxnTotalSizeLimit = 100 * 1024 * 1024 -) - -// Retriever is the interface wraps the basic Get and Seek methods. -type Retriever interface { - // Get gets the value for key k from kv store. - // If corresponding kv pair does not exist, it returns nil and ErrNotExist. - Get(k Key) ([]byte, error) - // Seek creates an Iterator positioned on the first entry that k <= entry's key. - // If such entry is not found, it returns an invalid Iterator with no error. - // The Iterator must be Closed after use. - Seek(k Key) (Iterator, error) - - // SeekReverse creates a reversed Iterator positioned on the first entry which key is less than k. - // The returned iterator will iterate from greater key to smaller key. - // If k is nil, the returned iterator will be positioned at the last key. - SeekReverse(k Key) (Iterator, error) -} - -// Mutator is the interface wraps the basic Set and Delete methods. -type Mutator interface { - // Set sets the value for key k as v into kv store. - // v must NOT be nil or empty, otherwise it returns ErrCannotSetNilValue. - Set(k Key, v []byte) error - // Delete removes the entry for key k from kv store. - Delete(k Key) error -} - -// RetrieverMutator is the interface that groups Retriever and Mutator interfaces. -type RetrieverMutator interface { - Retriever - Mutator -} - -// MemBuffer is an in-memory kv collection, can be used to buffer write operations. -type MemBuffer interface { - RetrieverMutator - // Size returns sum of keys and values length. - Size() int - // Len returns the number of entries in the DB. - Len() int - // Reset cleanup the MemBuffer - Reset() - // SetCap sets the MemBuffer capability, to reduce memory allocations. - // Please call it before you use the MemBuffer, otherwise it will not works. - SetCap(cap int) -} - -// Transaction defines the interface for operations inside a Transaction. -// This is not thread safe. -type Transaction interface { - MemBuffer - // Commit commits the transaction operations to KV store. - Commit(context.Context) error - // Rollback undoes the transaction operations to KV store. - Rollback() error - // String implements fmt.Stringer interface. - String() string - // LockKeys tries to lock the entries with the keys in KV store. - LockKeys(keys ...Key) error - // SetOption sets an option with a value, when val is nil, uses the default - // value of this option. - SetOption(opt Option, val interface{}) - // DelOption deletes an option. - DelOption(opt Option) - // IsReadOnly checks if the transaction has only performed read operations. - IsReadOnly() bool - // StartTS returns the transaction start timestamp. - StartTS() uint64 - // Valid returns if the transaction is valid. - // A transaction become invalid after commit or rollback. - Valid() bool - // GetMemBuffer return the MemBuffer binding to this transaction. - GetMemBuffer() MemBuffer - // GetSnapshot returns the snapshot of this transaction. - GetSnapshot() Snapshot - // SetVars sets variables to the transaction. - SetVars(vars *Variables) -} - -// Client is used to send request to KV layer. -type Client interface { - // Send sends request to KV layer, returns a Response. - Send(ctx context.Context, req *Request, vars *Variables) Response - - // IsRequestTypeSupported checks if reqType and subType is supported. - IsRequestTypeSupported(reqType, subType int64) bool -} - -// ReqTypes. -const ( - ReqTypeSelect = 101 - ReqTypeIndex = 102 - ReqTypeDAG = 103 - ReqTypeAnalyze = 104 - ReqTypeChecksum = 105 - - ReqSubTypeBasic = 0 - ReqSubTypeDesc = 10000 - ReqSubTypeGroupBy = 10001 - ReqSubTypeTopN = 10002 - ReqSubTypeSignature = 10003 - ReqSubTypeAnalyzeIdx = 10004 - ReqSubTypeAnalyzeCol = 10005 -) - -// Request represents a kv request. -type Request struct { - // Tp is the request type. - Tp int64 - StartTs uint64 - Data []byte - KeyRanges []KeyRange - // KeepOrder is true, if the response should be returned in order. - KeepOrder bool - // Desc is true, if the request is sent in descending order. - Desc bool - // Concurrency is 1, if it only sends the request to a single storage unit when - // ResponseIterator.Next is called. If concurrency is greater than 1, the request will be - // sent to multiple storage units concurrently. - Concurrency int - // IsolationLevel is the isolation level, default is SI. - IsolationLevel IsoLevel - // Priority is the priority of this KV request, its value may be PriorityNormal/PriorityLow/PriorityHigh. - Priority int - // NotFillCache makes this request do not touch the LRU cache of the underlying storage. - NotFillCache bool - // SyncLog decides whether the WAL(write-ahead log) of this request should be synchronized. - SyncLog bool - // Streaming indicates using streaming API for this request, result in that one Next() - // call would not corresponds to a whole region result. - Streaming bool -} - -// ResultSubset represents a result subset from a single storage unit. -// TODO: Find a better interface for ResultSubset that can reuse bytes. -type ResultSubset interface { - // GetData gets the data. - GetData() []byte - // GetStartKey gets the start key. - GetStartKey() Key -} - -// Response represents the response returned from KV layer. -type Response interface { - // Next returns a resultSubset from a single storage unit. - // When full result set is returned, nil is returned. - Next(ctx context.Context) (resultSubset ResultSubset, err error) - // Close response. - Close() error -} - -// Snapshot defines the interface for the snapshot fetched from KV store. -type Snapshot interface { - Retriever - // BatchGet gets a batch of values from snapshot. - BatchGet(keys []Key) (map[string][]byte, error) - // SetPriority snapshot set the priority - SetPriority(priority int) -} - -// Driver is the interface that must be implemented by a KV storage. -type Driver interface { - // Open returns a new Storage. - // The path is the string for storage specific format. - Open(path string) (Storage, error) -} - -// Storage defines the interface for storage. -// Isolation should be at least SI(SNAPSHOT ISOLATION) -type Storage interface { - // Begin transaction - Begin() (Transaction, error) - // BeginWithStartTS begins transaction with startTS. - BeginWithStartTS(startTS uint64) (Transaction, error) - // GetSnapshot gets a snapshot that is able to read any data which data is <= ver. - // if ver is MaxVersion or > current max committed version, we will use current version for this snapshot. - GetSnapshot(ver Version) (Snapshot, error) - // GetClient gets a client instance. - GetClient() Client - // Close store - Close() error - // UUID return a unique ID which represents a Storage. - UUID() string - // CurrentVersion returns current max committed version. - CurrentVersion() (Version, error) - // GetOracle gets a timestamp oracle client. - GetOracle() oracle.Oracle - // SupportDeleteRange gets the storage support delete range or not. - SupportDeleteRange() (supported bool) -} - -// FnKeyCmp is the function for iterator the keys -type FnKeyCmp func(key Key) bool - -// Iterator is the interface for a iterator on KV store. -type Iterator interface { - Valid() bool - Key() Key - Value() []byte - Next() error - Close() -} diff --git a/vendor/github.com/pingcap/tidb/kv/memdb_buffer.go b/vendor/github.com/pingcap/tidb/kv/memdb_buffer.go deleted file mode 100644 index 069e243..0000000 --- a/vendor/github.com/pingcap/tidb/kv/memdb_buffer.go +++ /dev/null @@ -1,181 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Copyright 2015 Wenbin Xiao -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import ( - "sync/atomic" - - "github.com/juju/errors" - "github.com/pingcap/goleveldb/leveldb" - "github.com/pingcap/goleveldb/leveldb/comparer" - "github.com/pingcap/goleveldb/leveldb/iterator" - "github.com/pingcap/goleveldb/leveldb/memdb" - "github.com/pingcap/goleveldb/leveldb/util" - "github.com/pingcap/tidb/terror" -) - -// memDbBuffer implements the MemBuffer interface. -type memDbBuffer struct { - db *memdb.DB - entrySizeLimit int - bufferLenLimit uint64 - bufferSizeLimit int -} - -type memDbIter struct { - iter iterator.Iterator - reverse bool -} - -// NewMemDbBuffer creates a new memDbBuffer. -func NewMemDbBuffer(cap int) MemBuffer { - return &memDbBuffer{ - db: memdb.New(comparer.DefaultComparer, cap), - entrySizeLimit: TxnEntrySizeLimit, - bufferLenLimit: atomic.LoadUint64(&TxnEntryCountLimit), - bufferSizeLimit: TxnTotalSizeLimit, - } -} - -// Seek creates an Iterator. -func (m *memDbBuffer) Seek(k Key) (Iterator, error) { - var i Iterator - if k == nil { - i = &memDbIter{iter: m.db.NewIterator(&util.Range{}), reverse: false} - } else { - i = &memDbIter{iter: m.db.NewIterator(&util.Range{Start: []byte(k)}), reverse: false} - } - err := i.Next() - if err != nil { - return nil, errors.Trace(err) - } - return i, nil -} - -func (m *memDbBuffer) SetCap(cap int) { - -} - -func (m *memDbBuffer) SeekReverse(k Key) (Iterator, error) { - var i *memDbIter - if k == nil { - i = &memDbIter{iter: m.db.NewIterator(&util.Range{}), reverse: true} - } else { - i = &memDbIter{iter: m.db.NewIterator(&util.Range{Limit: []byte(k)}), reverse: true} - } - i.iter.Last() - return i, nil -} - -// Get returns the value associated with key. -func (m *memDbBuffer) Get(k Key) ([]byte, error) { - v, err := m.db.Get(k) - if terror.ErrorEqual(err, leveldb.ErrNotFound) { - return nil, ErrNotExist - } - return v, nil -} - -// Set associates key with value. -func (m *memDbBuffer) Set(k Key, v []byte) error { - if len(v) == 0 { - return errors.Trace(ErrCannotSetNilValue) - } - if len(k)+len(v) > m.entrySizeLimit { - return ErrEntryTooLarge.Gen("entry too large, size: %d", len(k)+len(v)) - } - - err := m.db.Put(k, v) - if m.Size() > m.bufferSizeLimit { - return ErrTxnTooLarge.Gen("transaction too large, size:%d", m.Size()) - } - if m.Len() > int(m.bufferLenLimit) { - return ErrTxnTooLarge.Gen("transaction too large, len:%d", m.Len()) - } - return errors.Trace(err) -} - -// Delete removes the entry from buffer with provided key. -func (m *memDbBuffer) Delete(k Key) error { - err := m.db.Put(k, nil) - return errors.Trace(err) -} - -// Size returns sum of keys and values length. -func (m *memDbBuffer) Size() int { - return m.db.Size() -} - -// Len returns the number of entries in the DB. -func (m *memDbBuffer) Len() int { - return m.db.Len() -} - -// Reset cleanup the MemBuffer. -func (m *memDbBuffer) Reset() { - m.db.Reset() -} - -// Next implements the Iterator Next. -func (i *memDbIter) Next() error { - if i.reverse { - i.iter.Prev() - } else { - i.iter.Next() - } - return nil -} - -// Valid implements the Iterator Valid. -func (i *memDbIter) Valid() bool { - return i.iter.Valid() -} - -// Key implements the Iterator Key. -func (i *memDbIter) Key() Key { - return i.iter.Key() -} - -// Value implements the Iterator Value. -func (i *memDbIter) Value() []byte { - return i.iter.Value() -} - -// Close Implements the Iterator Close. -func (i *memDbIter) Close() { - i.iter.Release() -} - -// WalkMemBuffer iterates all buffered kv pairs in memBuf -func WalkMemBuffer(memBuf MemBuffer, f func(k Key, v []byte) error) error { - iter, err := memBuf.Seek(nil) - if err != nil { - return errors.Trace(err) - } - - defer iter.Close() - for iter.Valid() { - if err = f(iter.Key(), iter.Value()); err != nil { - return errors.Trace(err) - } - err = iter.Next() - if err != nil { - return errors.Trace(err) - } - } - - return nil -} diff --git a/vendor/github.com/pingcap/tidb/kv/mock.go b/vendor/github.com/pingcap/tidb/kv/mock.go deleted file mode 100644 index d3ca739..0000000 --- a/vendor/github.com/pingcap/tidb/kv/mock.go +++ /dev/null @@ -1,220 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import ( - "github.com/juju/errors" - "github.com/pingcap/tidb/store/tikv/oracle" - "golang.org/x/net/context" -) - -// mockTxn is a txn that returns a retryAble error when called Commit. -type mockTxn struct { - opts map[Option]interface{} - valid bool -} - -// Commit always returns a retryable error. -func (t *mockTxn) Commit(ctx context.Context) error { - return ErrRetryable -} - -func (t *mockTxn) Rollback() error { - t.valid = false - return nil -} - -func (t *mockTxn) String() string { - return "" -} - -func (t *mockTxn) LockKeys(keys ...Key) error { - return nil -} - -func (t *mockTxn) SetOption(opt Option, val interface{}) { - t.opts[opt] = val - return -} - -func (t *mockTxn) DelOption(opt Option) { - delete(t.opts, opt) - return -} - -func (t *mockTxn) GetOption(opt Option) interface{} { - return t.opts[opt] -} - -func (t *mockTxn) IsReadOnly() bool { - return true -} - -func (t *mockTxn) StartTS() uint64 { - return uint64(0) -} -func (t *mockTxn) Get(k Key) ([]byte, error) { - return nil, nil -} - -func (t *mockTxn) Seek(k Key) (Iterator, error) { - return nil, nil -} - -func (t *mockTxn) SeekReverse(k Key) (Iterator, error) { - return nil, nil -} - -func (t *mockTxn) Set(k Key, v []byte) error { - return nil -} -func (t *mockTxn) Delete(k Key) error { - return nil -} - -func (t *mockTxn) Valid() bool { - return t.valid -} - -func (t *mockTxn) Len() int { - return 0 -} - -func (t *mockTxn) Size() int { - return 0 -} - -func (t *mockTxn) GetMemBuffer() MemBuffer { - return nil -} - -func (t *mockTxn) GetSnapshot() Snapshot { - return &mockSnapshot{ - store: NewMemDbBuffer(DefaultTxnMembufCap), - } -} - -func (t *mockTxn) SetCap(cap int) { - -} - -func (t *mockTxn) Reset() { - t.valid = false -} - -func (t *mockTxn) SetVars(vars *Variables) { - -} - -// NewMockTxn new a mockTxn. -func NewMockTxn() Transaction { - return &mockTxn{ - opts: make(map[Option]interface{}), - valid: true, - } -} - -// mockStorage is used to start a must commit-failed txn. -type mockStorage struct { -} - -func (s *mockStorage) Begin() (Transaction, error) { - tx := &mockTxn{ - opts: make(map[Option]interface{}), - valid: true, - } - return tx, nil -} - -// BeginWithStartTS begins a transaction with startTS. -func (s *mockStorage) BeginWithStartTS(startTS uint64) (Transaction, error) { - return s.Begin() -} - -func (s *mockStorage) GetSnapshot(ver Version) (Snapshot, error) { - return &mockSnapshot{ - store: NewMemDbBuffer(DefaultTxnMembufCap), - }, nil -} - -func (s *mockStorage) Close() error { - return nil -} - -func (s *mockStorage) UUID() string { - return "" -} - -// CurrentVersion returns current max committed version. -func (s *mockStorage) CurrentVersion() (Version, error) { - return NewVersion(1), nil -} - -func (s *mockStorage) GetClient() Client { - return nil -} - -func (s *mockStorage) GetOracle() oracle.Oracle { - return nil -} - -func (s *mockStorage) SupportDeleteRange() (supported bool) { - return false -} - -// MockTxn is used for test cases that need more interfaces than Transaction. -type MockTxn interface { - Transaction - GetOption(opt Option) interface{} -} - -// NewMockStorage creates a new mockStorage. -func NewMockStorage() Storage { - return &mockStorage{} -} - -type mockSnapshot struct { - store MemBuffer -} - -func (s *mockSnapshot) Get(k Key) ([]byte, error) { - return s.store.Get(k) -} - -func (s *mockSnapshot) SetPriority(priority int) { - -} - -func (s *mockSnapshot) BatchGet(keys []Key) (map[string][]byte, error) { - m := make(map[string][]byte) - for _, k := range keys { - v, err := s.store.Get(k) - if IsErrNotFound(err) { - continue - } - if err != nil { - return nil, errors.Trace(err) - } - m[string(k)] = v - } - return m, nil -} - -func (s *mockSnapshot) Seek(k Key) (Iterator, error) { - return s.store.Seek(k) -} - -func (s *mockSnapshot) SeekReverse(k Key) (Iterator, error) { - return s.store.SeekReverse(k) -} diff --git a/vendor/github.com/pingcap/tidb/kv/txn.go b/vendor/github.com/pingcap/tidb/kv/txn.go deleted file mode 100644 index da753ca..0000000 --- a/vendor/github.com/pingcap/tidb/kv/txn.go +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import ( - "math" - "math/rand" - "time" - - "github.com/juju/errors" - "github.com/pingcap/tidb/terror" - log "github.com/sirupsen/logrus" - "golang.org/x/net/context" -) - -// ContextKey is the type of context's key -type ContextKey string - -// RunInNewTxn will run the f in a new transaction environment. -func RunInNewTxn(store Storage, retryable bool, f func(txn Transaction) error) error { - var ( - err error - originalTxnTS uint64 - txn Transaction - ) - for i := uint(0); i < maxRetryCnt; i++ { - txn, err = store.Begin() - if err != nil { - log.Errorf("[kv] RunInNewTxn error - %v", err) - return errors.Trace(err) - } - - // originalTxnTS is used to trace the original transaction when the function is retryable. - if i == 0 { - originalTxnTS = txn.StartTS() - } - - err = f(txn) - if err != nil { - err1 := txn.Rollback() - terror.Log(errors.Trace(err1)) - if retryable && IsRetryableError(err) { - log.Warnf("[kv] Retry txn %v original txn %v err %v", txn, originalTxnTS, err) - continue - } - return errors.Trace(err) - } - - err = txn.Commit(context.Background()) - if err == nil { - break - } - if retryable && IsRetryableError(err) { - log.Warnf("[kv] Retry txn %v original txn %v err %v", txn, originalTxnTS, err) - err1 := txn.Rollback() - terror.Log(errors.Trace(err1)) - BackOff(i) - continue - } - return errors.Trace(err) - } - return errors.Trace(err) -} - -var ( - // maxRetryCnt represents maximum retry times in RunInNewTxn. - maxRetryCnt uint = 100 - // retryBackOffBase is the initial duration, in microsecond, a failed transaction stays dormancy before it retries - retryBackOffBase = 1 - // retryBackOffCap is the max amount of duration, in microsecond, a failed transaction stays dormancy before it retries - retryBackOffCap = 100 -) - -// BackOff Implements exponential backoff with full jitter. -// Returns real back off time in microsecond. -// See http://www.awsarchitectureblog.com/2015/03/backoff.html. -func BackOff(attempts uint) int { - upper := int(math.Min(float64(retryBackOffCap), float64(retryBackOffBase)*math.Pow(2.0, float64(attempts)))) - sleep := time.Duration(rand.Intn(upper)) * time.Millisecond - time.Sleep(sleep) - return int(sleep) -} - -// BatchGetValues gets values in batch. -// The values from buffer in transaction and the values from the storage node are merged together. -func BatchGetValues(txn Transaction, keys []Key) (map[string][]byte, error) { - if txn.IsReadOnly() { - return txn.GetSnapshot().BatchGet(keys) - } - bufferValues := make([][]byte, len(keys)) - shrinkKeys := make([]Key, 0, len(keys)) - for i, key := range keys { - val, err := txn.GetMemBuffer().Get(key) - if IsErrNotFound(err) { - shrinkKeys = append(shrinkKeys, key) - continue - } - if err != nil { - return nil, errors.Trace(err) - } - if len(val) != 0 { - bufferValues[i] = val - } - } - storageValues, err := txn.GetSnapshot().BatchGet(shrinkKeys) - if err != nil { - return nil, errors.Trace(err) - } - for i, key := range keys { - if bufferValues[i] == nil { - continue - } - storageValues[string(key)] = bufferValues[i] - } - return storageValues, nil -} diff --git a/vendor/github.com/pingcap/tidb/kv/union_iter.go b/vendor/github.com/pingcap/tidb/kv/union_iter.go deleted file mode 100644 index 6ee5065..0000000 --- a/vendor/github.com/pingcap/tidb/kv/union_iter.go +++ /dev/null @@ -1,185 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import ( - "github.com/juju/errors" - log "github.com/sirupsen/logrus" -) - -// UnionIter is the iterator on an UnionStore. -type UnionIter struct { - dirtyIt Iterator - snapshotIt Iterator - - dirtyValid bool - snapshotValid bool - - curIsDirty bool - isValid bool - reverse bool -} - -// NewUnionIter returns a union iterator for BufferStore. -func NewUnionIter(dirtyIt Iterator, snapshotIt Iterator, reverse bool) (*UnionIter, error) { - it := &UnionIter{ - dirtyIt: dirtyIt, - snapshotIt: snapshotIt, - dirtyValid: dirtyIt.Valid(), - snapshotValid: snapshotIt.Valid(), - reverse: reverse, - } - err := it.updateCur() - if err != nil { - return nil, errors.Trace(err) - } - return it, nil -} - -// dirtyNext makes iter.dirtyIt go and update valid status. -func (iter *UnionIter) dirtyNext() error { - err := iter.dirtyIt.Next() - iter.dirtyValid = iter.dirtyIt.Valid() - return errors.Trace(err) -} - -// snapshotNext makes iter.snapshotIt go and update valid status. -func (iter *UnionIter) snapshotNext() error { - err := iter.snapshotIt.Next() - iter.snapshotValid = iter.snapshotIt.Valid() - return errors.Trace(err) -} - -func (iter *UnionIter) updateCur() error { - iter.isValid = true - for { - if !iter.dirtyValid && !iter.snapshotValid { - iter.isValid = false - break - } - - if !iter.dirtyValid { - iter.curIsDirty = false - break - } - - if !iter.snapshotValid { - iter.curIsDirty = true - // if delete it - if len(iter.dirtyIt.Value()) == 0 { - if err := iter.dirtyNext(); err != nil { - return errors.Trace(err) - } - continue - } - break - } - - // both valid - if iter.snapshotValid && iter.dirtyValid { - snapshotKey := iter.snapshotIt.Key() - dirtyKey := iter.dirtyIt.Key() - cmp := dirtyKey.Cmp(snapshotKey) - if iter.reverse { - cmp = -cmp - } - // if equal, means both have value - if cmp == 0 { - if len(iter.dirtyIt.Value()) == 0 { - // snapshot has a record, but txn says we have deleted it - // just go next - if err := iter.dirtyNext(); err != nil { - return errors.Trace(err) - } - if err := iter.snapshotNext(); err != nil { - return errors.Trace(err) - } - continue - } - // both go next - if err := iter.snapshotNext(); err != nil { - return errors.Trace(err) - } - iter.curIsDirty = true - break - } else if cmp > 0 { - // record from snapshot comes first - iter.curIsDirty = false - break - } else { - // record from dirty comes first - if len(iter.dirtyIt.Value()) == 0 { - log.Warnf("[kv] delete a record not exists? k = %q", iter.dirtyIt.Key()) - // jump over this deletion - if err := iter.dirtyNext(); err != nil { - return errors.Trace(err) - } - continue - } - iter.curIsDirty = true - break - } - } - } - return nil -} - -// Next implements the Iterator Next interface. -func (iter *UnionIter) Next() error { - var err error - if !iter.curIsDirty { - err = iter.snapshotNext() - } else { - err = iter.dirtyNext() - } - if err != nil { - return errors.Trace(err) - } - err = iter.updateCur() - return errors.Trace(err) -} - -// Value implements the Iterator Value interface. -// Multi columns -func (iter *UnionIter) Value() []byte { - if !iter.curIsDirty { - return iter.snapshotIt.Value() - } - return iter.dirtyIt.Value() -} - -// Key implements the Iterator Key interface. -func (iter *UnionIter) Key() Key { - if !iter.curIsDirty { - return iter.snapshotIt.Key() - } - return iter.dirtyIt.Key() -} - -// Valid implements the Iterator Valid interface. -func (iter *UnionIter) Valid() bool { - return iter.isValid -} - -// Close implements the Iterator Close interface. -func (iter *UnionIter) Close() { - if iter.snapshotIt != nil { - iter.snapshotIt.Close() - iter.snapshotIt = nil - } - if iter.dirtyIt != nil { - iter.dirtyIt.Close() - iter.dirtyIt = nil - } -} diff --git a/vendor/github.com/pingcap/tidb/kv/union_store.go b/vendor/github.com/pingcap/tidb/kv/union_store.go deleted file mode 100644 index 7823528..0000000 --- a/vendor/github.com/pingcap/tidb/kv/union_store.go +++ /dev/null @@ -1,266 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import ( - "bytes" - - "github.com/juju/errors" -) - -// UnionStore is a store that wraps a snapshot for read and a BufferStore for buffered write. -// Also, it provides some transaction related utilities. -type UnionStore interface { - MemBuffer - // CheckLazyConditionPairs loads all lazy values from store then checks if all values are matched. - // Lazy condition pairs should be checked before transaction commit. - CheckLazyConditionPairs() error - // WalkBuffer iterates all buffered kv pairs. - WalkBuffer(f func(k Key, v []byte) error) error - // SetOption sets an option with a value, when val is nil, uses the default - // value of this option. - SetOption(opt Option, val interface{}) - // DelOption deletes an option. - DelOption(opt Option) - // GetOption gets an option. - GetOption(opt Option) interface{} - // GetMemBuffer return the MemBuffer binding to this UnionStore. - GetMemBuffer() MemBuffer -} - -// Option is used for customizing kv store's behaviors during a transaction. -type Option int - -// Options is an interface of a set of options. Each option is associated with a value. -type Options interface { - // Get gets an option value. - Get(opt Option) (v interface{}, ok bool) -} - -// conditionPair is used to store lazy check condition. -// If condition not match (value is not equal as expected one), returns err. -type conditionPair struct { - key Key - value []byte - err error -} - -// unionStore is an in-memory Store which contains a buffer for write and a -// snapshot for read. -type unionStore struct { - *BufferStore - snapshot Snapshot // for read - lazyConditionPairs map[string]*conditionPair // for delay check - opts options -} - -// NewUnionStore builds a new UnionStore. -func NewUnionStore(snapshot Snapshot) UnionStore { - return &unionStore{ - BufferStore: NewBufferStore(snapshot, DefaultTxnMembufCap), - snapshot: snapshot, - lazyConditionPairs: make(map[string]*conditionPair), - opts: make(map[Option]interface{}), - } -} - -// invalidIterator implements Iterator interface. -// It is used for read-only transaction which has no data written, the iterator is always invalid. -type invalidIterator struct{} - -func (it invalidIterator) Valid() bool { - return false -} - -func (it invalidIterator) Next() error { - return nil -} - -func (it invalidIterator) Key() Key { - return nil -} - -func (it invalidIterator) Value() []byte { - return nil -} - -func (it invalidIterator) Close() {} - -// lazyMemBuffer wraps a MemBuffer which is to be initialized when it is modified. -type lazyMemBuffer struct { - mb MemBuffer - cap int -} - -func (lmb *lazyMemBuffer) Get(k Key) ([]byte, error) { - if lmb.mb == nil { - return nil, errors.Trace(ErrNotExist) - } - - return lmb.mb.Get(k) -} - -func (lmb *lazyMemBuffer) Set(key Key, value []byte) error { - if lmb.mb == nil { - lmb.mb = NewMemDbBuffer(lmb.cap) - } - - return lmb.mb.Set(key, value) -} - -func (lmb *lazyMemBuffer) Delete(k Key) error { - if lmb.mb == nil { - lmb.mb = NewMemDbBuffer(lmb.cap) - } - - return lmb.mb.Delete(k) -} - -func (lmb *lazyMemBuffer) Seek(k Key) (Iterator, error) { - if lmb.mb == nil { - return invalidIterator{}, nil - } - return lmb.mb.Seek(k) -} - -func (lmb *lazyMemBuffer) SeekReverse(k Key) (Iterator, error) { - if lmb.mb == nil { - return invalidIterator{}, nil - } - return lmb.mb.SeekReverse(k) -} - -func (lmb *lazyMemBuffer) Size() int { - if lmb.mb == nil { - return 0 - } - return lmb.mb.Size() -} - -func (lmb *lazyMemBuffer) Len() int { - if lmb.mb == nil { - return 0 - } - return lmb.mb.Len() -} - -func (lmb *lazyMemBuffer) Reset() { - if lmb.mb != nil { - lmb.mb.Reset() - } -} - -func (lmb *lazyMemBuffer) SetCap(cap int) { - lmb.cap = cap -} - -// Get implements the Retriever interface. -func (us *unionStore) Get(k Key) ([]byte, error) { - v, err := us.MemBuffer.Get(k) - if IsErrNotFound(err) { - if _, ok := us.opts.Get(PresumeKeyNotExists); ok { - e, ok := us.opts.Get(PresumeKeyNotExistsError) - if ok && e != nil { - us.markLazyConditionPair(k, nil, e.(error)) - } else { - us.markLazyConditionPair(k, nil, ErrKeyExists) - } - return nil, errors.Trace(ErrNotExist) - } - } - if IsErrNotFound(err) { - v, err = us.BufferStore.r.Get(k) - } - if err != nil { - return v, errors.Trace(err) - } - if len(v) == 0 { - return nil, errors.Trace(ErrNotExist) - } - return v, nil -} - -// markLazyConditionPair marks a kv pair for later check. -// If condition not match, should return e as error. -func (us *unionStore) markLazyConditionPair(k Key, v []byte, e error) { - us.lazyConditionPairs[string(k)] = &conditionPair{ - key: k.Clone(), - value: v, - err: e, - } -} - -// CheckLazyConditionPairs implements the UnionStore interface. -func (us *unionStore) CheckLazyConditionPairs() error { - if len(us.lazyConditionPairs) == 0 { - return nil - } - keys := make([]Key, 0, len(us.lazyConditionPairs)) - for _, v := range us.lazyConditionPairs { - keys = append(keys, v.key) - } - values, err := us.snapshot.BatchGet(keys) - if err != nil { - return errors.Trace(err) - } - - for k, v := range us.lazyConditionPairs { - if len(v.value) == 0 { - if _, exist := values[k]; exist { - return errors.Trace(v.err) - } - } else { - if bytes.Compare(values[k], v.value) != 0 { - return errors.Trace(ErrLazyConditionPairsNotMatch) - } - } - } - return nil -} - -// SetOption implements the UnionStore SetOption interface. -func (us *unionStore) SetOption(opt Option, val interface{}) { - us.opts[opt] = val -} - -// DelOption implements the UnionStore DelOption interface. -func (us *unionStore) DelOption(opt Option) { - delete(us.opts, opt) -} - -// GetOption implements the UnionStore GetOption interface. -func (us *unionStore) GetOption(opt Option) interface{} { - return us.opts[opt] -} - -// GetMemBuffer return the MemBuffer binding to this UnionStore. -func (us *unionStore) GetMemBuffer() MemBuffer { - return us.BufferStore.MemBuffer -} - -// SetCap sets membuffer capability. -func (us *unionStore) SetCap(cap int) { - us.BufferStore.SetCap(cap) -} - -func (us *unionStore) Reset() { - us.BufferStore.Reset() -} - -type options map[Option]interface{} - -func (opts options) Get(opt Option) (interface{}, bool) { - v, ok := opts[opt] - return v, ok -} diff --git a/vendor/github.com/pingcap/tidb/kv/utils.go b/vendor/github.com/pingcap/tidb/kv/utils.go deleted file mode 100644 index 8fb08d1..0000000 --- a/vendor/github.com/pingcap/tidb/kv/utils.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import ( - "strconv" - - "github.com/juju/errors" -) - -// IncInt64 increases the value for key k in kv store by step. -func IncInt64(rm RetrieverMutator, k Key, step int64) (int64, error) { - val, err := rm.Get(k) - if IsErrNotFound(err) { - err = rm.Set(k, []byte(strconv.FormatInt(step, 10))) - if err != nil { - return 0, errors.Trace(err) - } - return step, nil - } - if err != nil { - return 0, errors.Trace(err) - } - - intVal, err := strconv.ParseInt(string(val), 10, 0) - if err != nil { - return 0, errors.Trace(err) - } - - intVal += step - err = rm.Set(k, []byte(strconv.FormatInt(intVal, 10))) - if err != nil { - return 0, errors.Trace(err) - } - return intVal, nil -} - -// GetInt64 get int64 value which created by IncInt64 method. -func GetInt64(r Retriever, k Key) (int64, error) { - val, err := r.Get(k) - if IsErrNotFound(err) { - return 0, nil - } - if err != nil { - return 0, errors.Trace(err) - } - intVal, err := strconv.ParseInt(string(val), 10, 0) - return intVal, errors.Trace(err) -} diff --git a/vendor/github.com/pingcap/tidb/kv/variables.go b/vendor/github.com/pingcap/tidb/kv/variables.go deleted file mode 100644 index 7d83aad..0000000 --- a/vendor/github.com/pingcap/tidb/kv/variables.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -// Variables defines the variables used by KV storage. -type Variables struct { - // BackoffLockFast specifies the LockFast backoff base duration in milliseconds. - BackoffLockFast int - - // Hook is used for test to verify the variable take effect. - Hook func(name string, vars *Variables) -} - -// NewVariables create a new Variables instance with default values. -func NewVariables() *Variables { - return &Variables{ - BackoffLockFast: DefBackoffLockFast, - } -} - -// DefaultVars is the default variables instance. -var DefaultVars = NewVariables() - -// Default values -const ( - DefBackoffLockFast = 100 -) diff --git a/vendor/github.com/pingcap/tidb/kv/version.go b/vendor/github.com/pingcap/tidb/kv/version.go deleted file mode 100644 index f009215..0000000 --- a/vendor/github.com/pingcap/tidb/kv/version.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import "math" - -// VersionProvider provides increasing IDs. -type VersionProvider interface { - CurrentVersion() (Version, error) -} - -// Version is the wrapper of KV's version. -type Version struct { - Ver uint64 -} - -var ( - // MaxVersion is the maximum version, notice that it's not a valid version. - MaxVersion = Version{Ver: math.MaxUint64} - // MinVersion is the minimum version, it's not a valid version, too. - MinVersion = Version{Ver: 0} -) - -// NewVersion creates a new Version struct. -func NewVersion(v uint64) Version { - return Version{ - Ver: v, - } -} - -// Cmp returns the comparison result of two versions. -// The result will be 0 if a==b, -1 if a < b, and +1 if a > b. -func (v Version) Cmp(another Version) int { - if v.Ver > another.Ver { - return 1 - } else if v.Ver < another.Ver { - return -1 - } - return 0 -} diff --git a/vendor/github.com/pingcap/tidb/meta/autoid/autoid.go b/vendor/github.com/pingcap/tidb/meta/autoid/autoid.go deleted file mode 100644 index 2568af1..0000000 --- a/vendor/github.com/pingcap/tidb/meta/autoid/autoid.go +++ /dev/null @@ -1,262 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package autoid - -import ( - "math" - "sync" - "sync/atomic" - "time" - - "github.com/cznic/mathutil" - "github.com/juju/errors" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/terror" - log "github.com/sirupsen/logrus" -) - -// Test needs to change it, so it's a variable. -var step = int64(30000) - -var errInvalidTableID = terror.ClassAutoid.New(codeInvalidTableID, "invalid TableID") - -// Allocator is an auto increment id generator. -// Just keep id unique actually. -type Allocator interface { - // Alloc allocs the next autoID for table with tableID. - // It gets a batch of autoIDs at a time. So it does not need to access storage for each call. - Alloc(tableID int64) (int64, error) - // Rebase rebases the autoID base for table with tableID and the new base value. - // If allocIDs is true, it will allocate some IDs and save to the cache. - // If allocIDs is false, it will not allocate IDs. - Rebase(tableID, newBase int64, allocIDs bool) error - // Base return the current base of Allocator. - Base() int64 - // End is only used for test. - End() int64 - // NextGlobalAutoID returns the next global autoID. - NextGlobalAutoID(tableID int64) (int64, error) -} - -type allocator struct { - mu sync.Mutex - base int64 - end int64 - store kv.Storage - // dbID is current database's ID. - dbID int64 -} - -// GetStep is only used by tests -func GetStep() int64 { - return step -} - -// SetStep is only used by tests -func SetStep(s int64) { - step = s -} - -// Base implements autoid.Allocator Base interface. -func (alloc *allocator) Base() int64 { - return alloc.base -} - -// End implements autoid.Allocator End interface. -func (alloc *allocator) End() int64 { - return alloc.end -} - -// NextGlobalAutoID implements autoid.Allocator NextGlobalAutoID interface. -func (alloc *allocator) NextGlobalAutoID(tableID int64) (int64, error) { - var autoID int64 - startTime := time.Now() - err := kv.RunInNewTxn(alloc.store, true, func(txn kv.Transaction) error { - var err1 error - m := meta.NewMeta(txn) - autoID, err1 = m.GetAutoTableID(alloc.dbID, tableID) - return errors.Trace(err1) - }) - metrics.AutoIDHistogram.WithLabelValues(metrics.GlobalAutoID, metrics.RetLabel(err)).Observe(time.Since(startTime).Seconds()) - return autoID + 1, errors.Trace(err) -} - -// Rebase implements autoid.Allocator Rebase interface. -// The requiredBase is the minimum base value after Rebase. -// The real base may be greater than the required base. -func (alloc *allocator) Rebase(tableID, requiredBase int64, allocIDs bool) error { - if tableID == 0 { - return errInvalidTableID.Gen("Invalid tableID") - } - - alloc.mu.Lock() - defer alloc.mu.Unlock() - if requiredBase <= alloc.base { - // Satisfied by alloc.base, nothing to do. - return nil - } - if requiredBase <= alloc.end { - // Satisfied by alloc.end, need to updata alloc.base. - alloc.base = requiredBase - return nil - } - var newBase, newEnd int64 - startTime := time.Now() - err := kv.RunInNewTxn(alloc.store, true, func(txn kv.Transaction) error { - m := meta.NewMeta(txn) - currentEnd, err1 := m.GetAutoTableID(alloc.dbID, tableID) - if err1 != nil { - return errors.Trace(err1) - } - if allocIDs { - newBase = mathutil.MaxInt64(currentEnd, requiredBase) - newEnd = newBase + step - } else { - if currentEnd >= requiredBase { - newBase = currentEnd - newEnd = currentEnd - // Required base satisfied, we don't need to update KV. - return nil - } - // If we don't want to allocate IDs, for example when creating a table with a given base value, - // We need to make sure when other TiDB server allocates ID for the first time, requiredBase + 1 - // will be allocated, so we need to increase the end to exactly the requiredBase. - newBase = requiredBase - newEnd = requiredBase - } - _, err1 = m.GenAutoTableID(alloc.dbID, tableID, newEnd-currentEnd) - return errors.Trace(err1) - }) - metrics.AutoIDHistogram.WithLabelValues(metrics.TableAutoIDRebase, metrics.RetLabel(err)).Observe(time.Since(startTime).Seconds()) - if err != nil { - return errors.Trace(err) - } - alloc.base, alloc.end = newBase, newEnd - return nil -} - -// Alloc implements autoid.Allocator Alloc interface. -func (alloc *allocator) Alloc(tableID int64) (int64, error) { - if tableID == 0 { - return 0, errInvalidTableID.Gen("Invalid tableID") - } - alloc.mu.Lock() - defer alloc.mu.Unlock() - if alloc.base == alloc.end { // step - var newBase, newEnd int64 - startTime := time.Now() - err := kv.RunInNewTxn(alloc.store, true, func(txn kv.Transaction) error { - m := meta.NewMeta(txn) - var err1 error - newBase, err1 = m.GetAutoTableID(alloc.dbID, tableID) - if err1 != nil { - return errors.Trace(err1) - } - newEnd, err1 = m.GenAutoTableID(alloc.dbID, tableID, step) - if err1 != nil { - return errors.Trace(err1) - } - return nil - }) - metrics.AutoIDHistogram.WithLabelValues(metrics.TableAutoIDAlloc, metrics.RetLabel(err)).Observe(time.Since(startTime).Seconds()) - if err != nil { - return 0, errors.Trace(err) - } - alloc.base, alloc.end = newBase, newEnd - } - - alloc.base++ - log.Debugf("[kv] Alloc id %d, table ID:%d, from %p, database ID:%d", alloc.base, tableID, alloc, alloc.dbID) - return alloc.base, nil -} - -var ( - memID int64 - memIDLock sync.Mutex -) - -type memoryAllocator struct { - mu sync.Mutex - base int64 - end int64 - dbID int64 -} - -// Base implements autoid.Allocator Base interface. -func (alloc *memoryAllocator) Base() int64 { - return alloc.base -} - -// End implements autoid.Allocator End interface. -func (alloc *memoryAllocator) End() int64 { - return alloc.end -} - -// NextGlobalAutoID implements autoid.Allocator NextGlobalAutoID interface. -func (alloc *memoryAllocator) NextGlobalAutoID(tableID int64) (int64, error) { - memIDLock.Lock() - defer memIDLock.Unlock() - return memID + 1, nil -} - -// Rebase implements autoid.Allocator Rebase interface. -func (alloc *memoryAllocator) Rebase(tableID, newBase int64, allocIDs bool) error { - // TODO: implement it. - return nil -} - -// Alloc implements autoid.Allocator Alloc interface. -func (alloc *memoryAllocator) Alloc(tableID int64) (int64, error) { - if tableID == 0 { - return 0, errInvalidTableID.Gen("Invalid tableID") - } - alloc.mu.Lock() - defer alloc.mu.Unlock() - if alloc.base == alloc.end { // step - memIDLock.Lock() - memID = memID + step - alloc.end = memID - alloc.base = alloc.end - step - memIDLock.Unlock() - } - alloc.base++ - return alloc.base, nil -} - -// NewAllocator returns a new auto increment id generator on the store. -func NewAllocator(store kv.Storage, dbID int64) Allocator { - return &allocator{ - store: store, - dbID: dbID, - } -} - -// NewMemoryAllocator returns a new auto increment id generator in memory. -func NewMemoryAllocator(dbID int64) Allocator { - return &memoryAllocator{ - dbID: dbID, - } -} - -//autoid error codes. -const codeInvalidTableID terror.ErrCode = 1 - -var localSchemaID = int64(math.MaxInt64) - -// GenLocalSchemaID generates a local schema ID. -func GenLocalSchemaID() int64 { - return atomic.AddInt64(&localSchemaID, -1) -} diff --git a/vendor/github.com/pingcap/tidb/meta/meta.go b/vendor/github.com/pingcap/tidb/meta/meta.go deleted file mode 100644 index 0c0b430..0000000 --- a/vendor/github.com/pingcap/tidb/meta/meta.go +++ /dev/null @@ -1,723 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package meta - -import ( - "encoding/binary" - "encoding/json" - "fmt" - "sort" - "strconv" - "strings" - "sync" - "time" - - "github.com/juju/errors" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/structure" - "github.com/pingcap/tidb/terror" -) - -var ( - globalIDMutex sync.Mutex -) - -// Meta structure: -// NextGlobalID -> int64 -// SchemaVersion -> int64 -// DBs -> { -// DB:1 -> db meta data []byte -// DB:2 -> db meta data []byte -// } -// DB:1 -> { -// Table:1 -> table meta data []byte -// Table:2 -> table meta data []byte -// TID:1 -> int64 -// TID:2 -> int64 -// } -// - -var ( - mMetaPrefix = []byte("m") - mNextGlobalIDKey = []byte("NextGlobalID") - mSchemaVersionKey = []byte("SchemaVersionKey") - mDBs = []byte("DBs") - mDBPrefix = "DB" - mTablePrefix = "Table" - mTableIDPrefix = "TID" - mBootstrapKey = []byte("BootstrapKey") - mTableStatsPrefix = "TStats" - mSchemaDiffPrefix = "Diff" -) - -var ( - errInvalidTableKey = terror.ClassMeta.New(codeInvalidTableKey, "invalid table meta key") - errInvalidDBKey = terror.ClassMeta.New(codeInvalidDBKey, "invalid db key") - - // ErrDBExists is the error for db exists. - ErrDBExists = terror.ClassMeta.New(codeDatabaseExists, "database already exists") - // ErrDBNotExists is the error for db not exists. - ErrDBNotExists = terror.ClassMeta.New(codeDatabaseNotExists, "database doesn't exist") - // ErrTableExists is the error for table exists. - ErrTableExists = terror.ClassMeta.New(codeTableExists, "table already exists") - // ErrTableNotExists is the error for table not exists. - ErrTableNotExists = terror.ClassMeta.New(codeTableNotExists, "table doesn't exist") -) - -// Meta is for handling meta information in a transaction. -type Meta struct { - txn *structure.TxStructure - StartTS uint64 // StartTS is the txn's start TS. - jobListKey JobListKeyType -} - -// NewMeta creates a Meta in transaction txn. -func NewMeta(txn kv.Transaction) *Meta { - txn.SetOption(kv.Priority, kv.PriorityHigh) - txn.SetOption(kv.SyncLog, true) - t := structure.NewStructure(txn, txn, mMetaPrefix) - return &Meta{txn: t, StartTS: txn.StartTS(), jobListKey: DefaultJobListKey} -} - -// NewSnapshotMeta creates a Meta with snapshot. -func NewSnapshotMeta(snapshot kv.Snapshot) *Meta { - t := structure.NewStructure(snapshot, nil, mMetaPrefix) - return &Meta{txn: t} -} - -// GenGlobalID generates next id globally. -func (m *Meta) GenGlobalID() (int64, error) { - globalIDMutex.Lock() - defer globalIDMutex.Unlock() - - return m.txn.Inc(mNextGlobalIDKey, 1) -} - -// GetGlobalID gets current global id. -func (m *Meta) GetGlobalID() (int64, error) { - return m.txn.GetInt64(mNextGlobalIDKey) -} - -func (m *Meta) dbKey(dbID int64) []byte { - return []byte(fmt.Sprintf("%s:%d", mDBPrefix, dbID)) -} - -func (m *Meta) parseDatabaseID(key string) (int64, error) { - seps := strings.Split(key, ":") - if len(seps) != 2 { - return 0, errors.Errorf("invalid db key %s", key) - } - - n, err := strconv.ParseInt(seps[1], 10, 64) - return n, errors.Trace(err) -} - -func (m *Meta) autoTableIDKey(tableID int64) []byte { - return []byte(fmt.Sprintf("%s:%d", mTableIDPrefix, tableID)) -} - -func (m *Meta) tableKey(tableID int64) []byte { - return []byte(fmt.Sprintf("%s:%d", mTablePrefix, tableID)) -} - -func (m *Meta) parseTableID(key string) (int64, error) { - seps := strings.Split(key, ":") - if len(seps) != 2 { - return 0, errors.Errorf("invalid table meta key %s", key) - } - - n, err := strconv.ParseInt(seps[1], 10, 64) - return n, errors.Trace(err) -} - -// GenAutoTableIDIDKeyValue generate meta key by dbID, tableID and coresponding value by autoID. -func (m *Meta) GenAutoTableIDIDKeyValue(dbID, tableID, autoID int64) (key, value []byte) { - dbKey := m.dbKey(dbID) - autoTableIDKey := m.autoTableIDKey(tableID) - return m.txn.EncodeHashAutoIDKeyValue(dbKey, autoTableIDKey, autoID) -} - -// GenAutoTableID adds step to the auto ID of the table and returns the sum. -func (m *Meta) GenAutoTableID(dbID, tableID, step int64) (int64, error) { - // Check if DB exists. - dbKey := m.dbKey(dbID) - if err := m.checkDBExists(dbKey); err != nil { - return 0, errors.Trace(err) - } - // Check if table exists. - tableKey := m.tableKey(tableID) - if err := m.checkTableExists(dbKey, tableKey); err != nil { - return 0, errors.Trace(err) - } - - return m.txn.HInc(dbKey, m.autoTableIDKey(tableID), step) -} - -// GetAutoTableID gets current auto id with table id. -func (m *Meta) GetAutoTableID(dbID int64, tableID int64) (int64, error) { - return m.txn.HGetInt64(m.dbKey(dbID), m.autoTableIDKey(tableID)) -} - -// GetSchemaVersion gets current global schema version. -func (m *Meta) GetSchemaVersion() (int64, error) { - return m.txn.GetInt64(mSchemaVersionKey) -} - -// GenSchemaVersion generates next schema version. -func (m *Meta) GenSchemaVersion() (int64, error) { - return m.txn.Inc(mSchemaVersionKey, 1) -} - -func (m *Meta) checkDBExists(dbKey []byte) error { - v, err := m.txn.HGet(mDBs, dbKey) - if err != nil { - return errors.Trace(err) - } else if v == nil { - return ErrDBNotExists - } - - return nil -} - -func (m *Meta) checkDBNotExists(dbKey []byte) error { - v, err := m.txn.HGet(mDBs, dbKey) - if err != nil { - return errors.Trace(err) - } - - if v != nil { - return ErrDBExists - } - - return nil -} - -func (m *Meta) checkTableExists(dbKey []byte, tableKey []byte) error { - v, err := m.txn.HGet(dbKey, tableKey) - if err != nil { - return errors.Trace(err) - } - - if v == nil { - return ErrTableNotExists - } - - return nil -} - -func (m *Meta) checkTableNotExists(dbKey []byte, tableKey []byte) error { - v, err := m.txn.HGet(dbKey, tableKey) - if err != nil { - return errors.Trace(err) - } - - if v != nil { - return ErrTableExists - } - - return nil -} - -// CreateDatabase creates a database with db info. -func (m *Meta) CreateDatabase(dbInfo *model.DBInfo) error { - dbKey := m.dbKey(dbInfo.ID) - - if err := m.checkDBNotExists(dbKey); err != nil { - return errors.Trace(err) - } - - data, err := json.Marshal(dbInfo) - if err != nil { - return errors.Trace(err) - } - - return m.txn.HSet(mDBs, dbKey, data) -} - -// UpdateDatabase updates a database with db info. -func (m *Meta) UpdateDatabase(dbInfo *model.DBInfo) error { - dbKey := m.dbKey(dbInfo.ID) - - if err := m.checkDBExists(dbKey); err != nil { - return errors.Trace(err) - } - - data, err := json.Marshal(dbInfo) - if err != nil { - return errors.Trace(err) - } - - return m.txn.HSet(mDBs, dbKey, data) -} - -// CreateTable creates a table with tableInfo in database. -func (m *Meta) CreateTable(dbID int64, tableInfo *model.TableInfo) error { - // Check if db exists. - dbKey := m.dbKey(dbID) - if err := m.checkDBExists(dbKey); err != nil { - return errors.Trace(err) - } - - // Check if table exists. - tableKey := m.tableKey(tableInfo.ID) - if err := m.checkTableNotExists(dbKey, tableKey); err != nil { - return errors.Trace(err) - } - - data, err := json.Marshal(tableInfo) - if err != nil { - return errors.Trace(err) - } - - return m.txn.HSet(dbKey, tableKey, data) -} - -// DropDatabase drops whole database. -func (m *Meta) DropDatabase(dbID int64) error { - // Check if db exists. - dbKey := m.dbKey(dbID) - if err := m.txn.HClear(dbKey); err != nil { - return errors.Trace(err) - } - - if err := m.txn.HDel(mDBs, dbKey); err != nil { - return errors.Trace(err) - } - - return nil -} - -// DropTable drops table in database. -// If delAutoID is true, it will delete the auto_increment id key-value of the table. -// For rename table, we do not need to rename auto_increment id key-value. -func (m *Meta) DropTable(dbID int64, tblID int64, delAutoID bool) error { - // Check if db exists. - dbKey := m.dbKey(dbID) - if err := m.checkDBExists(dbKey); err != nil { - return errors.Trace(err) - } - - // Check if table exists. - tableKey := m.tableKey(tblID) - if err := m.checkTableExists(dbKey, tableKey); err != nil { - return errors.Trace(err) - } - - if err := m.txn.HDel(dbKey, tableKey); err != nil { - return errors.Trace(err) - } - if delAutoID { - if err := m.txn.HDel(dbKey, m.autoTableIDKey(tblID)); err != nil { - return errors.Trace(err) - } - } - return nil -} - -// UpdateTable updates the table with table info. -func (m *Meta) UpdateTable(dbID int64, tableInfo *model.TableInfo) error { - // Check if db exists. - dbKey := m.dbKey(dbID) - if err := m.checkDBExists(dbKey); err != nil { - return errors.Trace(err) - } - - // Check if table exists. - tableKey := m.tableKey(tableInfo.ID) - if err := m.checkTableExists(dbKey, tableKey); err != nil { - return errors.Trace(err) - } - - data, err := json.Marshal(tableInfo) - if err != nil { - return errors.Trace(err) - } - - err = m.txn.HSet(dbKey, tableKey, data) - return errors.Trace(err) -} - -// ListTables shows all tables in database. -func (m *Meta) ListTables(dbID int64) ([]*model.TableInfo, error) { - dbKey := m.dbKey(dbID) - if err := m.checkDBExists(dbKey); err != nil { - return nil, errors.Trace(err) - } - - res, err := m.txn.HGetAll(dbKey) - if err != nil { - return nil, errors.Trace(err) - } - - tables := make([]*model.TableInfo, 0, len(res)/2) - for _, r := range res { - // only handle table meta - tableKey := string(r.Field) - if !strings.HasPrefix(tableKey, mTablePrefix) { - continue - } - - tbInfo := &model.TableInfo{} - err = json.Unmarshal(r.Value, tbInfo) - if err != nil { - return nil, errors.Trace(err) - } - - tables = append(tables, tbInfo) - } - - return tables, nil -} - -// ListDatabases shows all databases. -func (m *Meta) ListDatabases() ([]*model.DBInfo, error) { - res, err := m.txn.HGetAll(mDBs) - if err != nil { - return nil, errors.Trace(err) - } - - dbs := make([]*model.DBInfo, 0, len(res)) - for _, r := range res { - dbInfo := &model.DBInfo{} - err = json.Unmarshal(r.Value, dbInfo) - if err != nil { - return nil, errors.Trace(err) - } - dbs = append(dbs, dbInfo) - } - return dbs, nil -} - -// GetDatabase gets the database value with ID. -func (m *Meta) GetDatabase(dbID int64) (*model.DBInfo, error) { - dbKey := m.dbKey(dbID) - value, err := m.txn.HGet(mDBs, dbKey) - if err != nil || value == nil { - return nil, errors.Trace(err) - } - - dbInfo := &model.DBInfo{} - err = json.Unmarshal(value, dbInfo) - return dbInfo, errors.Trace(err) -} - -// GetTable gets the table value in database with tableID. -func (m *Meta) GetTable(dbID int64, tableID int64) (*model.TableInfo, error) { - // Check if db exists. - dbKey := m.dbKey(dbID) - if err := m.checkDBExists(dbKey); err != nil { - return nil, errors.Trace(err) - } - - tableKey := m.tableKey(tableID) - value, err := m.txn.HGet(dbKey, tableKey) - if err != nil || value == nil { - return nil, errors.Trace(err) - } - - tableInfo := &model.TableInfo{} - err = json.Unmarshal(value, tableInfo) - return tableInfo, errors.Trace(err) -} - -// DDL job structure -// DDLJobList: list jobs -// DDLJobHistory: hash -// DDLJobReorg: hash -// -// for multi DDL workers, only one can become the owner -// to operate DDL jobs, and dispatch them to MR Jobs. - -var ( - mDDLJobListKey = []byte("DDLJobList") - mDDLJobAddIdxList = []byte("DDLJobAddIdxList") - mDDLJobHistoryKey = []byte("DDLJobHistory") - mDDLJobReorgKey = []byte("DDLJobReorg") -) - -// JobListKeyType is a key type of the DDL job queue. -type JobListKeyType []byte - -var ( - // DefaultJobListKey keeps all actions of DDL jobs. - DefaultJobListKey JobListKeyType = mDDLJobListKey - // AddIndexJobListKey only keeps the action of adding index. - AddIndexJobListKey JobListKeyType = mDDLJobAddIdxList -) - -// SetJobListKey sets the job list key. -func (m *Meta) SetJobListKey(key []byte) { - m.jobListKey = key -} - -func (m *Meta) enQueueDDLJob(key []byte, job *model.Job) error { - b, err := job.Encode(true) - if err != nil { - return errors.Trace(err) - } - return m.txn.RPush(key, b) -} - -// EnQueueDDLJob adds a DDL job to the list. -func (m *Meta) EnQueueDDLJob(job *model.Job) error { - return m.enQueueDDLJob(m.jobListKey, job) -} - -func (m *Meta) deQueueDDLJob(key []byte) (*model.Job, error) { - value, err := m.txn.LPop(key) - if err != nil || value == nil { - return nil, errors.Trace(err) - } - - job := &model.Job{} - err = job.Decode(value) - return job, errors.Trace(err) -} - -// DeQueueDDLJob pops a DDL job from the list. -func (m *Meta) DeQueueDDLJob() (*model.Job, error) { - return m.deQueueDDLJob(m.jobListKey) -} - -func (m *Meta) getDDLJob(key []byte, index int64) (*model.Job, error) { - value, err := m.txn.LIndex(key, index) - if err != nil || value == nil { - return nil, errors.Trace(err) - } - - job := &model.Job{} - err = job.Decode(value) - return job, errors.Trace(err) -} - -// GetDDLJob returns the DDL job with index. -func (m *Meta) GetDDLJob(index int64) (*model.Job, error) { - startTime := time.Now() - job, err := m.getDDLJob(m.jobListKey, index) - metrics.MetaHistogram.WithLabelValues(metrics.GetDDLJob, metrics.RetLabel(err)).Observe(time.Since(startTime).Seconds()) - return job, errors.Trace(err) -} - -// updateDDLJob updates the DDL job with index and key. -// updateRawArgs is used to determine whether to update the raw args when encode the job. -func (m *Meta) updateDDLJob(index int64, job *model.Job, key []byte, updateRawArgs bool) error { - b, err := job.Encode(updateRawArgs) - if err != nil { - return errors.Trace(err) - } - return m.txn.LSet(key, index, b) -} - -// UpdateDDLJob updates the DDL job with index. -// updateRawArgs is used to determine whether to update the raw args when encode the job. -func (m *Meta) UpdateDDLJob(index int64, job *model.Job, updateRawArgs bool) error { - startTime := time.Now() - err := m.updateDDLJob(index, job, m.jobListKey, updateRawArgs) - metrics.MetaHistogram.WithLabelValues(metrics.UpdateDDLJob, metrics.RetLabel(err)).Observe(time.Since(startTime).Seconds()) - return errors.Trace(err) -} - -// DDLJobQueueLen returns the DDL job queue length. -func (m *Meta) DDLJobQueueLen() (int64, error) { - return m.txn.LLen(m.jobListKey) -} - -// GetAllDDLJobs gets all DDL Jobs. -func (m *Meta) GetAllDDLJobs() ([]*model.Job, error) { - values, err := m.txn.LGetAll(mDDLJobListKey) - if err != nil || values == nil { - return nil, errors.Trace(err) - } - - jobs := make([]*model.Job, 0, len(values)) - for _, val := range values { - job := &model.Job{} - err = job.Decode(val) - if err != nil { - return nil, errors.Trace(err) - } - jobs = append(jobs, job) - } - - return jobs, nil -} - -func (m *Meta) jobIDKey(id int64) []byte { - b := make([]byte, 8) - binary.BigEndian.PutUint64(b, uint64(id)) - return b -} - -func (m *Meta) addHistoryDDLJob(key []byte, job *model.Job) error { - b, err := job.Encode(true) - if err != nil { - return errors.Trace(err) - } - - return m.txn.HSet(key, m.jobIDKey(job.ID), b) -} - -// AddHistoryDDLJob adds DDL job to history. -func (m *Meta) AddHistoryDDLJob(job *model.Job) error { - return m.addHistoryDDLJob(mDDLJobHistoryKey, job) -} - -func (m *Meta) getHistoryDDLJob(key []byte, id int64) (*model.Job, error) { - value, err := m.txn.HGet(key, m.jobIDKey(id)) - if err != nil || value == nil { - return nil, errors.Trace(err) - } - - job := &model.Job{} - err = job.Decode(value) - return job, errors.Trace(err) -} - -// GetHistoryDDLJob gets a history DDL job. -func (m *Meta) GetHistoryDDLJob(id int64) (*model.Job, error) { - startTime := time.Now() - job, err := m.getHistoryDDLJob(mDDLJobHistoryKey, id) - metrics.MetaHistogram.WithLabelValues(metrics.GetHistoryDDLJob, metrics.RetLabel(err)).Observe(time.Since(startTime).Seconds()) - return job, errors.Trace(err) -} - -// GetAllHistoryDDLJobs gets all history DDL jobs. -func (m *Meta) GetAllHistoryDDLJobs() ([]*model.Job, error) { - pairs, err := m.txn.HGetAll(mDDLJobHistoryKey) - if err != nil { - return nil, errors.Trace(err) - } - var jobs []*model.Job - for _, pair := range pairs { - job := &model.Job{} - err = job.Decode(pair.Value) - if err != nil { - return nil, errors.Trace(err) - } - jobs = append(jobs, job) - } - sorter := &jobsSorter{jobs: jobs} - sort.Sort(sorter) - return jobs, nil -} - -// jobsSorter implements the sort.Interface interface. -type jobsSorter struct { - jobs []*model.Job -} - -func (s *jobsSorter) Swap(i, j int) { - s.jobs[i], s.jobs[j] = s.jobs[j], s.jobs[i] -} - -func (s *jobsSorter) Len() int { - return len(s.jobs) -} - -func (s *jobsSorter) Less(i, j int) bool { - return s.jobs[i].ID < s.jobs[j].ID -} - -// GetBootstrapVersion returns the version of the server which boostrap the store. -// If the store is not bootstraped, the version will be zero. -func (m *Meta) GetBootstrapVersion() (int64, error) { - value, err := m.txn.GetInt64(mBootstrapKey) - return value, errors.Trace(err) -} - -// FinishBootstrap finishes bootstrap. -func (m *Meta) FinishBootstrap(version int64) error { - err := m.txn.Set(mBootstrapKey, []byte(fmt.Sprintf("%d", version))) - return errors.Trace(err) -} - -// UpdateDDLReorgHandle saves the job reorganization latest processed handle for later resuming. -func (m *Meta) UpdateDDLReorgHandle(job *model.Job, handle int64) error { - err := m.txn.HSet(mDDLJobReorgKey, m.jobIDKey(job.ID), []byte(strconv.FormatInt(handle, 10))) - return errors.Trace(err) -} - -// RemoveDDLReorgHandle removes the job reorganization handle. -func (m *Meta) RemoveDDLReorgHandle(job *model.Job) error { - err := m.txn.HDel(mDDLJobReorgKey, m.jobIDKey(job.ID)) - return errors.Trace(err) -} - -// GetDDLReorgHandle gets the latest processed handle. -func (m *Meta) GetDDLReorgHandle(job *model.Job) (int64, error) { - value, err := m.txn.HGetInt64(mDDLJobReorgKey, m.jobIDKey(job.ID)) - return value, errors.Trace(err) -} - -func (m *Meta) tableStatsKey(tableID int64) []byte { - return []byte(fmt.Sprintf("%s:%d", mTableStatsPrefix, tableID)) -} - -func (m *Meta) schemaDiffKey(schemaVersion int64) []byte { - return []byte(fmt.Sprintf("%s:%d", mSchemaDiffPrefix, schemaVersion)) -} - -// GetSchemaDiff gets the modification information on a given schema version. -func (m *Meta) GetSchemaDiff(schemaVersion int64) (*model.SchemaDiff, error) { - diffKey := m.schemaDiffKey(schemaVersion) - startTime := time.Now() - data, err := m.txn.Get(diffKey) - metrics.MetaHistogram.WithLabelValues(metrics.GetSchemaDiff, metrics.RetLabel(err)).Observe(time.Since(startTime).Seconds()) - if err != nil { - return nil, errors.Trace(err) - } - if len(data) == 0 { - return nil, nil - } - diff := &model.SchemaDiff{} - err = json.Unmarshal(data, diff) - return diff, errors.Trace(err) -} - -// SetSchemaDiff sets the modification information on a given schema version. -func (m *Meta) SetSchemaDiff(diff *model.SchemaDiff) error { - data, err := json.Marshal(diff) - if err != nil { - return errors.Trace(err) - } - diffKey := m.schemaDiffKey(diff.Version) - startTime := time.Now() - err = m.txn.Set(diffKey, data) - metrics.MetaHistogram.WithLabelValues(metrics.SetSchemaDiff, metrics.RetLabel(err)).Observe(time.Since(startTime).Seconds()) - return errors.Trace(err) -} - -// meta error codes. -const ( - codeInvalidTableKey terror.ErrCode = 1 - codeInvalidDBKey = 2 - - codeDatabaseExists = 1007 - codeDatabaseNotExists = 1049 - codeTableExists = 1050 - codeTableNotExists = 1146 -) - -func init() { - metaMySQLErrCodes := map[terror.ErrCode]uint16{ - codeDatabaseExists: mysql.ErrDBCreateExists, - codeDatabaseNotExists: mysql.ErrBadDB, - codeTableNotExists: mysql.ErrNoSuchTable, - codeTableExists: mysql.ErrTableExists, - } - terror.ErrClassToMySQLCodes[terror.ClassMeta] = metaMySQLErrCodes -} diff --git a/vendor/github.com/pingcap/tidb/metrics/ddl.go b/vendor/github.com/pingcap/tidb/metrics/ddl.go deleted file mode 100644 index c06e027..0000000 --- a/vendor/github.com/pingcap/tidb/metrics/ddl.go +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2018 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package metrics - -import "github.com/prometheus/client_golang/prometheus" - -// Metrics for the DDL package. -var ( - JobsGauge = prometheus.NewGaugeVec( - prometheus.GaugeOpts{ - Namespace: "tidb", - Subsystem: "ddl", - Name: "waiting_jobs", - Help: "Gauge of jobs.", - }, []string{LblType}) - - HandleJobHistogram = prometheus.NewHistogramVec( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "ddl", - Name: "handle_job_duration_seconds", - Help: "Bucketed histogram of processing time (s) of handle jobs", - Buckets: prometheus.ExponentialBuckets(0.01, 2, 20), - }, []string{LblType, LblResult}) - - BatchAddIdxHistogram = prometheus.NewHistogramVec( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "ddl", - Name: "batch_add_idx_duration_seconds", - Help: "Bucketed histogram of processing time (s) of batch handle data", - Buckets: prometheus.ExponentialBuckets(0.001, 2, 20), - }, []string{LblType}) - - SyncerInit = "init" - SyncerRestart = "restart" - SyncerClear = "clear" - SyncerRewatch = "rewatch" - DeploySyncerHistogram = prometheus.NewHistogramVec( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "ddl", - Name: "deploy_syncer_duration_seconds", - Help: "Bucketed histogram of processing time (s) of deploy syncer", - Buckets: prometheus.ExponentialBuckets(0.01, 2, 20), - }, []string{LblType, LblResult}) - - UpdateSelfVersionHistogram = prometheus.NewHistogramVec( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "ddl", - Name: "update_self_ver_duration_seconds", - Help: "Bucketed histogram of processing time (s) of update self version", - Buckets: prometheus.ExponentialBuckets(0.01, 2, 20), - }, []string{LblResult}) - - OwnerUpdateGlobalVersion = "update_global_version" - OwnerGetGlobalVersion = "get_global_version" - OwnerCheckAllVersions = "check_all_versions" - OwnerHandleSyncerHistogram = prometheus.NewHistogramVec( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "ddl", - Name: "owner_handle_syncer_duration_seconds", - Help: "Bucketed histogram of processing time (s) of handle syncer", - Buckets: prometheus.ExponentialBuckets(0.01, 2, 20), - }, []string{LblType, LblResult}) - - // Metrics for ddl_worker.go. - WorkerAddDDLJob = "add_job" - WorkerFinishDDLJob = "finish_job" - WorkerWaitSchemaChanged = "wait_schema_changed" - DDLWorkerHistogram = prometheus.NewHistogramVec( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "ddl", - Name: "worker_operation_duration_seconds", - Help: "Bucketed histogram of processing time (s) of ddl worker operations", - Buckets: prometheus.ExponentialBuckets(0.001, 2, 20), - }, []string{LblType, LblResult}) - - CreateDDLInstance = "create_ddl_instance" - CreateDDLWorker = "create_ddl_worker" - IsDDLOwner = "is_ddl_owner" - DDLCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "ddl", - Name: "worker_operation_total", - Help: "Counter of creating ddl/worker and isowner.", - }, []string{LblType}) - - // DDLJobErrCounter is the counter of error occured in ddl job. - DDLJobErrCounter = prometheus.NewCounter( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "ddl", - Name: "job_error_total", - Help: "Counter of error occured in ddl job.", - }) -) - -func init() { - prometheus.MustRegister(JobsGauge) - prometheus.MustRegister(HandleJobHistogram) - prometheus.MustRegister(BatchAddIdxHistogram) - prometheus.MustRegister(DeploySyncerHistogram) - prometheus.MustRegister(UpdateSelfVersionHistogram) - prometheus.MustRegister(OwnerHandleSyncerHistogram) - prometheus.MustRegister(DDLWorkerHistogram) - prometheus.MustRegister(DDLCounter) - prometheus.MustRegister(DDLJobErrCounter) -} diff --git a/vendor/github.com/pingcap/tidb/metrics/distsql.go b/vendor/github.com/pingcap/tidb/metrics/distsql.go deleted file mode 100644 index d93283e..0000000 --- a/vendor/github.com/pingcap/tidb/metrics/distsql.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2018 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package metrics - -import ( - "github.com/prometheus/client_golang/prometheus" -) - -// distsql metrics. -var ( - DistSQLQueryHistgram = prometheus.NewHistogramVec( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "distsql", - Name: "handle_query_duration_seconds", - Help: "Bucketed histogram of processing time (s) of handled queries.", - Buckets: prometheus.ExponentialBuckets(0.0005, 2, 13), - }, []string{LblType}) - - DistSQLScanKeysPartialHistogram = prometheus.NewHistogram( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "distsql", - Name: "scan_keys_partial_num", - Help: "number of scanned keys for each partial result.", - }, - ) - DistSQLScanKeysHistogram = prometheus.NewHistogram( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "distsql", - Name: "scan_keys_num", - Help: "number of scanned keys for each query.", - }, - ) - DistSQLPartialCountHistogram = prometheus.NewHistogram( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "distsql", - Name: "partial_num", - Help: "number of partial results for each query.", - }, - ) -) - -func init() { - prometheus.MustRegister(DistSQLQueryHistgram) - prometheus.MustRegister(DistSQLScanKeysPartialHistogram) - prometheus.MustRegister(DistSQLScanKeysHistogram) - prometheus.MustRegister(DistSQLPartialCountHistogram) -} diff --git a/vendor/github.com/pingcap/tidb/metrics/domain.go b/vendor/github.com/pingcap/tidb/metrics/domain.go deleted file mode 100644 index 981fc48..0000000 --- a/vendor/github.com/pingcap/tidb/metrics/domain.go +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2018 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package metrics - -import ( - "github.com/prometheus/client_golang/prometheus" -) - -var ( - // LoadSchemaCounter records the counter of load schema. - LoadSchemaCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "domain", - Name: "load_schema_total", - Help: "Counter of load schema", - }, []string{LblType}) - - // LoadSchemaDuration records the duration of load schema. - LoadSchemaDuration = prometheus.NewHistogram( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "domain", - Name: "load_schema_duration_seconds", - Help: "Bucketed histogram of processing time (s) in load schema.", - Buckets: prometheus.ExponentialBuckets(0.001, 2, 15), - }) - - // LoadPrivilegeCounter records the counter of load privilege. - LoadPrivilegeCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "domain", - Name: "load_privilege_total", - Help: "Counter of load privilege", - }, []string{LblType}) -) - -func init() { - prometheus.MustRegister(LoadSchemaDuration) - prometheus.MustRegister(LoadSchemaCounter) - prometheus.MustRegister(LoadPrivilegeCounter) -} diff --git a/vendor/github.com/pingcap/tidb/metrics/executor.go b/vendor/github.com/pingcap/tidb/metrics/executor.go deleted file mode 100644 index bc92161..0000000 --- a/vendor/github.com/pingcap/tidb/metrics/executor.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2018 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package metrics - -import ( - "github.com/prometheus/client_golang/prometheus" -) - -var ( - // ExecutorCounter records the number of expensive executors. - ExecutorCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "executor", - Name: "expensive_total", - Help: "Counter of Expensive Executors.", - }, []string{LblType}, - ) - - // StmtNodeCounter records the number of statement with the same type. - StmtNodeCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "executor", - Name: "statement_total", - Help: "Counter of StmtNode.", - }, []string{LblType}) -) - -func init() { - prometheus.MustRegister(ExecutorCounter) - prometheus.MustRegister(StmtNodeCounter) -} diff --git a/vendor/github.com/pingcap/tidb/metrics/meta.go b/vendor/github.com/pingcap/tidb/metrics/meta.go deleted file mode 100644 index 96417dd..0000000 --- a/vendor/github.com/pingcap/tidb/metrics/meta.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2018 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package metrics - -import ( - "github.com/prometheus/client_golang/prometheus" -) - -// Metrics -var ( - GlobalAutoID = "global" - TableAutoIDAlloc = "alloc" - TableAutoIDRebase = "rebase" - AutoIDHistogram = prometheus.NewHistogramVec( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "autoid", - Name: "operation_duration_seconds", - Help: "Bucketed histogram of processing time (s) of handled autoid.", - Buckets: prometheus.ExponentialBuckets(0.0005, 2, 22), - }, []string{LblType, LblResult}) - - GetSchemaDiff = "get_schema_diff" - SetSchemaDiff = "set_schema_diff" - GetDDLJob = "get_ddl_job" - UpdateDDLJob = "update_ddl_job" - GetHistoryDDLJob = "get_history_ddl_job" - - MetaHistogram = prometheus.NewHistogramVec( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "meta", - Name: "operation_duration_seconds", - Help: "Bucketed histogram of processing time (s) of tidb meta data operations.", - Buckets: prometheus.ExponentialBuckets(0.0005, 2, 22), - }, []string{LblType, LblResult}) -) - -func init() { - prometheus.MustRegister(AutoIDHistogram) - prometheus.MustRegister(MetaHistogram) -} diff --git a/vendor/github.com/pingcap/tidb/metrics/metrics.go b/vendor/github.com/pingcap/tidb/metrics/metrics.go deleted file mode 100644 index 7fa8ec2..0000000 --- a/vendor/github.com/pingcap/tidb/metrics/metrics.go +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2018 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package metrics - -import "github.com/prometheus/client_golang/prometheus" - -var ( - // PanicCounter measures the count of panics. - PanicCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "server", - Name: "panic_total", - Help: "Counter of panic.", - }, []string{LblType}) -) - -// metrics labels. -const ( - LabelSession = "session" - LabelDomain = "domain" - LabelDDLOwner = "ddl-owner" - LabelDDL = "ddl" - LabelGCWorker = "gcworker" - - opSucc = "ok" - opFailed = "err" -) - -// RetLabel returns "ok" when err == nil and "err" when err != nil. -// This could be useful when you need to observe the operation result. -func RetLabel(err error) string { - if err == nil { - return opSucc - } - return opFailed -} - -func init() { - prometheus.MustRegister(PanicCounter) -} diff --git a/vendor/github.com/pingcap/tidb/metrics/owner.go b/vendor/github.com/pingcap/tidb/metrics/owner.go deleted file mode 100644 index 986926e..0000000 --- a/vendor/github.com/pingcap/tidb/metrics/owner.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2018 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package metrics - -import ( - "github.com/prometheus/client_golang/prometheus" -) - -// Metrics -var ( - NewSessionHistogram = prometheus.NewHistogramVec( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "owner", - Name: "new_session_duration_seconds", - Help: "Bucketed histogram of processing time (s) of new session.", - Buckets: prometheus.ExponentialBuckets(0.0005, 2, 22), - }, []string{LblType, LblResult}) - - WatcherClosed = "watcher_closed" - Cancelled = "cancelled" - Deleted = "deleted" - SessionDone = "session_done" - CtxDone = "context_done" - WatchOwnerCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "owner", - Name: "watch_owner_total", - Help: "Counter of watch owner.", - }, []string{LblType, LblResult}) - - NoLongerOwner = "no_longer_owner" - CampaignOwnerCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "owner", - Name: "campaign_owner_total", - Help: "Counter of campaign owner.", - }, []string{LblType, LblResult}) -) - -func init() { - prometheus.MustRegister(NewSessionHistogram) - prometheus.MustRegister(WatchOwnerCounter) - prometheus.MustRegister(CampaignOwnerCounter) -} diff --git a/vendor/github.com/pingcap/tidb/metrics/server.go b/vendor/github.com/pingcap/tidb/metrics/server.go deleted file mode 100644 index ef2ab18..0000000 --- a/vendor/github.com/pingcap/tidb/metrics/server.go +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright 2018 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package metrics - -import ( - "strconv" - - "github.com/juju/errors" - "github.com/pingcap/tidb/terror" - "github.com/prometheus/client_golang/prometheus" -) - -// Metrics -var ( - QueryDurationHistogram = prometheus.NewHistogram( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "server", - Name: "handle_query_duration_seconds", - Help: "Bucketed histogram of processing time (s) of handled queries.", - Buckets: prometheus.ExponentialBuckets(0.0005, 2, 22), - }) - - QueryTotalCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "server", - Name: "query_total", - Help: "Counter of queries.", - }, []string{LblType, LblResult}) - - ConnGauge = prometheus.NewGauge( - prometheus.GaugeOpts{ - Namespace: "tidb", - Subsystem: "server", - Name: "connections", - Help: "Number of connections.", - }) - - ExecuteErrorCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "server", - Name: "execute_error_total", - Help: "Counter of execute errors.", - }, []string{LblType}) - - CriticalErrorCounter = prometheus.NewCounter( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "server", - Name: "critical_error_total", - Help: "Counter of critical errors.", - }) - - EventStart = "start" - EventGracefulDown = "graceful_shutdown" - // Eventkill occurs when the server.Kill() function is called. - EventKill = "kill" - // EventHang occurs when server meet some critical error. It will close the listening port and hang for ever. - EventHang = "hang" - EventClose = "close" - ServerEventCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "server", - Name: "event_total", - Help: "Counter of tidb-server event.", - }, []string{LblType}) - - TimeJumpBackCounter = prometheus.NewCounter( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "monitor", - Name: "time_jump_back_total", - Help: "Counter of system time jumps backward.", - }) - - KeepAliveCounter = prometheus.NewCounter( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "monitor", - Name: "keep_alive_total", - Help: "Counter of TiDB keep alive.", - }) - - PlanCacheCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "server", - Name: "plan_cache_total", - Help: "Counter of query using plan cache.", - }, []string{LblType}) - - HandShakeErrorCounter = prometheus.NewCounter( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "server", - Name: "handshake_error_total", - Help: "Counter of hand shake error.", - }, - ) -) - -func init() { - prometheus.MustRegister(QueryDurationHistogram) - prometheus.MustRegister(QueryTotalCounter) - prometheus.MustRegister(ConnGauge) - prometheus.MustRegister(ExecuteErrorCounter) - prometheus.MustRegister(CriticalErrorCounter) - prometheus.MustRegister(ServerEventCounter) - prometheus.MustRegister(TimeJumpBackCounter) - prometheus.MustRegister(KeepAliveCounter) - prometheus.MustRegister(PlanCacheCounter) - prometheus.MustRegister(HandShakeErrorCounter) -} - -// ExecuteErrorToLabel converts an execute error to label. -func ExecuteErrorToLabel(err error) string { - err = errors.Cause(err) - switch x := err.(type) { - case *terror.Error: - return x.Class().String() + ":" + strconv.Itoa(int(x.Code())) - default: - return "unknown" - } -} diff --git a/vendor/github.com/pingcap/tidb/metrics/session.go b/vendor/github.com/pingcap/tidb/metrics/session.go deleted file mode 100644 index 5f75ace..0000000 --- a/vendor/github.com/pingcap/tidb/metrics/session.go +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright 2018 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package metrics - -import "github.com/prometheus/client_golang/prometheus" - -// Session metrics. -var ( - SessionExecuteParseDuration = prometheus.NewHistogram( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "session", - Name: "parse_duration_seconds", - Help: "Bucketed histogram of processing time (s) in parse SQL.", - Buckets: prometheus.LinearBuckets(0.00004, 0.00001, 13), - }) - SessionExecuteCompileDuration = prometheus.NewHistogram( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "session", - Name: "compile_duration_seconds", - Help: "Bucketed histogram of processing time (s) in query optimize.", - Buckets: prometheus.LinearBuckets(0.00004, 0.00001, 13), - }) - SessionExecuteRunDuration = prometheus.NewHistogram( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "session", - Name: "execute_duration_seconds", - Help: "Bucketed histogram of processing time (s) in running executor.", - Buckets: prometheus.ExponentialBuckets(0.0001, 2, 13), - }) - SchemaLeaseErrorCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "session", - Name: "schema_lease_error_total", - Help: "Counter of schema lease error", - }, []string{LblType}) - SessionRetry = prometheus.NewHistogram( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "session", - Name: "retry_num", - Help: "Bucketed histogram of session retry count.", - Buckets: prometheus.LinearBuckets(0, 1, 10), - }) - SessionRetryErrorCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "session", - Name: "retry_error_total", - Help: "Counter of session retry error.", - }, []string{LblType}) - TransactionCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "session", - Name: "transaction_total", - Help: "Counter of transactions.", - }, []string{LblType}) - - SessionRestrictedSQLCounter = prometheus.NewCounter( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "session", - Name: "restricted_sql_total", - Help: "Counter of internal restricted sql.", - }) - - StatementPerTransaction = prometheus.NewHistogramVec( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "session", - Name: "transaction_statement_num", - Help: "Buckated histogram of statements count in each transaction.", - Buckets: prometheus.ExponentialBuckets(1, 2, 12), - }, []string{LblType}) - - TransactionDuration = prometheus.NewHistogramVec( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "session", - Name: "transaction_duration_seconds", - Help: "Bucketed histogram of a transaction execution duration, including retry.", - Buckets: prometheus.ExponentialBuckets(0.001, 2, 16), // range 1ms ~ 64s - }, []string{LblType}) -) - -// Label constants. -const ( - LblUnretryable = "unretryable" - LblReachMax = "reach_max" - LblOK = "ok" - LblError = "error" - LblRollback = "rollback" - LblType = "type" - LblResult = "result" -) - -func init() { - prometheus.MustRegister(SessionExecuteParseDuration) - prometheus.MustRegister(SessionExecuteCompileDuration) - prometheus.MustRegister(SessionExecuteRunDuration) - prometheus.MustRegister(SchemaLeaseErrorCounter) - prometheus.MustRegister(SessionRetry) - prometheus.MustRegister(SessionRetryErrorCounter) - prometheus.MustRegister(TransactionCounter) - prometheus.MustRegister(SessionRestrictedSQLCounter) - prometheus.MustRegister(StatementPerTransaction) - prometheus.MustRegister(TransactionDuration) -} diff --git a/vendor/github.com/pingcap/tidb/metrics/stats.go b/vendor/github.com/pingcap/tidb/metrics/stats.go deleted file mode 100644 index eb1189b..0000000 --- a/vendor/github.com/pingcap/tidb/metrics/stats.go +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2018 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package metrics - -import ( - "github.com/prometheus/client_golang/prometheus" -) - -// Stats metrics. -var ( - AutoAnalyzeHistogram = prometheus.NewHistogram( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "statistics", - Name: "auto_analyze_duration_seconds", - Help: "Bucketed histogram of processing time (s) of auto analyze.", - Buckets: prometheus.ExponentialBuckets(0.01, 2, 20), - }) - - AutoAnalyzeCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "statistics", - Name: "auto_analyze_total", - Help: "Counter of auto analyze.", - }, []string{LblType}) - - StatsInaccuracyRate = prometheus.NewHistogram( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "statistics", - Name: "stats_inaccuracy_rate", - Help: "Bucketed histogram of stats inaccuracy rate.", - Buckets: prometheus.ExponentialBuckets(0.01, 2, 14), - }) - - PseudoEstimation = prometheus.NewCounter( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "statistics", - Name: "pseudo_estimation_total", - Help: "Counter of pseudo estimation caused by outdated stats.", - }) - - DumpFeedbackCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "statistics", - Name: "dump_feedback_total", - Help: "Counter of dumping feedback.", - }, []string{LblType}) - - UpdateStatsCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "statistics", - Name: "update_stats_total", - Help: "Counter of updating stats using feedback.", - }, []string{LblType}) - - StoreQueryFeedbackCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "statistics", - Name: "store_query_feedback_total", - Help: "Counter of storing query feedback.", - }, []string{LblType}) -) - -func init() { - prometheus.MustRegister(AutoAnalyzeHistogram) - prometheus.MustRegister(AutoAnalyzeCounter) - prometheus.MustRegister(StatsInaccuracyRate) - prometheus.MustRegister(PseudoEstimation) - prometheus.MustRegister(DumpFeedbackCounter) - prometheus.MustRegister(UpdateStatsCounter) - prometheus.MustRegister(StoreQueryFeedbackCounter) -} diff --git a/vendor/github.com/pingcap/tidb/metrics/tikvclient.go b/vendor/github.com/pingcap/tidb/metrics/tikvclient.go deleted file mode 100644 index 6e7311b..0000000 --- a/vendor/github.com/pingcap/tidb/metrics/tikvclient.go +++ /dev/null @@ -1,202 +0,0 @@ -// Copyright 2018 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package metrics - -import "github.com/prometheus/client_golang/prometheus" - -// TiKVClient metrics. -var ( - TiKVTxnCounter = prometheus.NewCounter( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "tikvclient", - Name: "txn_total", - Help: "Counter of created txns.", - }) - - TiKVSnapshotCounter = prometheus.NewCounter( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "tikvclient", - Name: "snapshot_total", - Help: "Counter of snapshots.", - }) - - TiKVTxnCmdCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "tikvclient", - Name: "txn_cmd_total", - Help: "Counter of txn commands.", - }, []string{LblType}) - - TiKVTxnCmdHistogram = prometheus.NewHistogramVec( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "tikvclient", - Name: "txn_cmd_duration_seconds", - Help: "Bucketed histogram of processing time of txn cmds.", - Buckets: prometheus.ExponentialBuckets(0.0005, 2, 20), - }, []string{LblType}) - - TiKVBackoffCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "tikvclient", - Name: "backoff_total", - Help: "Counter of backoff.", - }, []string{LblType}) - - TiKVBackoffHistogram = prometheus.NewHistogram( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "tikvclient", - Name: "backoff_seconds", - Help: "total backoff seconds of a single backoffer.", - Buckets: prometheus.ExponentialBuckets(0.0005, 2, 20), - }) - - TiKVConnPoolHistogram = prometheus.NewHistogramVec( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "tikvclient", - Name: "get_conn_seconds", - Help: "Bucketed histogram of taking conn from conn pool.", - Buckets: prometheus.ExponentialBuckets(0.0005, 2, 20), - }, []string{LblType}) - - TiKVSendReqHistogram = prometheus.NewHistogramVec( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "tikvclient", - Name: "request_seconds", - Help: "Bucketed histogram of sending request duration.", - Buckets: prometheus.ExponentialBuckets(0.0005, 2, 20), - }, []string{LblType, "store"}) - - TiKVCoprocessorHistogram = prometheus.NewHistogram( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "tikvclient", - Name: "cop_duration_seconds", - Help: "Run duration of a single coprocessor task, includes backoff time.", - Buckets: prometheus.ExponentialBuckets(0.0005, 2, 20), - }) - - TiKVLockResolverCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "tikvclient", - Name: "lock_resolver_actions_total", - Help: "Counter of lock resolver actions.", - }, []string{LblType}) - - TiKVRegionErrorCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "tikvclient", - Name: "region_err_total", - Help: "Counter of region errors.", - }, []string{LblType}) - - TiKVTxnWriteKVCountHistogram = prometheus.NewHistogram( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "tikvclient", - Name: "txn_write_kv_num", - Help: "Count of kv pairs to write in a transaction.", - Buckets: prometheus.ExponentialBuckets(1, 2, 21), - }) - - TiKVTxnWriteSizeHistogram = prometheus.NewHistogram( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "tikvclient", - Name: "txn_write_size_bytes", - Help: "Size of kv pairs to write in a transaction.", - Buckets: prometheus.ExponentialBuckets(1, 2, 21), - }) - - TiKVRawkvCmdHistogram = prometheus.NewHistogramVec( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "tikvclient", - Name: "rawkv_cmd_seconds", - Help: "Bucketed histogram of processing time of rawkv cmds.", - Buckets: prometheus.ExponentialBuckets(0.0005, 2, 20), - }, []string{LblType}) - - TiKVRawkvSizeHistogram = prometheus.NewHistogramVec( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "tikvclient", - Name: "rawkv_kv_size_bytes", - Help: "Size of key/value to put, in bytes.", - Buckets: prometheus.ExponentialBuckets(1, 2, 21), - }, []string{LblType}) - - TiKVTxnRegionsNumHistogram = prometheus.NewHistogramVec( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "tikvclient", - Name: "txn_regions_num", - Help: "Number of regions in a transaction.", - Buckets: prometheus.ExponentialBuckets(1, 2, 20), - }, []string{LblType}) - - TiKVLoadSafepointCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "tikvclient", - Name: "load_safepoint_total", - Help: "Counter of load safepoint.", - }, []string{LblType}) - - TiKVSecondaryLockCleanupFailureCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "tikvclient", - Name: "lock_cleanup_task_total", - Help: "failure statistic of secondary lock cleanup task.", - }, []string{LblType}) - - TiKVRegionCacheCounter = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Namespace: "tidb", - Subsystem: "tikvclient", - Name: "region_cache_operations_total", - Help: "Counter of region cache.", - }, []string{LblType, LblResult}) -) - -func init() { - prometheus.MustRegister(TiKVTxnCounter) - prometheus.MustRegister(TiKVSnapshotCounter) - prometheus.MustRegister(TiKVTxnCmdHistogram) - prometheus.MustRegister(TiKVBackoffCounter) - prometheus.MustRegister(TiKVBackoffHistogram) - prometheus.MustRegister(TiKVSendReqHistogram) - prometheus.MustRegister(TiKVConnPoolHistogram) - prometheus.MustRegister(TiKVCoprocessorHistogram) - prometheus.MustRegister(TiKVLockResolverCounter) - prometheus.MustRegister(TiKVRegionErrorCounter) - prometheus.MustRegister(TiKVTxnWriteKVCountHistogram) - prometheus.MustRegister(TiKVTxnWriteSizeHistogram) - prometheus.MustRegister(TiKVRawkvCmdHistogram) - prometheus.MustRegister(TiKVRawkvSizeHistogram) - prometheus.MustRegister(TiKVTxnRegionsNumHistogram) - prometheus.MustRegister(TiKVLoadSafepointCounter) - prometheus.MustRegister(TiKVSecondaryLockCleanupFailureCounter) - prometheus.MustRegister(TiKVRegionCacheCounter) -} diff --git a/vendor/github.com/pingcap/tidb/model/ddl.go b/vendor/github.com/pingcap/tidb/model/ddl.go deleted file mode 100644 index 8e27331..0000000 --- a/vendor/github.com/pingcap/tidb/model/ddl.go +++ /dev/null @@ -1,374 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package model - -import ( - "encoding/json" - "fmt" - "math" - "sync" - "time" - - "github.com/juju/errors" - "github.com/pingcap/tidb/terror" -) - -// ActionType is the type for DDL action. -type ActionType byte - -// List DDL actions. -const ( - ActionNone ActionType = 0 - ActionCreateSchema ActionType = 1 - ActionDropSchema ActionType = 2 - ActionCreateTable ActionType = 3 - ActionDropTable ActionType = 4 - ActionAddColumn ActionType = 5 - ActionDropColumn ActionType = 6 - ActionAddIndex ActionType = 7 - ActionDropIndex ActionType = 8 - ActionAddForeignKey ActionType = 9 - ActionDropForeignKey ActionType = 10 - ActionTruncateTable ActionType = 11 - ActionModifyColumn ActionType = 12 - ActionRebaseAutoID ActionType = 13 - ActionRenameTable ActionType = 14 - ActionSetDefaultValue ActionType = 15 - ActionShardRowID ActionType = 16 - ActionModifyTableComment ActionType = 17 - ActionRenameIndex ActionType = 18 - ActionAddTablePartition ActionType = 19 -) - -var actionMap = map[ActionType]string{ - ActionCreateSchema: "create schema", - ActionDropSchema: "drop schema", - ActionCreateTable: "create table", - ActionDropTable: "drop table", - ActionAddColumn: "add column", - ActionDropColumn: "drop column", - ActionAddIndex: "add index", - ActionDropIndex: "drop index", - ActionAddForeignKey: "add foreign key", - ActionDropForeignKey: "drop foreign key", - ActionTruncateTable: "truncate table", - ActionModifyColumn: "modify column", - ActionRebaseAutoID: "rebase auto_increment ID", - ActionRenameTable: "rename table", - ActionSetDefaultValue: "set default value", - ActionShardRowID: "shard row ID", - ActionModifyTableComment: "modify table comment", - ActionRenameIndex: "rename index", - ActionAddTablePartition: "add partition", -} - -// String return current ddl action in string -func (action ActionType) String() string { - if v, ok := actionMap[action]; ok { - return v - } - return "none" -} - -// HistoryInfo is used for binlog. -type HistoryInfo struct { - SchemaVersion int64 - DBInfo *DBInfo - TableInfo *TableInfo - FinishedTS uint64 -} - -// AddDBInfo adds schema version and schema information that are used for binlog. -// dbInfo is added in the following operations: create database, drop database. -func (h *HistoryInfo) AddDBInfo(schemaVer int64, dbInfo *DBInfo) { - h.SchemaVersion = schemaVer - h.DBInfo = dbInfo -} - -// AddTableInfo adds schema version and table information that are used for binlog. -// tblInfo is added except for the following operations: create database, drop database. -func (h *HistoryInfo) AddTableInfo(schemaVer int64, tblInfo *TableInfo) { - h.SchemaVersion = schemaVer - h.TableInfo = tblInfo -} - -// Clean cleans history information. -func (h *HistoryInfo) Clean() { - h.SchemaVersion = 0 - h.DBInfo = nil - h.TableInfo = nil -} - -// DDLReorgMeta is meta info of DDL reorganization. -type DDLReorgMeta struct { - // EndHandle is the last handle of the adding indices table. - // We should only backfill indices in the range [startHandle, EndHandle]. - EndHandle int64 `json:"end_handle"` -} - -// NewDDLReorgMeta new a DDLReorgMeta. -func NewDDLReorgMeta() *DDLReorgMeta { - return &DDLReorgMeta{ - EndHandle: math.MaxInt64, - } -} - -// Job is for a DDL operation. -type Job struct { - ID int64 `json:"id"` - Type ActionType `json:"type"` - SchemaID int64 `json:"schema_id"` - TableID int64 `json:"table_id"` - State JobState `json:"state"` - Error *terror.Error `json:"err"` - // ErrorCount will be increased, every time we meet an error when running job. - ErrorCount int64 `json:"err_count"` - // RowCount means the number of rows that are processed. - RowCount int64 `json:"row_count"` - Mu sync.Mutex `json:"-"` - Args []interface{} `json:"-"` - // RawArgs : We must use json raw message to delay parsing special args. - RawArgs json.RawMessage `json:"raw_args"` - SchemaState SchemaState `json:"schema_state"` - // SnapshotVer means snapshot version for this job. - SnapshotVer uint64 `json:"snapshot_ver"` - // StartTS uses timestamp allocated by TSO. - // Now it's the TS when we put the job to TiKV queue. - StartTS uint64 `json:"start_ts"` - // DependencyID is the job's ID that the current job depends on. - DependencyID int64 `json:"dependency_id"` - // Query string of the ddl job. - Query string `json:"query"` - BinlogInfo *HistoryInfo `json:"binlog"` - - // Version indicates the DDL job version. For old jobs, it will be 0. - Version int64 `json:"version"` - - // ReorgMeta is meta info of ddl reorganization. - ReorgMeta *DDLReorgMeta `json:"reorg_meta"` -} - -// FinishTableJob is called when a job is finished. -// It updates the job's state information and adds tblInfo to the binlog. -func (job *Job) FinishTableJob(jobState JobState, schemaState SchemaState, ver int64, tblInfo *TableInfo) { - job.State = jobState - job.SchemaState = schemaState - job.BinlogInfo.AddTableInfo(ver, tblInfo) -} - -// FinishDBJob is called when a job is finished. -// It updates the job's state information and adds dbInfo the binlog. -func (job *Job) FinishDBJob(jobState JobState, schemaState SchemaState, ver int64, dbInfo *DBInfo) { - job.State = jobState - job.SchemaState = schemaState - job.BinlogInfo.AddDBInfo(ver, dbInfo) -} - -// TSConvert2Time converts timestamp to time. -func TSConvert2Time(ts uint64) time.Time { - t := int64(ts >> 18) // 18 is for the logical time. - return time.Unix(t/1e3, (t%1e3)*1e6) -} - -// SetRowCount sets the number of rows. Make sure it can pass `make race`. -func (job *Job) SetRowCount(count int64) { - job.Mu.Lock() - defer job.Mu.Unlock() - - job.RowCount = count -} - -// GetRowCount gets the number of rows. Make sure it can pass `make race`. -func (job *Job) GetRowCount() int64 { - job.Mu.Lock() - defer job.Mu.Unlock() - - return job.RowCount -} - -// Encode encodes job with json format. -// updateRawArgs is used to determine whether to update the raw args. -func (job *Job) Encode(updateRawArgs bool) ([]byte, error) { - var err error - if updateRawArgs { - job.RawArgs, err = json.Marshal(job.Args) - if err != nil { - return nil, errors.Trace(err) - } - } - - var b []byte - job.Mu.Lock() - defer job.Mu.Unlock() - b, err = json.Marshal(job) - - return b, errors.Trace(err) -} - -// Decode decodes job from the json buffer, we must use DecodeArgs later to -// decode special args for this job. -func (job *Job) Decode(b []byte) error { - err := json.Unmarshal(b, job) - return errors.Trace(err) -} - -// DecodeArgs decodes job args. -func (job *Job) DecodeArgs(args ...interface{}) error { - job.Args = args - err := json.Unmarshal(job.RawArgs, &job.Args) - return errors.Trace(err) -} - -// String implements fmt.Stringer interface. -func (job *Job) String() string { - rowCount := job.GetRowCount() - return fmt.Sprintf("ID:%d, Type:%s, State:%s, SchemaState:%s, SchemaID:%d, TableID:%d, RowCount:%d, ArgLen:%d, start time: %v, Err:%v, ErrCount:%d, SnapshotVersion:%v", - job.ID, job.Type, job.State, job.SchemaState, job.SchemaID, job.TableID, rowCount, len(job.Args), TSConvert2Time(job.StartTS), job.Error, job.ErrorCount, job.SnapshotVer) -} - -func (job *Job) hasDependentSchema(other *Job) (bool, error) { - if other.Type == ActionDropSchema || other.Type == ActionCreateSchema { - if other.SchemaID == job.SchemaID { - return true, nil - } - if job.Type == ActionRenameTable { - var oldSchemaID int64 - if err := job.DecodeArgs(&oldSchemaID); err != nil { - return false, errors.Trace(err) - } - if other.SchemaID == oldSchemaID { - return true, nil - } - } - } - return false, nil -} - -// IsDependentOn returns whether the job depends on "other". -// How to check the job depends on "other"? -// 1. The two jobs handle the same database when one of the two jobs is an ActionDropSchema or ActionCreateSchema type. -// 2. Or the two jobs handle the same table. -func (job *Job) IsDependentOn(other *Job) (bool, error) { - isDependent, err := job.hasDependentSchema(other) - if err != nil || isDependent { - return isDependent, errors.Trace(err) - } - isDependent, err = other.hasDependentSchema(job) - if err != nil || isDependent { - return isDependent, errors.Trace(err) - } - - if other.TableID == job.TableID { - return true, nil - } - return false, nil -} - -// IsFinished returns whether job is finished or not. -// If the job state is Done or Cancelled, it is finished. -func (job *Job) IsFinished() bool { - return job.State == JobStateDone || job.State == JobStateRollbackDone || job.State == JobStateCancelled -} - -// IsCancelled returns whether the job is cancelled or not. -func (job *Job) IsCancelled() bool { - return job.State == JobStateCancelled -} - -// IsRollbackDone returns whether the job is rolled back or not. -func (job *Job) IsRollbackDone() bool { - return job.State == JobStateRollbackDone -} - -// IsRollingback returns whether the job is rolling back or not. -func (job *Job) IsRollingback() bool { - return job.State == JobStateRollingback -} - -// IsCancelling returns whether the job is cancelling or not. -func (job *Job) IsCancelling() bool { - return job.State == JobStateCancelling -} - -// IsSynced returns whether the DDL modification is synced among all TiDB servers. -func (job *Job) IsSynced() bool { - return job.State == JobStateSynced -} - -// IsDone returns whether job is done. -func (job *Job) IsDone() bool { - return job.State == JobStateDone -} - -// IsRunning returns whether job is still running or not. -func (job *Job) IsRunning() bool { - return job.State == JobStateRunning -} - -// JobState is for job state. -type JobState byte - -// List job states. -const ( - JobStateNone JobState = 0 - JobStateRunning JobState = 1 - // When DDL encountered an unrecoverable error at reorganization state, - // some keys has been added already, we need to remove them. - // JobStateRollingback is the state to do the rolling back job. - JobStateRollingback JobState = 2 - JobStateRollbackDone JobState = 3 - JobStateDone JobState = 4 - JobStateCancelled JobState = 5 - // JobStateSynced is used to mark the information about the completion of this job - // has been synchronized to all servers. - JobStateSynced JobState = 6 - // JobStateCancelling is used to mark the DDL job is cancelled by the client, but the DDL work hasn't handle it. - JobStateCancelling JobState = 7 -) - -// String implements fmt.Stringer interface. -func (s JobState) String() string { - switch s { - case JobStateRunning: - return "running" - case JobStateRollingback: - return "rollingback" - case JobStateRollbackDone: - return "rollback done" - case JobStateDone: - return "done" - case JobStateCancelled: - return "cancelled" - case JobStateCancelling: - return "cancelling" - case JobStateSynced: - return "synced" - default: - return "none" - } -} - -// SchemaDiff contains the schema modification at a particular schema version. -// It is used to reduce schema reload cost. -type SchemaDiff struct { - Version int64 `json:"version"` - Type ActionType `json:"type"` - SchemaID int64 `json:"schema_id"` - TableID int64 `json:"table_id"` - - // OldTableID is the table ID before truncate, only used by truncate table DDL. - OldTableID int64 `json:"old_table_id"` - // OldSchemaID is the schema ID before rename table, only used by rename table DDL. - OldSchemaID int64 `json:"old_schema_id"` -} diff --git a/vendor/github.com/pingcap/tidb/model/flags.go b/vendor/github.com/pingcap/tidb/model/flags.go deleted file mode 100644 index 33b040e..0000000 --- a/vendor/github.com/pingcap/tidb/model/flags.go +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2018 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package model - -// Flags are used by tipb.SelectRequest.Flags to handle execution mode, like how to handle truncate error. -const ( - // FlagIgnoreTruncate indicates if truncate error should be ignored. - // Read-only statements should ignore truncate error, write statements should not ignore truncate error. - FlagIgnoreTruncate uint64 = 1 - // FlagTruncateAsWarning indicates if truncate error should be returned as warning. - // This flag only matters if FlagIgnoreTruncate is not set, in strict sql mode, truncate error should - // be returned as error, in non-strict sql mode, truncate error should be saved as warning. - FlagTruncateAsWarning = 1 << 1 - // FlagPadCharToFullLength indicates if sql_mode 'PAD_CHAR_TO_FULL_LENGTH' is set. - FlagPadCharToFullLength = 1 << 2 - // FlagInInsertStmt indicates if this is a INSERT statement. - FlagInInsertStmt = 1 << 3 - // FlagInUpdateOrDeleteStmt indicates if this is a UPDATE statement or a DELETE statement. - FlagInUpdateOrDeleteStmt = 1 << 4 - // FlagInSelectStmt indicates if this is a SELECT statement. - FlagInSelectStmt = 1 << 5 - // FlagOverflowAsWarning indicates if overflow error should be returned as warning. - // In strict sql mode, overflow error should be returned as error, - // in non-strict sql mode, overflow error should be saved as warning. - FlagOverflowAsWarning = 1 << 6 - // FlagIgnoreZeroInDate indicates if ZeroInDate error should be ignored. - // Read-only statements should ignore ZeroInDate error. - // Write statements should not ignore ZeroInDate error in strict sql mode. - FlagIgnoreZeroInDate = 1 << 7 - // FlagDividedByZeroAsWarning indicates if DividedByZero should be returned as warning. - FlagDividedByZeroAsWarning = 1 << 8 -) diff --git a/vendor/github.com/pingcap/tidb/model/model.go b/vendor/github.com/pingcap/tidb/model/model.go deleted file mode 100644 index d7d9c4f..0000000 --- a/vendor/github.com/pingcap/tidb/model/model.go +++ /dev/null @@ -1,495 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package model - -import ( - "strings" - "time" - - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/types" - "github.com/pingcap/tipb/go-tipb" -) - -// SchemaState is the state for schema elements. -type SchemaState byte - -const ( - // StateNone means this schema element is absent and can't be used. - StateNone SchemaState = iota - // StateDeleteOnly means we can only delete items for this schema element. - StateDeleteOnly - // StateWriteOnly means we can use any write operation on this schema element, - // but outer can't read the changed data. - StateWriteOnly - // StateWriteReorganization means we are re-organizing whole data after write only state. - StateWriteReorganization - // StateDeleteReorganization means we are re-organizing whole data after delete only state. - StateDeleteReorganization - // StatePublic means this schema element is ok for all write and read operations. - StatePublic -) - -// String implements fmt.Stringer interface. -func (s SchemaState) String() string { - switch s { - case StateDeleteOnly: - return "delete only" - case StateWriteOnly: - return "write only" - case StateWriteReorganization: - return "write reorganization" - case StateDeleteReorganization: - return "delete reorganization" - case StatePublic: - return "public" - default: - return "none" - } -} - -// ColumnInfo provides meta data describing of a table column. -type ColumnInfo struct { - ID int64 `json:"id"` - Name CIStr `json:"name"` - Offset int `json:"offset"` - OriginDefaultValue interface{} `json:"origin_default"` - DefaultValue interface{} `json:"default"` - GeneratedExprString string `json:"generated_expr_string"` - GeneratedStored bool `json:"generated_stored"` - Dependences map[string]struct{} `json:"dependences"` - types.FieldType `json:"type"` - State SchemaState `json:"state"` - Comment string `json:"comment"` -} - -// Clone clones ColumnInfo. -func (c *ColumnInfo) Clone() *ColumnInfo { - nc := *c - return &nc -} - -// IsGenerated returns true if the column is generated column. -func (c *ColumnInfo) IsGenerated() bool { - return len(c.GeneratedExprString) != 0 -} - -// FindColumnInfo finds ColumnInfo in cols by name. -func FindColumnInfo(cols []*ColumnInfo, name string) *ColumnInfo { - name = strings.ToLower(name) - for _, col := range cols { - if col.Name.L == name { - return col - } - } - - return nil -} - -// ExtraHandleID is the column ID of column which we need to append to schema to occupy the handle's position -// for use of execution phase. -const ExtraHandleID = -1 - -// ExtraHandleName is the name of ExtraHandle Column. -var ExtraHandleName = NewCIStr("_tidb_rowid") - -// TableInfo provides meta data describing a DB table. -type TableInfo struct { - ID int64 `json:"id"` - Name CIStr `json:"name"` - Charset string `json:"charset"` - Collate string `json:"collate"` - // Columns are listed in the order in which they appear in the schema. - Columns []*ColumnInfo `json:"cols"` - Indices []*IndexInfo `json:"index_info"` - ForeignKeys []*FKInfo `json:"fk_info"` - State SchemaState `json:"state"` - PKIsHandle bool `json:"pk_is_handle"` - Comment string `json:"comment"` - AutoIncID int64 `json:"auto_inc_id"` - MaxColumnID int64 `json:"max_col_id"` - MaxIndexID int64 `json:"max_idx_id"` - // UpdateTS is used to record the timestamp of updating the table's schema information. - // These changing schema operations don't include 'truncate table' and 'rename table'. - UpdateTS uint64 `json:"update_timestamp"` - // OldSchemaID : - // Because auto increment ID has schemaID as prefix, - // We need to save original schemaID to keep autoID unchanged - // while renaming a table from one database to another. - // TODO: Remove it. - // Now it only uses for compatibility with the old version that already uses this field. - OldSchemaID int64 `json:"old_schema_id,omitempty"` - - // ShardRowIDBits specify if the implicit row ID is sharded. - ShardRowIDBits uint64 - - Partition *PartitionInfo `json:"partition"` -} - -// GetPartitionInfo returns the partition information. -func (t *TableInfo) GetPartitionInfo() *PartitionInfo { - if t.Partition != nil && t.Partition.Enable { - return t.Partition - } - return nil -} - -// GetUpdateTime gets the table's updating time. -func (t *TableInfo) GetUpdateTime() time.Time { - return TSConvert2Time(t.UpdateTS) -} - -// GetDBID returns the schema ID that is used to create an allocator. -// TODO: Remove it after removing OldSchemaID. -func (t *TableInfo) GetDBID(dbID int64) int64 { - if t.OldSchemaID != 0 { - return t.OldSchemaID - } - return dbID -} - -// Clone clones TableInfo. -func (t *TableInfo) Clone() *TableInfo { - nt := *t - nt.Columns = make([]*ColumnInfo, len(t.Columns)) - nt.Indices = make([]*IndexInfo, len(t.Indices)) - nt.ForeignKeys = make([]*FKInfo, len(t.ForeignKeys)) - - for i := range t.Columns { - nt.Columns[i] = t.Columns[i].Clone() - } - - for i := range t.Indices { - nt.Indices[i] = t.Indices[i].Clone() - } - - for i := range t.ForeignKeys { - nt.ForeignKeys[i] = t.ForeignKeys[i].Clone() - } - - return &nt -} - -// GetPkName will return the pk name if pk exists. -func (t *TableInfo) GetPkName() CIStr { - if t.PKIsHandle { - for _, colInfo := range t.Columns { - if mysql.HasPriKeyFlag(colInfo.Flag) { - return colInfo.Name - } - } - } - return CIStr{} -} - -// GetPkColInfo gets the ColumnInfo of pk if exists. -// Make sure PkIsHandle checked before call this method. -func (t *TableInfo) GetPkColInfo() *ColumnInfo { - for _, colInfo := range t.Columns { - if mysql.HasPriKeyFlag(colInfo.Flag) { - return colInfo - } - } - return nil -} - -// Cols returns the columns of the table in public state. -func (t *TableInfo) Cols() []*ColumnInfo { - publicColumns := make([]*ColumnInfo, len(t.Columns)) - maxOffset := -1 - for _, col := range t.Columns { - if col.State != StatePublic { - continue - } - publicColumns[col.Offset] = col - if maxOffset < col.Offset { - maxOffset = col.Offset - } - } - return publicColumns[0 : maxOffset+1] -} - -// NewExtraHandleColInfo mocks a column info for extra handle column. -func NewExtraHandleColInfo() *ColumnInfo { - colInfo := &ColumnInfo{ - ID: ExtraHandleID, - Name: ExtraHandleName, - } - colInfo.Flag = mysql.PriKeyFlag - colInfo.Tp = mysql.TypeLonglong - colInfo.Flen, colInfo.Decimal = mysql.GetDefaultFieldLengthAndDecimal(mysql.TypeLonglong) - return colInfo -} - -// ColumnIsInIndex checks whether c is included in any indices of t. -func (t *TableInfo) ColumnIsInIndex(c *ColumnInfo) bool { - for _, index := range t.Indices { - for _, column := range index.Columns { - if column.Name.L == c.Name.L { - return true - } - } - } - return false -} - -// PartitionType is the type for PartitionInfo -type PartitionType int - -// Partition types. -const ( - PartitionTypeRange PartitionType = 1 - PartitionTypeHash PartitionType = 2 - PartitionTypeList PartitionType = 3 -) - -func (p PartitionType) String() string { - switch p { - case PartitionTypeRange: - return "RANGE" - case PartitionTypeHash: - return "HASH" - case PartitionTypeList: - return "LIST" - default: - return "" - } - -} - -// PartitionInfo provides table partition info. -type PartitionInfo struct { - Type PartitionType `json:"type"` - Expr string `json:"expr"` - Columns []CIStr `json:"columns"` - - // User may already creates table with partition but table partition is not - // yet supported back then. When Enable is true, write/read need use tid - // rather than pid. - Enable bool `json:"enable"` - - Definitions []PartitionDefinition `json:"definitions"` -} - -// PartitionDefinition defines a single partition. -type PartitionDefinition struct { - ID int64 `json:"id"` - Name string `json:"name"` - LessThan []string `json:"less_than"` - Comment string `json:"comment,omitempty"` -} - -// IndexColumn provides index column info. -type IndexColumn struct { - Name CIStr `json:"name"` // Index name - Offset int `json:"offset"` // Index offset - // Length of prefix when using column prefix - // for indexing; - // UnspecifedLength if not using prefix indexing - Length int `json:"length"` -} - -// Clone clones IndexColumn. -func (i *IndexColumn) Clone() *IndexColumn { - ni := *i - return &ni -} - -// IndexType is the type of index -type IndexType int - -// String implements Stringer interface. -func (t IndexType) String() string { - switch t { - case IndexTypeBtree: - return "BTREE" - case IndexTypeHash: - return "HASH" - default: - return "" - } -} - -// IndexTypes -const ( - IndexTypeInvalid IndexType = iota - IndexTypeBtree - IndexTypeHash -) - -// IndexInfo provides meta data describing a DB index. -// It corresponds to the statement `CREATE INDEX Name ON Table (Column);` -// See https://dev.mysql.com/doc/refman/5.7/en/create-index.html -type IndexInfo struct { - ID int64 `json:"id"` - Name CIStr `json:"idx_name"` // Index name. - Table CIStr `json:"tbl_name"` // Table name. - Columns []*IndexColumn `json:"idx_cols"` // Index columns. - Unique bool `json:"is_unique"` // Whether the index is unique. - Primary bool `json:"is_primary"` // Whether the index is primary key. - State SchemaState `json:"state"` - Comment string `json:"comment"` // Comment - Tp IndexType `json:"index_type"` // Index type: Btree or Hash -} - -// Clone clones IndexInfo. -func (index *IndexInfo) Clone() *IndexInfo { - ni := *index - ni.Columns = make([]*IndexColumn, len(index.Columns)) - for i := range index.Columns { - ni.Columns[i] = index.Columns[i].Clone() - } - return &ni -} - -// HasPrefixIndex returns whether any columns of this index uses prefix length. -func (index *IndexInfo) HasPrefixIndex() bool { - for _, ic := range index.Columns { - if ic.Length != types.UnspecifiedLength { - return true - } - } - return false -} - -// FKInfo provides meta data describing a foreign key constraint. -type FKInfo struct { - ID int64 `json:"id"` - Name CIStr `json:"fk_name"` - RefTable CIStr `json:"ref_table"` - RefCols []CIStr `json:"ref_cols"` - Cols []CIStr `json:"cols"` - OnDelete int `json:"on_delete"` - OnUpdate int `json:"on_update"` - State SchemaState `json:"state"` -} - -// Clone clones FKInfo. -func (fk *FKInfo) Clone() *FKInfo { - nfk := *fk - - nfk.RefCols = make([]CIStr, len(fk.RefCols)) - nfk.Cols = make([]CIStr, len(fk.Cols)) - copy(nfk.RefCols, fk.RefCols) - copy(nfk.Cols, fk.Cols) - - return &nfk -} - -// DBInfo provides meta data describing a DB. -type DBInfo struct { - ID int64 `json:"id"` // Database ID - Name CIStr `json:"db_name"` // DB name. - Charset string `json:"charset"` - Collate string `json:"collate"` - Tables []*TableInfo `json:"-"` // Tables in the DB. - State SchemaState `json:"state"` -} - -// Clone clones DBInfo. -func (db *DBInfo) Clone() *DBInfo { - newInfo := *db - newInfo.Tables = make([]*TableInfo, len(db.Tables)) - for i := range db.Tables { - newInfo.Tables[i] = db.Tables[i].Clone() - } - return &newInfo -} - -// CIStr is case insensitive string. -type CIStr struct { - O string `json:"O"` // Original string. - L string `json:"L"` // Lower case string. -} - -// String implements fmt.Stringer interface. -func (cis CIStr) String() string { - return cis.O -} - -// NewCIStr creates a new CIStr. -func NewCIStr(s string) (cs CIStr) { - cs.O = s - cs.L = strings.ToLower(s) - return -} - -// ColumnsToProto converts a slice of model.ColumnInfo to a slice of tipb.ColumnInfo. -func ColumnsToProto(columns []*ColumnInfo, pkIsHandle bool) []*tipb.ColumnInfo { - cols := make([]*tipb.ColumnInfo, 0, len(columns)) - for _, c := range columns { - col := ColumnToProto(c) - // TODO: Here `PkHandle`'s meaning is changed, we will change it to `IsHandle` when tikv's old select logic - // is abandoned. - if (pkIsHandle && mysql.HasPriKeyFlag(c.Flag)) || c.ID == ExtraHandleID { - col.PkHandle = true - } else { - col.PkHandle = false - } - cols = append(cols, col) - } - return cols -} - -// IndexToProto converts a model.IndexInfo to a tipb.IndexInfo. -func IndexToProto(t *TableInfo, idx *IndexInfo) *tipb.IndexInfo { - pi := &tipb.IndexInfo{ - TableId: t.ID, - IndexId: idx.ID, - Unique: idx.Unique, - } - cols := make([]*tipb.ColumnInfo, 0, len(idx.Columns)+1) - for _, c := range idx.Columns { - cols = append(cols, ColumnToProto(t.Columns[c.Offset])) - } - if t.PKIsHandle { - // Coprocessor needs to know PKHandle column info, so we need to append it. - for _, col := range t.Columns { - if mysql.HasPriKeyFlag(col.Flag) { - colPB := ColumnToProto(col) - colPB.PkHandle = true - cols = append(cols, colPB) - break - } - } - } - pi.Columns = cols - return pi -} - -// ColumnToProto converts model.ColumnInfo to tipb.ColumnInfo. -func ColumnToProto(c *ColumnInfo) *tipb.ColumnInfo { - pc := &tipb.ColumnInfo{ - ColumnId: c.ID, - Collation: collationToProto(c.FieldType.Collate), - ColumnLen: int32(c.FieldType.Flen), - Decimal: int32(c.FieldType.Decimal), - Flag: int32(c.Flag), - Elems: c.Elems, - } - pc.Tp = int32(c.FieldType.Tp) - return pc -} - -// TODO: update it when more collate is supported. -func collationToProto(c string) int32 { - v := mysql.CollationNames[c] - if v == mysql.BinaryCollationID { - return int32(mysql.BinaryCollationID) - } - // We only support binary and utf8_bin collation. - // Setting other collations to utf8_bin for old data compatibility. - // For the data created when we didn't enforce utf8_bin collation in create table. - return int32(mysql.DefaultCollationID) -} diff --git a/vendor/github.com/pingcap/tidb/mysql/charset.go b/vendor/github.com/pingcap/tidb/mysql/charset.go deleted file mode 100644 index 9cd9679..0000000 --- a/vendor/github.com/pingcap/tidb/mysql/charset.go +++ /dev/null @@ -1,608 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package mysql - -import "unicode" - -// CharsetIDs maps charset name to its default collation ID. -var CharsetIDs = map[string]uint8{ - "big5": 1, - "dec8": 3, - "cp850": 4, - "hp8": 6, - "koi8r": 7, - "latin1": 8, - "latin2": 9, - "swe7": 10, - "ascii": 11, - "ujis": 12, - "sjis": 13, - "hebrew": 16, - "tis620": 18, - "euckr": 19, - "koi8u": 22, - "gb2312": 24, - "greek": 25, - "cp1250": 26, - "gbk": 28, - "latin5": 30, - "armscii8": 32, - "utf8": 33, - "ucs2": 35, - "cp866": 36, - "keybcs2": 37, - "macce": 38, - "macroman": 39, - "cp852": 40, - "latin7": 41, - "utf8mb4": 45, - "cp1251": 51, - "utf16": 54, - "utf16le": 56, - "cp1256": 57, - "cp1257": 59, - "utf32": 60, - "binary": 63, - "geostd8": 92, - "cp932": 95, - "eucjpms": 97, -} - -// Charsets maps charset name to its default collation name. -var Charsets = map[string]string{ - "big5": "big5_chinese_ci", - "dec8": "dec8_swedish_ci", - "cp850": "cp850_general_ci", - "hp8": "hp8_english_ci", - "koi8r": "koi8r_general_ci", - "latin1": "latin1_swedish_ci", - "latin2": "latin2_general_ci", - "swe7": "swe7_swedish_ci", - "ascii": "ascii_general_ci", - "ujis": "ujis_japanese_ci", - "sjis": "sjis_japanese_ci", - "hebrew": "hebrew_general_ci", - "tis620": "tis620_thai_ci", - "euckr": "euckr_korean_ci", - "koi8u": "koi8u_general_ci", - "gb2312": "gb2312_chinese_ci", - "greek": "greek_general_ci", - "cp1250": "cp1250_general_ci", - "gbk": "gbk_chinese_ci", - "latin5": "latin5_turkish_ci", - "armscii8": "armscii8_general_ci", - "utf8": "utf8_general_ci", - "ucs2": "ucs2_general_ci", - "cp866": "cp866_general_ci", - "keybcs2": "keybcs2_general_ci", - "macce": "macce_general_ci", - "macroman": "macroman_general_ci", - "cp852": "cp852_general_ci", - "latin7": "latin7_general_ci", - "utf8mb4": "utf8mb4_general_ci", - "cp1251": "cp1251_general_ci", - "utf16": "utf16_general_ci", - "utf16le": "utf16le_general_ci", - "cp1256": "cp1256_general_ci", - "cp1257": "cp1257_general_ci", - "utf32": "utf32_general_ci", - "binary": "binary", - "geostd8": "geostd8_general_ci", - "cp932": "cp932_japanese_ci", - "eucjpms": "eucjpms_japanese_ci", -} - -// Collations maps MySQL default collation ID to its name. -var Collations = map[uint8]string{ - 1: "big5_chinese_ci", - 2: "latin2_czech_cs", - 3: "dec8_swedish_ci", - 4: "cp850_general_ci", - 5: "latin1_german1_ci", - 6: "hp8_english_ci", - 7: "koi8r_general_ci", - 8: "latin1_swedish_ci", - 9: "latin2_general_ci", - 10: "swe7_swedish_ci", - 11: "ascii_general_ci", - 12: "ujis_japanese_ci", - 13: "sjis_japanese_ci", - 14: "cp1251_bulgarian_ci", - 15: "latin1_danish_ci", - 16: "hebrew_general_ci", - 18: "tis620_thai_ci", - 19: "euckr_korean_ci", - 20: "latin7_estonian_cs", - 21: "latin2_hungarian_ci", - 22: "koi8u_general_ci", - 23: "cp1251_ukrainian_ci", - 24: "gb2312_chinese_ci", - 25: "greek_general_ci", - 26: "cp1250_general_ci", - 27: "latin2_croatian_ci", - 28: "gbk_chinese_ci", - 29: "cp1257_lithuanian_ci", - 30: "latin5_turkish_ci", - 31: "latin1_german2_ci", - 32: "armscii8_general_ci", - 33: "utf8_general_ci", - 34: "cp1250_czech_cs", - 35: "ucs2_general_ci", - 36: "cp866_general_ci", - 37: "keybcs2_general_ci", - 38: "macce_general_ci", - 39: "macroman_general_ci", - 40: "cp852_general_ci", - 41: "latin7_general_ci", - 42: "latin7_general_cs", - 43: "macce_bin", - 44: "cp1250_croatian_ci", - 45: "utf8mb4_general_ci", - 46: "utf8mb4_bin", - 47: "latin1_bin", - 48: "latin1_general_ci", - 49: "latin1_general_cs", - 50: "cp1251_bin", - 51: "cp1251_general_ci", - 52: "cp1251_general_cs", - 53: "macroman_bin", - 54: "utf16_general_ci", - 55: "utf16_bin", - 56: "utf16le_general_ci", - 57: "cp1256_general_ci", - 58: "cp1257_bin", - 59: "cp1257_general_ci", - 60: "utf32_general_ci", - 61: "utf32_bin", - 62: "utf16le_bin", - 63: "binary", - 64: "armscii8_bin", - 65: "ascii_bin", - 66: "cp1250_bin", - 67: "cp1256_bin", - 68: "cp866_bin", - 69: "dec8_bin", - 70: "greek_bin", - 71: "hebrew_bin", - 72: "hp8_bin", - 73: "keybcs2_bin", - 74: "koi8r_bin", - 75: "koi8u_bin", - 77: "latin2_bin", - 78: "latin5_bin", - 79: "latin7_bin", - 80: "cp850_bin", - 81: "cp852_bin", - 82: "swe7_bin", - 83: "utf8_bin", - 84: "big5_bin", - 85: "euckr_bin", - 86: "gb2312_bin", - 87: "gbk_bin", - 88: "sjis_bin", - 89: "tis620_bin", - 90: "ucs2_bin", - 91: "ujis_bin", - 92: "geostd8_general_ci", - 93: "geostd8_bin", - 94: "latin1_spanish_ci", - 95: "cp932_japanese_ci", - 96: "cp932_bin", - 97: "eucjpms_japanese_ci", - 98: "eucjpms_bin", - 99: "cp1250_polish_ci", - 101: "utf16_unicode_ci", - 102: "utf16_icelandic_ci", - 103: "utf16_latvian_ci", - 104: "utf16_romanian_ci", - 105: "utf16_slovenian_ci", - 106: "utf16_polish_ci", - 107: "utf16_estonian_ci", - 108: "utf16_spanish_ci", - 109: "utf16_swedish_ci", - 110: "utf16_turkish_ci", - 111: "utf16_czech_ci", - 112: "utf16_danish_ci", - 113: "utf16_lithuanian_ci", - 114: "utf16_slovak_ci", - 115: "utf16_spanish2_ci", - 116: "utf16_roman_ci", - 117: "utf16_persian_ci", - 118: "utf16_esperanto_ci", - 119: "utf16_hungarian_ci", - 120: "utf16_sinhala_ci", - 121: "utf16_german2_ci", - 122: "utf16_croatian_ci", - 123: "utf16_unicode_520_ci", - 124: "utf16_vietnamese_ci", - 128: "ucs2_unicode_ci", - 129: "ucs2_icelandic_ci", - 130: "ucs2_latvian_ci", - 131: "ucs2_romanian_ci", - 132: "ucs2_slovenian_ci", - 133: "ucs2_polish_ci", - 134: "ucs2_estonian_ci", - 135: "ucs2_spanish_ci", - 136: "ucs2_swedish_ci", - 137: "ucs2_turkish_ci", - 138: "ucs2_czech_ci", - 139: "ucs2_danish_ci", - 140: "ucs2_lithuanian_ci", - 141: "ucs2_slovak_ci", - 142: "ucs2_spanish2_ci", - 143: "ucs2_roman_ci", - 144: "ucs2_persian_ci", - 145: "ucs2_esperanto_ci", - 146: "ucs2_hungarian_ci", - 147: "ucs2_sinhala_ci", - 148: "ucs2_german2_ci", - 149: "ucs2_croatian_ci", - 150: "ucs2_unicode_520_ci", - 151: "ucs2_vietnamese_ci", - 159: "ucs2_general_mysql500_ci", - 160: "utf32_unicode_ci", - 161: "utf32_icelandic_ci", - 162: "utf32_latvian_ci", - 163: "utf32_romanian_ci", - 164: "utf32_slovenian_ci", - 165: "utf32_polish_ci", - 166: "utf32_estonian_ci", - 167: "utf32_spanish_ci", - 168: "utf32_swedish_ci", - 169: "utf32_turkish_ci", - 170: "utf32_czech_ci", - 171: "utf32_danish_ci", - 172: "utf32_lithuanian_ci", - 173: "utf32_slovak_ci", - 174: "utf32_spanish2_ci", - 175: "utf32_roman_ci", - 176: "utf32_persian_ci", - 177: "utf32_esperanto_ci", - 178: "utf32_hungarian_ci", - 179: "utf32_sinhala_ci", - 180: "utf32_german2_ci", - 181: "utf32_croatian_ci", - 182: "utf32_unicode_520_ci", - 183: "utf32_vietnamese_ci", - 192: "utf8_unicode_ci", - 193: "utf8_icelandic_ci", - 194: "utf8_latvian_ci", - 195: "utf8_romanian_ci", - 196: "utf8_slovenian_ci", - 197: "utf8_polish_ci", - 198: "utf8_estonian_ci", - 199: "utf8_spanish_ci", - 200: "utf8_swedish_ci", - 201: "utf8_turkish_ci", - 202: "utf8_czech_ci", - 203: "utf8_danish_ci", - 204: "utf8_lithuanian_ci", - 205: "utf8_slovak_ci", - 206: "utf8_spanish2_ci", - 207: "utf8_roman_ci", - 208: "utf8_persian_ci", - 209: "utf8_esperanto_ci", - 210: "utf8_hungarian_ci", - 211: "utf8_sinhala_ci", - 212: "utf8_german2_ci", - 213: "utf8_croatian_ci", - 214: "utf8_unicode_520_ci", - 215: "utf8_vietnamese_ci", - 223: "utf8_general_mysql500_ci", - 224: "utf8mb4_unicode_ci", - 225: "utf8mb4_icelandic_ci", - 226: "utf8mb4_latvian_ci", - 227: "utf8mb4_romanian_ci", - 228: "utf8mb4_slovenian_ci", - 229: "utf8mb4_polish_ci", - 230: "utf8mb4_estonian_ci", - 231: "utf8mb4_spanish_ci", - 232: "utf8mb4_swedish_ci", - 233: "utf8mb4_turkish_ci", - 234: "utf8mb4_czech_ci", - 235: "utf8mb4_danish_ci", - 236: "utf8mb4_lithuanian_ci", - 237: "utf8mb4_slovak_ci", - 238: "utf8mb4_spanish2_ci", - 239: "utf8mb4_roman_ci", - 240: "utf8mb4_persian_ci", - 241: "utf8mb4_esperanto_ci", - 242: "utf8mb4_hungarian_ci", - 243: "utf8mb4_sinhala_ci", - 244: "utf8mb4_german2_ci", - 245: "utf8mb4_croatian_ci", - 246: "utf8mb4_unicode_520_ci", - 247: "utf8mb4_vietnamese_ci", -} - -// CollationNames maps MySQL default collation name to its ID -var CollationNames = map[string]uint8{ - "big5_chinese_ci": 1, - "latin2_czech_cs": 2, - "dec8_swedish_ci": 3, - "cp850_general_ci": 4, - "latin1_german1_ci": 5, - "hp8_english_ci": 6, - "koi8r_general_ci": 7, - "latin1_swedish_ci": 8, - "latin2_general_ci": 9, - "swe7_swedish_ci": 10, - "ascii_general_ci": 11, - "ujis_japanese_ci": 12, - "sjis_japanese_ci": 13, - "cp1251_bulgarian_ci": 14, - "latin1_danish_ci": 15, - "hebrew_general_ci": 16, - "tis620_thai_ci": 18, - "euckr_korean_ci": 19, - "latin7_estonian_cs": 20, - "latin2_hungarian_ci": 21, - "koi8u_general_ci": 22, - "cp1251_ukrainian_ci": 23, - "gb2312_chinese_ci": 24, - "greek_general_ci": 25, - "cp1250_general_ci": 26, - "latin2_croatian_ci": 27, - "gbk_chinese_ci": 28, - "cp1257_lithuanian_ci": 29, - "latin5_turkish_ci": 30, - "latin1_german2_ci": 31, - "armscii8_general_ci": 32, - "utf8_general_ci": 33, - "cp1250_czech_cs": 34, - "ucs2_general_ci": 35, - "cp866_general_ci": 36, - "keybcs2_general_ci": 37, - "macce_general_ci": 38, - "macroman_general_ci": 39, - "cp852_general_ci": 40, - "latin7_general_ci": 41, - "latin7_general_cs": 42, - "macce_bin": 43, - "cp1250_croatian_ci": 44, - "utf8mb4_general_ci": 45, - "utf8mb4_bin": 46, - "latin1_bin": 47, - "latin1_general_ci": 48, - "latin1_general_cs": 49, - "cp1251_bin": 50, - "cp1251_general_ci": 51, - "cp1251_general_cs": 52, - "macroman_bin": 53, - "utf16_general_ci": 54, - "utf16_bin": 55, - "utf16le_general_ci": 56, - "cp1256_general_ci": 57, - "cp1257_bin": 58, - "cp1257_general_ci": 59, - "utf32_general_ci": 60, - "utf32_bin": 61, - "utf16le_bin": 62, - "binary": 63, - "armscii8_bin": 64, - "ascii_bin": 65, - "cp1250_bin": 66, - "cp1256_bin": 67, - "cp866_bin": 68, - "dec8_bin": 69, - "greek_bin": 70, - "hebrew_bin": 71, - "hp8_bin": 72, - "keybcs2_bin": 73, - "koi8r_bin": 74, - "koi8u_bin": 75, - "latin2_bin": 77, - "latin5_bin": 78, - "latin7_bin": 79, - "cp850_bin": 80, - "cp852_bin": 81, - "swe7_bin": 82, - "utf8_bin": 83, - "big5_bin": 84, - "euckr_bin": 85, - "gb2312_bin": 86, - "gbk_bin": 87, - "sjis_bin": 88, - "tis620_bin": 89, - "ucs2_bin": 90, - "ujis_bin": 91, - "geostd8_general_ci": 92, - "geostd8_bin": 93, - "latin1_spanish_ci": 94, - "cp932_japanese_ci": 95, - "cp932_bin": 96, - "eucjpms_japanese_ci": 97, - "eucjpms_bin": 98, - "cp1250_polish_ci": 99, - "utf16_unicode_ci": 101, - "utf16_icelandic_ci": 102, - "utf16_latvian_ci": 103, - "utf16_romanian_ci": 104, - "utf16_slovenian_ci": 105, - "utf16_polish_ci": 106, - "utf16_estonian_ci": 107, - "utf16_spanish_ci": 108, - "utf16_swedish_ci": 109, - "utf16_turkish_ci": 110, - "utf16_czech_ci": 111, - "utf16_danish_ci": 112, - "utf16_lithuanian_ci": 113, - "utf16_slovak_ci": 114, - "utf16_spanish2_ci": 115, - "utf16_roman_ci": 116, - "utf16_persian_ci": 117, - "utf16_esperanto_ci": 118, - "utf16_hungarian_ci": 119, - "utf16_sinhala_ci": 120, - "utf16_german2_ci": 121, - "utf16_croatian_ci": 122, - "utf16_unicode_520_ci": 123, - "utf16_vietnamese_ci": 124, - "ucs2_unicode_ci": 128, - "ucs2_icelandic_ci": 129, - "ucs2_latvian_ci": 130, - "ucs2_romanian_ci": 131, - "ucs2_slovenian_ci": 132, - "ucs2_polish_ci": 133, - "ucs2_estonian_ci": 134, - "ucs2_spanish_ci": 135, - "ucs2_swedish_ci": 136, - "ucs2_turkish_ci": 137, - "ucs2_czech_ci": 138, - "ucs2_danish_ci": 139, - "ucs2_lithuanian_ci": 140, - "ucs2_slovak_ci": 141, - "ucs2_spanish2_ci": 142, - "ucs2_roman_ci": 143, - "ucs2_persian_ci": 144, - "ucs2_esperanto_ci": 145, - "ucs2_hungarian_ci": 146, - "ucs2_sinhala_ci": 147, - "ucs2_german2_ci": 148, - "ucs2_croatian_ci": 149, - "ucs2_unicode_520_ci": 150, - "ucs2_vietnamese_ci": 151, - "ucs2_general_mysql500_ci": 159, - "utf32_unicode_ci": 160, - "utf32_icelandic_ci": 161, - "utf32_latvian_ci": 162, - "utf32_romanian_ci": 163, - "utf32_slovenian_ci": 164, - "utf32_polish_ci": 165, - "utf32_estonian_ci": 166, - "utf32_spanish_ci": 167, - "utf32_swedish_ci": 168, - "utf32_turkish_ci": 169, - "utf32_czech_ci": 170, - "utf32_danish_ci": 171, - "utf32_lithuanian_ci": 172, - "utf32_slovak_ci": 173, - "utf32_spanish2_ci": 174, - "utf32_roman_ci": 175, - "utf32_persian_ci": 176, - "utf32_esperanto_ci": 177, - "utf32_hungarian_ci": 178, - "utf32_sinhala_ci": 179, - "utf32_german2_ci": 180, - "utf32_croatian_ci": 181, - "utf32_unicode_520_ci": 182, - "utf32_vietnamese_ci": 183, - "utf8_unicode_ci": 192, - "utf8_icelandic_ci": 193, - "utf8_latvian_ci": 194, - "utf8_romanian_ci": 195, - "utf8_slovenian_ci": 196, - "utf8_polish_ci": 197, - "utf8_estonian_ci": 198, - "utf8_spanish_ci": 199, - "utf8_swedish_ci": 200, - "utf8_turkish_ci": 201, - "utf8_czech_ci": 202, - "utf8_danish_ci": 203, - "utf8_lithuanian_ci": 204, - "utf8_slovak_ci": 205, - "utf8_spanish2_ci": 206, - "utf8_roman_ci": 207, - "utf8_persian_ci": 208, - "utf8_esperanto_ci": 209, - "utf8_hungarian_ci": 210, - "utf8_sinhala_ci": 211, - "utf8_german2_ci": 212, - "utf8_croatian_ci": 213, - "utf8_unicode_520_ci": 214, - "utf8_vietnamese_ci": 215, - "utf8_general_mysql500_ci": 223, - "utf8mb4_unicode_ci": 224, - "utf8mb4_icelandic_ci": 225, - "utf8mb4_latvian_ci": 226, - "utf8mb4_romanian_ci": 227, - "utf8mb4_slovenian_ci": 228, - "utf8mb4_polish_ci": 229, - "utf8mb4_estonian_ci": 230, - "utf8mb4_spanish_ci": 231, - "utf8mb4_swedish_ci": 232, - "utf8mb4_turkish_ci": 233, - "utf8mb4_czech_ci": 234, - "utf8mb4_danish_ci": 235, - "utf8mb4_lithuanian_ci": 236, - "utf8mb4_slovak_ci": 237, - "utf8mb4_spanish2_ci": 238, - "utf8mb4_roman_ci": 239, - "utf8mb4_persian_ci": 240, - "utf8mb4_esperanto_ci": 241, - "utf8mb4_hungarian_ci": 242, - "utf8mb4_sinhala_ci": 243, - "utf8mb4_german2_ci": 244, - "utf8mb4_croatian_ci": 245, - "utf8mb4_unicode_520_ci": 246, - "utf8mb4_vietnamese_ci": 247, -} - -// MySQL collation information. -const ( - UTF8Charset = "utf8" - UTF8MB4Charset = "utf8mb4" - DefaultCharset = UTF8Charset - DefaultCollationID = 83 - BinaryCollationID = 63 - UTF8DefaultCollation = "utf8_bin" - DefaultCollationName = UTF8DefaultCollation - - // MaxBytesOfCharacter, is the max bytes length of a character, - // refer to RFC3629, in UTF-8, characters from the U+0000..U+10FFFF range - // (the UTF-16 accessible range) are encoded using sequences of 1 to 4 octets. - MaxBytesOfCharacter = 4 -) - -// IsUTF8Charset checks if charset is utf8 or utf8mb4 -func IsUTF8Charset(charset string) bool { - return charset == UTF8Charset || charset == UTF8MB4Charset -} - -// RangeGraph defines valid unicode characters to use in column names. It strictly follows MySQL's definition. -// See #3994. -var RangeGraph = []*unicode.RangeTable{ - // _MY_PNT - unicode.No, - unicode.Mn, - unicode.Me, - unicode.Pc, - unicode.Pd, - unicode.Pd, - unicode.Ps, - unicode.Pe, - unicode.Pi, - unicode.Pf, - unicode.Po, - unicode.Sm, - unicode.Sc, - unicode.Sk, - unicode.So, - // _MY_U - unicode.Lu, - unicode.Lt, - unicode.Nl, - // _MY_L - unicode.Ll, - unicode.Lm, - unicode.Lo, - unicode.Nl, - unicode.Mn, - unicode.Mc, - unicode.Me, - // _MY_NMR - unicode.Nd, - unicode.Nl, - unicode.No, -} diff --git a/vendor/github.com/pingcap/tidb/mysql/const.go b/vendor/github.com/pingcap/tidb/mysql/const.go deleted file mode 100644 index 78ed47d..0000000 --- a/vendor/github.com/pingcap/tidb/mysql/const.go +++ /dev/null @@ -1,633 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package mysql - -import ( - "fmt" - "strings" -) - -func newInvalidModeErr(s string) error { - return NewErr(ErrWrongValueForVar, "sql_mode", s) -} - -// Version information. -var ( - // TiDBReleaseVersion is initialized by (git describe --tags) in Makefile. - TiDBReleaseVersion = "None" - - // ServerVersion is the version information of this tidb-server in MySQL's format. - ServerVersion = fmt.Sprintf("5.7.10-TiDB-%s", TiDBReleaseVersion) -) - -// Header information. -const ( - OKHeader byte = 0x00 - ErrHeader byte = 0xff - EOFHeader byte = 0xfe - LocalInFileHeader byte = 0xfb -) - -// Server information. -const ( - ServerStatusInTrans uint16 = 0x0001 - ServerStatusAutocommit uint16 = 0x0002 - ServerMoreResultsExists uint16 = 0x0008 - ServerStatusNoGoodIndexUsed uint16 = 0x0010 - ServerStatusNoIndexUsed uint16 = 0x0020 - ServerStatusCursorExists uint16 = 0x0040 - ServerStatusLastRowSend uint16 = 0x0080 - ServerStatusDBDropped uint16 = 0x0100 - ServerStatusNoBackslashEscaped uint16 = 0x0200 - ServerStatusMetadataChanged uint16 = 0x0400 - ServerStatusWasSlow uint16 = 0x0800 - ServerPSOutParams uint16 = 0x1000 -) - -// HasCursorExistsFlag return true if cursor exists indicated by server status. -func HasCursorExistsFlag(serverStatus uint16) bool { - return serverStatus&ServerStatusCursorExists > 0 -} - -// Identifier length limitations. -// See https://dev.mysql.com/doc/refman/5.7/en/identifiers.html -const ( - // MaxPayloadLen is the max packet payload length. - MaxPayloadLen = 1<<24 - 1 - // MaxTableNameLength is max length of table name identifier. - MaxTableNameLength = 64 - // MaxDatabaseNameLength is max length of database name identifier. - MaxDatabaseNameLength = 64 - // MaxColumnNameLength is max length of column name identifier. - MaxColumnNameLength = 64 - // MaxKeyParts is max length of key parts. - MaxKeyParts = 16 - // MaxIndexIdentifierLen is max length of index identifier. - MaxIndexIdentifierLen = 64 - // MaxConstraintIdentifierLen is max length of constrain identifier. - MaxConstraintIdentifierLen = 64 - // MaxViewIdentifierLen is max length of view identifier. - MaxViewIdentifierLen = 64 - // MaxAliasIdentifierLen is max length of alias identifier. - MaxAliasIdentifierLen = 256 - // MaxUserDefinedVariableLen is max length of user-defined variable. - MaxUserDefinedVariableLen = 64 -) - -// ErrTextLength error text length limit. -const ErrTextLength = 80 - -// Command information. -const ( - ComSleep byte = iota - ComQuit - ComInitDB - ComQuery - ComFieldList - ComCreateDB - ComDropDB - ComRefresh - ComShutdown - ComStatistics - ComProcessInfo - ComConnect - ComProcessKill - ComDebug - ComPing - ComTime - ComDelayedInsert - ComChangeUser - ComBinlogDump - ComTableDump - ComConnectOut - ComRegisterSlave - ComStmtPrepare - ComStmtExecute - ComStmtSendLongData - ComStmtClose - ComStmtReset - ComSetOption - ComStmtFetch - ComDaemon - ComBinlogDumpGtid - ComResetConnection -) - -// Client information. -const ( - ClientLongPassword uint32 = 1 << iota - ClientFoundRows - ClientLongFlag - ClientConnectWithDB - ClientNoSchema - ClientCompress - ClientODBC - ClientLocalFiles - ClientIgnoreSpace - ClientProtocol41 - ClientInteractive - ClientSSL - ClientIgnoreSigpipe - ClientTransactions - ClientReserved - ClientSecureConnection - ClientMultiStatements - ClientMultiResults - ClientPSMultiResults - ClientPluginAuth - ClientConnectAtts - ClientPluginAuthLenencClientData -) - -// Cache type information. -const ( - TypeNoCache byte = 0xff -) - -// Auth name information. -const ( - AuthName = "mysql_native_password" -) - -// MySQL database and tables. -const ( - // SystemDB is the name of system database. - SystemDB = "mysql" - // UserTable is the table in system db contains user info. - UserTable = "User" - // DBTable is the table in system db contains db scope privilege info. - DBTable = "DB" - // TablePrivTable is the table in system db contains table scope privilege info. - TablePrivTable = "Tables_priv" - // ColumnPrivTable is the table in system db contains column scope privilege info. - ColumnPrivTable = "Columns_priv" - // GlobalVariablesTable is the table contains global system variables. - GlobalVariablesTable = "GLOBAL_VARIABLES" - // GlobalStatusTable is the table contains global status variables. - GlobalStatusTable = "GLOBAL_STATUS" - // TiDBTable is the table contains tidb info. - TiDBTable = "tidb" -) - -// PrivilegeType privilege -type PrivilegeType uint32 - -const ( - _ PrivilegeType = 1 << iota - // CreatePriv is the privilege to create schema/table. - CreatePriv - // SelectPriv is the privilege to read from table. - SelectPriv - // InsertPriv is the privilege to insert data into table. - InsertPriv - // UpdatePriv is the privilege to update data in table. - UpdatePriv - // DeletePriv is the privilege to delete data from table. - DeletePriv - // ShowDBPriv is the privilege to run show databases statement. - ShowDBPriv - // SuperPriv enables many operations and server behaviors. - SuperPriv - // CreateUserPriv is the privilege to create user. - CreateUserPriv - // TriggerPriv is not checked yet. - TriggerPriv - // DropPriv is the privilege to drop schema/table. - DropPriv - // ProcessPriv pertains to display of information about the threads executing within the server. - ProcessPriv - // GrantPriv is the privilege to grant privilege to user. - GrantPriv - // ReferencesPriv is not checked yet. - ReferencesPriv - // AlterPriv is the privilege to run alter statement. - AlterPriv - // ExecutePriv is the privilege to run execute statement. - ExecutePriv - // IndexPriv is the privilege to create/drop index. - IndexPriv - // AllPriv is the privilege for all actions. - AllPriv -) - -// AllPrivMask is the mask for PrivilegeType with all bits set to 1. -// If it's passed to RequestVerification, it means any privilege would be OK. -const AllPrivMask = AllPriv - 1 - -// MySQL type maximum length. -const ( - // For arguments that have no fixed number of decimals, the decimals value is set to 31, - // which is 1 more than the maximum number of decimals permitted for the DECIMAL, FLOAT, and DOUBLE data types. - NotFixedDec = 31 - - MaxIntWidth = 20 - MaxRealWidth = 23 - MaxFloatingTypeScale = 30 - MaxFloatingTypeWidth = 255 - MaxDecimalScale = 30 - MaxDecimalWidth = 65 - MaxDateWidth = 10 // YYYY-MM-DD. - MaxDatetimeWidthNoFsp = 19 // YYYY-MM-DD HH:MM:SS - MaxDatetimeWidthWithFsp = 26 // YYYY-MM-DD HH:MM:SS[.fraction] - MaxDatetimeFullWidth = 29 // YYYY-MM-DD HH:MM:SS.###### AM - MaxDurationWidthNoFsp = 10 // HH:MM:SS - MaxDurationWidthWithFsp = 15 // HH:MM:SS[.fraction] - MaxBlobWidth = 16777216 -) - -// MySQL max type field length. -const ( - MaxFieldCharLength = 255 - MaxFieldVarCharLength = 65535 -) - -// MaxTypeSetMembers is the number of set members. -const MaxTypeSetMembers = 64 - -// PWDHashLen is the length of password's hash. -const PWDHashLen = 40 - -// Priv2UserCol is the privilege to mysql.user table column name. -var Priv2UserCol = map[PrivilegeType]string{ - CreatePriv: "Create_priv", - SelectPriv: "Select_priv", - InsertPriv: "Insert_priv", - UpdatePriv: "Update_priv", - DeletePriv: "Delete_priv", - ShowDBPriv: "Show_db_priv", - SuperPriv: "Super_priv", - CreateUserPriv: "Create_user_priv", - TriggerPriv: "Trigger_priv", - DropPriv: "Drop_priv", - ProcessPriv: "Process_priv", - GrantPriv: "Grant_priv", - ReferencesPriv: "References_priv", - AlterPriv: "Alter_priv", - ExecutePriv: "Execute_priv", - IndexPriv: "Index_priv", -} - -// Col2PrivType is the privilege tables column name to privilege type. -var Col2PrivType = map[string]PrivilegeType{ - "Create_priv": CreatePriv, - "Select_priv": SelectPriv, - "Insert_priv": InsertPriv, - "Update_priv": UpdatePriv, - "Delete_priv": DeletePriv, - "Show_db_priv": ShowDBPriv, - "Super_priv": SuperPriv, - "Create_user_priv": CreateUserPriv, - "Trigger_priv": TriggerPriv, - "Drop_priv": DropPriv, - "Process_priv": ProcessPriv, - "Grant_priv": GrantPriv, - "References_priv": ReferencesPriv, - "Alter_priv": AlterPriv, - "Execute_priv": ExecutePriv, - "Index_priv": IndexPriv, -} - -// AllGlobalPrivs is all the privileges in global scope. -var AllGlobalPrivs = []PrivilegeType{SelectPriv, InsertPriv, UpdatePriv, DeletePriv, CreatePriv, DropPriv, ProcessPriv, GrantPriv, ReferencesPriv, AlterPriv, ShowDBPriv, SuperPriv, ExecutePriv, IndexPriv, CreateUserPriv, TriggerPriv} - -// Priv2Str is the map for privilege to string. -var Priv2Str = map[PrivilegeType]string{ - CreatePriv: "Create", - SelectPriv: "Select", - InsertPriv: "Insert", - UpdatePriv: "Update", - DeletePriv: "Delete", - ShowDBPriv: "Show Databases", - SuperPriv: "Super", - CreateUserPriv: "Create User", - TriggerPriv: "Trigger", - DropPriv: "Drop", - ProcessPriv: "Process", - GrantPriv: "Grant Option", - ReferencesPriv: "References", - AlterPriv: "Alter", - ExecutePriv: "Execute", - IndexPriv: "Index", -} - -// Priv2SetStr is the map for privilege to string. -var Priv2SetStr = map[PrivilegeType]string{ - CreatePriv: "Create", - SelectPriv: "Select", - InsertPriv: "Insert", - UpdatePriv: "Update", - DeletePriv: "Delete", - DropPriv: "Drop", - GrantPriv: "Grant", - AlterPriv: "Alter", - ExecutePriv: "Execute", - IndexPriv: "Index", -} - -// SetStr2Priv is the map for privilege set string to privilege type. -var SetStr2Priv = map[string]PrivilegeType{ - "Create": CreatePriv, - "Select": SelectPriv, - "Insert": InsertPriv, - "Update": UpdatePriv, - "Delete": DeletePriv, - "Drop": DropPriv, - "Grant": GrantPriv, - "Alter": AlterPriv, - "Execute": ExecutePriv, - "Index": IndexPriv, -} - -// AllDBPrivs is all the privileges in database scope. -var AllDBPrivs = []PrivilegeType{SelectPriv, InsertPriv, UpdatePriv, DeletePriv, CreatePriv, DropPriv, GrantPriv, AlterPriv, ExecutePriv, IndexPriv} - -// AllTablePrivs is all the privileges in table scope. -var AllTablePrivs = []PrivilegeType{SelectPriv, InsertPriv, UpdatePriv, DeletePriv, CreatePriv, DropPriv, GrantPriv, AlterPriv, IndexPriv} - -// AllColumnPrivs is all the privileges in column scope. -var AllColumnPrivs = []PrivilegeType{SelectPriv, InsertPriv, UpdatePriv} - -// AllPrivilegeLiteral is the string literal for All Privilege. -const AllPrivilegeLiteral = "ALL PRIVILEGES" - -// DefaultSQLMode for GLOBAL_VARIABLES -const DefaultSQLMode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" - -// DefaultLengthOfMysqlTypes is the map for default physical length of MySQL data types. -// See http://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html -var DefaultLengthOfMysqlTypes = map[byte]int{ - TypeYear: 1, - TypeDate: 3, - TypeDuration: 3, - TypeDatetime: 8, - TypeTimestamp: 4, - - TypeTiny: 1, - TypeShort: 2, - TypeInt24: 3, - TypeLong: 4, - TypeLonglong: 8, - TypeFloat: 4, - TypeDouble: 8, - - TypeEnum: 2, - TypeString: 1, - TypeSet: 8, -} - -// DefaultLengthOfTimeFraction is the map for default physical length of time fractions. -var DefaultLengthOfTimeFraction = map[int]int{ - 0: 0, - - 1: 1, - 2: 1, - - 3: 2, - 4: 2, - - 5: 3, - 6: 3, -} - -// SQLMode is the type for MySQL sql_mode. -// See https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html -type SQLMode int - -// HasNoZeroDateMode detects if 'NO_ZERO_DATE' mode is set in SQLMode -func (m SQLMode) HasNoZeroDateMode() bool { - return m&ModeNoZeroDate == ModeNoZeroDate -} - -// HasNoZeroInDateMode detects if 'NO_ZERO_IN_DATE' mode is set in SQLMode -func (m SQLMode) HasNoZeroInDateMode() bool { - return m&ModeNoZeroInDate == ModeNoZeroInDate -} - -// HasErrorForDivisionByZeroMode detects if 'ERROR_FOR_DIVISION_BY_ZERO' mode is set in SQLMode -func (m SQLMode) HasErrorForDivisionByZeroMode() bool { - return m&ModeErrorForDivisionByZero == ModeErrorForDivisionByZero -} - -// HasOnlyFullGroupBy detects if 'ONLY_FULL_GROUP_BY' mode is set in SQLMode -func (m SQLMode) HasOnlyFullGroupBy() bool { - return m&ModeOnlyFullGroupBy == ModeOnlyFullGroupBy -} - -// HasStrictMode detects if 'STRICT_TRANS_TABLES' or 'STRICT_ALL_TABLES' mode is set in SQLMode -func (m SQLMode) HasStrictMode() bool { - return m&ModeStrictTransTables == ModeStrictTransTables || m&ModeStrictAllTables == ModeStrictAllTables -} - -// HasPipesAsConcatMode detects if 'PIPES_AS_CONCAT' mode is set in SQLMode -func (m SQLMode) HasPipesAsConcatMode() bool { - return m&ModePipesAsConcat == ModePipesAsConcat -} - -// HasNoUnsignedSubtractionMode detects if 'NO_UNSIGNED_SUBTRACTION' mode is set in SQLMode -func (m SQLMode) HasNoUnsignedSubtractionMode() bool { - return m&ModeNoUnsignedSubtraction == ModeNoUnsignedSubtraction -} - -// HasHighNotPrecedenceMode detects if 'HIGH_NOT_PRECEDENCE' mode is set in SQLMode -func (m SQLMode) HasHighNotPrecedenceMode() bool { - return m&ModeHighNotPrecedence == ModeHighNotPrecedence -} - -// HasANSIQuotesMode detects if 'ANSI_QUOTES' mode is set in SQLMode -func (m SQLMode) HasANSIQuotesMode() bool { - return m&ModeANSIQuotes == ModeANSIQuotes -} - -// HasRealAsFloatMode detects if 'REAL_AS_FLOAT' mode is set in SQLMode -func (m SQLMode) HasRealAsFloatMode() bool { - return m&ModeRealAsFloat == ModeRealAsFloat -} - -// HasPadCharToFullLengthMode detects if 'PAD_CHAR_TO_FULL_LENGTH' mode is set in SQLMode -func (m SQLMode) HasPadCharToFullLengthMode() bool { - return m&ModePadCharToFullLength == ModePadCharToFullLength -} - -// HasNoBackslashEscapesMode detects if 'NO_BACKSLASH_ESCAPES' mode is set in SQLMode -func (m SQLMode) HasNoBackslashEscapesMode() bool { - return m&ModeNoBackslashEscapes == ModeNoBackslashEscapes -} - -// HasIgnoreSpaceMode detects if 'IGNORE_SPACE' mode is set in SQLMode -func (m SQLMode) HasIgnoreSpaceMode() bool { - return m&ModeIgnoreSpace == ModeIgnoreSpace -} - -// consts for sql modes. -const ( - ModeNone SQLMode = 0 - ModeRealAsFloat SQLMode = 1 << iota - ModePipesAsConcat - ModeANSIQuotes - ModeIgnoreSpace - ModeNotUsed - ModeOnlyFullGroupBy - ModeNoUnsignedSubtraction - ModeNoDirInCreate - ModePostgreSQL - ModeOracle - ModeMsSQL - ModeDb2 - ModeMaxdb - ModeNoKeyOptions - ModeNoTableOptions - ModeNoFieldOptions - ModeMySQL323 - ModeMySQL40 - ModeANSI - ModeNoAutoValueOnZero - ModeNoBackslashEscapes - ModeStrictTransTables - ModeStrictAllTables - ModeNoZeroInDate - ModeNoZeroDate - ModeInvalidDates - ModeErrorForDivisionByZero - ModeTraditional - ModeNoAutoCreateUser - ModeHighNotPrecedence - ModeNoEngineSubstitution - ModePadCharToFullLength -) - -// FormatSQLModeStr re-format 'SQL_MODE' variable. -func FormatSQLModeStr(s string) string { - s = strings.ToUpper(strings.TrimRight(s, " ")) - parts := strings.Split(s, ",") - var nonEmptyParts []string - existParts := make(map[string]string) - for _, part := range parts { - if len(part) == 0 { - continue - } - if modeParts, ok := CombinationSQLMode[part]; ok { - for _, modePart := range modeParts { - if _, exist := existParts[modePart]; !exist { - nonEmptyParts = append(nonEmptyParts, modePart) - existParts[modePart] = modePart - } - } - } - if _, exist := existParts[part]; !exist { - nonEmptyParts = append(nonEmptyParts, part) - existParts[part] = part - } - } - return strings.Join(nonEmptyParts, ",") -} - -// GetSQLMode gets the sql mode for string literal. SQL_mode is a list of different modes separated by commas. -// The input string must be formatted by 'FormatSQLModeStr' -func GetSQLMode(s string) (SQLMode, error) { - strs := strings.Split(s, ",") - var sqlMode SQLMode - for i, length := 0, len(strs); i < length; i++ { - mode, ok := Str2SQLMode[strs[i]] - if !ok && strs[i] != "" { - return sqlMode, newInvalidModeErr(strs[i]) - } - sqlMode = sqlMode | mode - } - return sqlMode, nil -} - -// Str2SQLMode is the string represent of sql_mode to sql_mode map. -var Str2SQLMode = map[string]SQLMode{ - "REAL_AS_FLOAT": ModeRealAsFloat, - "PIPES_AS_CONCAT": ModePipesAsConcat, - "ANSI_QUOTES": ModeANSIQuotes, - "IGNORE_SPACE": ModeIgnoreSpace, - "NOT_USED": ModeNotUsed, - "ONLY_FULL_GROUP_BY": ModeOnlyFullGroupBy, - "NO_UNSIGNED_SUBTRACTION": ModeNoUnsignedSubtraction, - "NO_DIR_IN_CREATE": ModeNoDirInCreate, - "POSTGRESQL": ModePostgreSQL, - "ORACLE": ModeOracle, - "MSSQL": ModeMsSQL, - "DB2": ModeDb2, - "MAXDB": ModeMaxdb, - "NO_KEY_OPTIONS": ModeNoKeyOptions, - "NO_TABLE_OPTIONS": ModeNoTableOptions, - "NO_FIELD_OPTIONS": ModeNoFieldOptions, - "MYSQL323": ModeMySQL323, - "MYSQL40": ModeMySQL40, - "ANSI": ModeANSI, - "NO_AUTO_VALUE_ON_ZERO": ModeNoAutoValueOnZero, - "NO_BACKSLASH_ESCAPES": ModeNoBackslashEscapes, - "STRICT_TRANS_TABLES": ModeStrictTransTables, - "STRICT_ALL_TABLES": ModeStrictAllTables, - "NO_ZERO_IN_DATE": ModeNoZeroInDate, - "NO_ZERO_DATE": ModeNoZeroDate, - "INVALID_DATES": ModeInvalidDates, - "ERROR_FOR_DIVISION_BY_ZERO": ModeErrorForDivisionByZero, - "TRADITIONAL": ModeTraditional, - "NO_AUTO_CREATE_USER": ModeNoAutoCreateUser, - "HIGH_NOT_PRECEDENCE": ModeHighNotPrecedence, - "NO_ENGINE_SUBSTITUTION": ModeNoEngineSubstitution, - "PAD_CHAR_TO_FULL_LENGTH": ModePadCharToFullLength, -} - -// CombinationSQLMode is the special modes that provided as shorthand for combinations of mode values. -// See https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-combo. -var CombinationSQLMode = map[string][]string{ - "ANSI": {"REAL_AS_FLOAT", "PIPES_AS_CONCAT", "ANSI_QUOTES", "IGNORE_SPACE", "ONLY_FULL_GROUP_BY"}, - "DB2": {"PIPES_AS_CONCAT", "ANSI_QUOTES", "IGNORE_SPACE", "NO_KEY_OPTIONS", "NO_TABLE_OPTIONS", "NO_FIELD_OPTIONS"}, - "MAXDB": {"PIPES_AS_CONCAT", "ANSI_QUOTES", "IGNORE_SPACE", "NO_KEY_OPTIONS", "NO_TABLE_OPTIONS", "NO_FIELD_OPTIONS", "NO_AUTO_CREATE_USER"}, - "MSSQL": {"PIPES_AS_CONCAT", "ANSI_QUOTES", "IGNORE_SPACE", "NO_KEY_OPTIONS", "NO_TABLE_OPTIONS", "NO_FIELD_OPTIONS"}, - "MYSQL323": {"MYSQL323", "HIGH_NOT_PRECEDENCE"}, - "MYSQL40": {"MYSQL40", "HIGH_NOT_PRECEDENCE"}, - "ORACLE": {"PIPES_AS_CONCAT", "ANSI_QUOTES", "IGNORE_SPACE", "NO_KEY_OPTIONS", "NO_TABLE_OPTIONS", "NO_FIELD_OPTIONS", "NO_AUTO_CREATE_USER"}, - "POSTGRESQL": {"PIPES_AS_CONCAT", "ANSI_QUOTES", "IGNORE_SPACE", "NO_KEY_OPTIONS", "NO_TABLE_OPTIONS", "NO_FIELD_OPTIONS"}, - "TRADITIONAL": {"STRICT_TRANS_TABLES", "STRICT_ALL_TABLES", "NO_ZERO_IN_DATE", "NO_ZERO_DATE", "ERROR_FOR_DIVISION_BY_ZERO", "NO_AUTO_CREATE_USER", "NO_ENGINE_SUBSTITUTION"}, -} - -// FormatFunc is the locale format function signature. -type FormatFunc func(string, string) (string, error) - -// GetLocaleFormatFunction get the format function for sepcific locale. -func GetLocaleFormatFunction(loc string) FormatFunc { - locale, exist := locale2FormatFunction[loc] - if !exist { - return formatNotSupport - } - return locale -} - -// locale2FormatFunction is the string represent of locale format function. -var locale2FormatFunction = map[string]FormatFunc{ - "en_US": formatENUS, - "zh_CN": formatZHCN, -} - -// PriorityEnum is defined for Priority const values. -type PriorityEnum int - -// Priority const values. -// See https://dev.mysql.com/doc/refman/5.7/en/insert.html -const ( - NoPriority PriorityEnum = iota - LowPriority - HighPriority - DelayedPriority -) - -// PrimaryKeyName defines primary key name. -const ( - PrimaryKeyName = "PRIMARY" -) diff --git a/vendor/github.com/pingcap/tidb/mysql/errcode.go b/vendor/github.com/pingcap/tidb/mysql/errcode.go deleted file mode 100644 index 30813c1..0000000 --- a/vendor/github.com/pingcap/tidb/mysql/errcode.go +++ /dev/null @@ -1,907 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package mysql - -// MySQL error code. -// This value is numeric. It is not portable to other database systems. -const ( - ErrErrorFirst uint16 = 1000 - ErrHashchk = 1000 - ErrNisamchk = 1001 - ErrNo = 1002 - ErrYes = 1003 - ErrCantCreateFile = 1004 - ErrCantCreateTable = 1005 - ErrCantCreateDB = 1006 - ErrDBCreateExists = 1007 - ErrDBDropExists = 1008 - ErrDBDropDelete = 1009 - ErrDBDropRmdir = 1010 - ErrCantDeleteFile = 1011 - ErrCantFindSystemRec = 1012 - ErrCantGetStat = 1013 - ErrCantGetWd = 1014 - ErrCantLock = 1015 - ErrCantOpenFile = 1016 - ErrFileNotFound = 1017 - ErrCantReadDir = 1018 - ErrCantSetWd = 1019 - ErrCheckread = 1020 - ErrDiskFull = 1021 - ErrDupKey = 1022 - ErrErrorOnClose = 1023 - ErrErrorOnRead = 1024 - ErrErrorOnRename = 1025 - ErrErrorOnWrite = 1026 - ErrFileUsed = 1027 - ErrFilsortAbort = 1028 - ErrFormNotFound = 1029 - ErrGetErrno = 1030 - ErrIllegalHa = 1031 - ErrKeyNotFound = 1032 - ErrNotFormFile = 1033 - ErrNotKeyFile = 1034 - ErrOldKeyFile = 1035 - ErrOpenAsReadonly = 1036 - ErrOutofMemory = 1037 - ErrOutOfSortMemory = 1038 - ErrUnexpectedEOF = 1039 - ErrConCount = 1040 - ErrOutOfResources = 1041 - ErrBadHost = 1042 - ErrHandshake = 1043 - ErrDBaccessDenied = 1044 - ErrAccessDenied = 1045 - ErrNoDB = 1046 - ErrUnknownCom = 1047 - ErrBadNull = 1048 - ErrBadDB = 1049 - ErrTableExists = 1050 - ErrBadTable = 1051 - ErrNonUniq = 1052 - ErrServerShutdown = 1053 - ErrBadField = 1054 - ErrFieldNotInGroupBy = 1055 - ErrWrongGroupField = 1056 - ErrWrongSumSelect = 1057 - ErrWrongValueCount = 1058 - ErrTooLongIdent = 1059 - ErrDupFieldName = 1060 - ErrDupKeyName = 1061 - ErrDupEntry = 1062 - ErrWrongFieldSpec = 1063 - ErrParse = 1064 - ErrEmptyQuery = 1065 - ErrNonuniqTable = 1066 - ErrInvalidDefault = 1067 - ErrMultiplePriKey = 1068 - ErrTooManyKeys = 1069 - ErrTooManyKeyParts = 1070 - ErrTooLongKey = 1071 - ErrKeyColumnDoesNotExits = 1072 - ErrBlobUsedAsKey = 1073 - ErrTooBigFieldlength = 1074 - ErrWrongAutoKey = 1075 - ErrReady = 1076 - ErrNormalShutdown = 1077 - ErrGotSignal = 1078 - ErrShutdownComplete = 1079 - ErrForcingClose = 1080 - ErrIpsock = 1081 - ErrNoSuchIndex = 1082 - ErrWrongFieldTerminators = 1083 - ErrBlobsAndNoTerminated = 1084 - ErrTextFileNotReadable = 1085 - ErrFileExists = 1086 - ErrLoadInfo = 1087 - ErrAlterInfo = 1088 - ErrWrongSubKey = 1089 - ErrCantRemoveAllFields = 1090 - ErrCantDropFieldOrKey = 1091 - ErrInsertInfo = 1092 - ErrUpdateTableUsed = 1093 - ErrNoSuchThread = 1094 - ErrKillDenied = 1095 - ErrNoTablesUsed = 1096 - ErrTooBigSet = 1097 - ErrNoUniqueLogFile = 1098 - ErrTableNotLockedForWrite = 1099 - ErrTableNotLocked = 1100 - ErrBlobCantHaveDefault = 1101 - ErrWrongDBName = 1102 - ErrWrongTableName = 1103 - ErrTooBigSelect = 1104 - ErrUnknown = 1105 - ErrUnknownProcedure = 1106 - ErrWrongParamcountToProcedure = 1107 - ErrWrongParametersToProcedure = 1108 - ErrUnknownTable = 1109 - ErrFieldSpecifiedTwice = 1110 - ErrInvalidGroupFuncUse = 1111 - ErrUnsupportedExtension = 1112 - ErrTableMustHaveColumns = 1113 - ErrRecordFileFull = 1114 - ErrUnknownCharacterSet = 1115 - ErrTooManyTables = 1116 - ErrTooManyFields = 1117 - ErrTooBigRowsize = 1118 - ErrStackOverrun = 1119 - ErrWrongOuterJoin = 1120 - ErrNullColumnInIndex = 1121 - ErrCantFindUdf = 1122 - ErrCantInitializeUdf = 1123 - ErrUdfNoPaths = 1124 - ErrUdfExists = 1125 - ErrCantOpenLibrary = 1126 - ErrCantFindDlEntry = 1127 - ErrFunctionNotDefined = 1128 - ErrHostIsBlocked = 1129 - ErrHostNotPrivileged = 1130 - ErrPasswordAnonymousUser = 1131 - ErrPasswordNotAllowed = 1132 - ErrPasswordNoMatch = 1133 - ErrUpdateInfo = 1134 - ErrCantCreateThread = 1135 - ErrWrongValueCountOnRow = 1136 - ErrCantReopenTable = 1137 - ErrInvalidUseOfNull = 1138 - ErrRegexp = 1139 - ErrMixOfGroupFuncAndFields = 1140 - ErrNonexistingGrant = 1141 - ErrTableaccessDenied = 1142 - ErrColumnaccessDenied = 1143 - ErrIllegalGrantForTable = 1144 - ErrGrantWrongHostOrUser = 1145 - ErrNoSuchTable = 1146 - ErrNonexistingTableGrant = 1147 - ErrNotAllowedCommand = 1148 - ErrSyntax = 1149 - ErrDelayedCantChangeLock = 1150 - ErrTooManyDelayedThreads = 1151 - ErrAbortingConnection = 1152 - ErrNetPacketTooLarge = 1153 - ErrNetReadErrorFromPipe = 1154 - ErrNetFcntl = 1155 - ErrNetPacketsOutOfOrder = 1156 - ErrNetUncompress = 1157 - ErrNetRead = 1158 - ErrNetReadInterrupted = 1159 - ErrNetErrorOnWrite = 1160 - ErrNetWriteInterrupted = 1161 - ErrTooLongString = 1162 - ErrTableCantHandleBlob = 1163 - ErrTableCantHandleAutoIncrement = 1164 - ErrDelayedInsertTableLocked = 1165 - ErrWrongColumnName = 1166 - ErrWrongKeyColumn = 1167 - ErrWrongMrgTable = 1168 - ErrDupUnique = 1169 - ErrBlobKeyWithoutLength = 1170 - ErrPrimaryCantHaveNull = 1171 - ErrTooManyRows = 1172 - ErrRequiresPrimaryKey = 1173 - ErrNoRaidCompiled = 1174 - ErrUpdateWithoutKeyInSafeMode = 1175 - ErrKeyDoesNotExist = 1176 - ErrCheckNoSuchTable = 1177 - ErrCheckNotImplemented = 1178 - ErrCantDoThisDuringAnTransaction = 1179 - ErrErrorDuringCommit = 1180 - ErrErrorDuringRollback = 1181 - ErrErrorDuringFlushLogs = 1182 - ErrErrorDuringCheckpoint = 1183 - ErrNewAbortingConnection = 1184 - ErrDumpNotImplemented = 1185 - ErrFlushMasterBinlogClosed = 1186 - ErrIndexRebuild = 1187 - ErrMaster = 1188 - ErrMasterNetRead = 1189 - ErrMasterNetWrite = 1190 - ErrFtMatchingKeyNotFound = 1191 - ErrLockOrActiveTransaction = 1192 - ErrUnknownSystemVariable = 1193 - ErrCrashedOnUsage = 1194 - ErrCrashedOnRepair = 1195 - ErrWarningNotCompleteRollback = 1196 - ErrTransCacheFull = 1197 - ErrSlaveMustStop = 1198 - ErrSlaveNotRunning = 1199 - ErrBadSlave = 1200 - ErrMasterInfo = 1201 - ErrSlaveThread = 1202 - ErrTooManyUserConnections = 1203 - ErrSetConstantsOnly = 1204 - ErrLockWaitTimeout = 1205 - ErrLockTableFull = 1206 - ErrReadOnlyTransaction = 1207 - ErrDropDBWithReadLock = 1208 - ErrCreateDBWithReadLock = 1209 - ErrWrongArguments = 1210 - ErrNoPermissionToCreateUser = 1211 - ErrUnionTablesInDifferentDir = 1212 - ErrLockDeadlock = 1213 - ErrTableCantHandleFt = 1214 - ErrCannotAddForeign = 1215 - ErrNoReferencedRow = 1216 - ErrRowIsReferenced = 1217 - ErrConnectToMaster = 1218 - ErrQueryOnMaster = 1219 - ErrErrorWhenExecutingCommand = 1220 - ErrWrongUsage = 1221 - ErrWrongNumberOfColumnsInSelect = 1222 - ErrCantUpdateWithReadlock = 1223 - ErrMixingNotAllowed = 1224 - ErrDupArgument = 1225 - ErrUserLimitReached = 1226 - ErrSpecificAccessDenied = 1227 - ErrLocalVariable = 1228 - ErrGlobalVariable = 1229 - ErrNoDefault = 1230 - ErrWrongValueForVar = 1231 - ErrWrongTypeForVar = 1232 - ErrVarCantBeRead = 1233 - ErrCantUseOptionHere = 1234 - ErrNotSupportedYet = 1235 - ErrMasterFatalErrorReadingBinlog = 1236 - ErrSlaveIgnoredTable = 1237 - ErrIncorrectGlobalLocalVar = 1238 - ErrWrongFkDef = 1239 - ErrKeyRefDoNotMatchTableRef = 1240 - ErrOperandColumns = 1241 - ErrSubqueryNo1Row = 1242 - ErrUnknownStmtHandler = 1243 - ErrCorruptHelpDB = 1244 - ErrCyclicReference = 1245 - ErrAutoConvert = 1246 - ErrIllegalReference = 1247 - ErrDerivedMustHaveAlias = 1248 - ErrSelectReduced = 1249 - ErrTablenameNotAllowedHere = 1250 - ErrNotSupportedAuthMode = 1251 - ErrSpatialCantHaveNull = 1252 - ErrCollationCharsetMismatch = 1253 - ErrSlaveWasRunning = 1254 - ErrSlaveWasNotRunning = 1255 - ErrTooBigForUncompress = 1256 - ErrZlibZMem = 1257 - ErrZlibZBuf = 1258 - ErrZlibZData = 1259 - ErrCutValueGroupConcat = 1260 - ErrWarnTooFewRecords = 1261 - ErrWarnTooManyRecords = 1262 - ErrWarnNullToNotnull = 1263 - ErrWarnDataOutOfRange = 1264 - WarnDataTruncated = 1265 - ErrWarnUsingOtherHandler = 1266 - ErrCantAggregate2collations = 1267 - ErrDropUser = 1268 - ErrRevokeGrants = 1269 - ErrCantAggregate3collations = 1270 - ErrCantAggregateNcollations = 1271 - ErrVariableIsNotStruct = 1272 - ErrUnknownCollation = 1273 - ErrSlaveIgnoredSslParams = 1274 - ErrServerIsInSecureAuthMode = 1275 - ErrWarnFieldResolved = 1276 - ErrBadSlaveUntilCond = 1277 - ErrMissingSkipSlave = 1278 - ErrUntilCondIgnored = 1279 - ErrWrongNameForIndex = 1280 - ErrWrongNameForCatalog = 1281 - ErrWarnQcResize = 1282 - ErrBadFtColumn = 1283 - ErrUnknownKeyCache = 1284 - ErrWarnHostnameWontWork = 1285 - ErrUnknownStorageEngine = 1286 - ErrWarnDeprecatedSyntax = 1287 - ErrNonUpdatableTable = 1288 - ErrFeatureDisabled = 1289 - ErrOptionPreventsStatement = 1290 - ErrDuplicatedValueInType = 1291 - ErrTruncatedWrongValue = 1292 - ErrTooMuchAutoTimestampCols = 1293 - ErrInvalidOnUpdate = 1294 - ErrUnsupportedPs = 1295 - ErrGetErrmsg = 1296 - ErrGetTemporaryErrmsg = 1297 - ErrUnknownTimeZone = 1298 - ErrWarnInvalidTimestamp = 1299 - ErrInvalidCharacterString = 1300 - ErrWarnAllowedPacketOverflowed = 1301 - ErrConflictingDeclarations = 1302 - ErrSpNoRecursiveCreate = 1303 - ErrSpAlreadyExists = 1304 - ErrSpDoesNotExist = 1305 - ErrSpDropFailed = 1306 - ErrSpStoreFailed = 1307 - ErrSpLilabelMismatch = 1308 - ErrSpLabelRedefine = 1309 - ErrSpLabelMismatch = 1310 - ErrSpUninitVar = 1311 - ErrSpBadselect = 1312 - ErrSpBadreturn = 1313 - ErrSpBadstatement = 1314 - ErrUpdateLogDeprecatedIgnored = 1315 - ErrUpdateLogDeprecatedTranslated = 1316 - ErrQueryInterrupted = 1317 - ErrSpWrongNoOfArgs = 1318 - ErrSpCondMismatch = 1319 - ErrSpNoreturn = 1320 - ErrSpNoreturnend = 1321 - ErrSpBadCursorQuery = 1322 - ErrSpBadCursorSelect = 1323 - ErrSpCursorMismatch = 1324 - ErrSpCursorAlreadyOpen = 1325 - ErrSpCursorNotOpen = 1326 - ErrSpUndeclaredVar = 1327 - ErrSpWrongNoOfFetchArgs = 1328 - ErrSpFetchNoData = 1329 - ErrSpDupParam = 1330 - ErrSpDupVar = 1331 - ErrSpDupCond = 1332 - ErrSpDupCurs = 1333 - ErrSpCantAlter = 1334 - ErrSpSubselectNyi = 1335 - ErrStmtNotAllowedInSfOrTrg = 1336 - ErrSpVarcondAfterCurshndlr = 1337 - ErrSpCursorAfterHandler = 1338 - ErrSpCaseNotFound = 1339 - ErrFparserTooBigFile = 1340 - ErrFparserBadHeader = 1341 - ErrFparserEOFInComment = 1342 - ErrFparserErrorInParameter = 1343 - ErrFparserEOFInUnknownParameter = 1344 - ErrViewNoExplain = 1345 - ErrFrmUnknownType = 1346 - ErrWrongObject = 1347 - ErrNonupdateableColumn = 1348 - ErrViewSelectDerived = 1349 - ErrViewSelectClause = 1350 - ErrViewSelectVariable = 1351 - ErrViewSelectTmptable = 1352 - ErrViewWrongList = 1353 - ErrWarnViewMerge = 1354 - ErrWarnViewWithoutKey = 1355 - ErrViewInvalid = 1356 - ErrSpNoDropSp = 1357 - ErrSpGotoInHndlr = 1358 - ErrTrgAlreadyExists = 1359 - ErrTrgDoesNotExist = 1360 - ErrTrgOnViewOrTempTable = 1361 - ErrTrgCantChangeRow = 1362 - ErrTrgNoSuchRowInTrg = 1363 - ErrNoDefaultForField = 1364 - ErrDivisionByZero = 1365 - ErrTruncatedWrongValueForField = 1366 - ErrIllegalValueForType = 1367 - ErrViewNonupdCheck = 1368 - ErrViewCheckFailed = 1369 - ErrProcaccessDenied = 1370 - ErrRelayLogFail = 1371 - ErrPasswdLength = 1372 - ErrUnknownTargetBinlog = 1373 - ErrIoErrLogIndexRead = 1374 - ErrBinlogPurgeProhibited = 1375 - ErrFseekFail = 1376 - ErrBinlogPurgeFatalErr = 1377 - ErrLogInUse = 1378 - ErrLogPurgeUnknownErr = 1379 - ErrRelayLogInit = 1380 - ErrNoBinaryLogging = 1381 - ErrReservedSyntax = 1382 - ErrWsasFailed = 1383 - ErrDiffGroupsProc = 1384 - ErrNoGroupForProc = 1385 - ErrOrderWithProc = 1386 - ErrLoggingProhibitChangingOf = 1387 - ErrNoFileMapping = 1388 - ErrWrongMagic = 1389 - ErrPsManyParam = 1390 - ErrKeyPart0 = 1391 - ErrViewChecksum = 1392 - ErrViewMultiupdate = 1393 - ErrViewNoInsertFieldList = 1394 - ErrViewDeleteMergeView = 1395 - ErrCannotUser = 1396 - ErrXaerNota = 1397 - ErrXaerInval = 1398 - ErrXaerRmfail = 1399 - ErrXaerOutside = 1400 - ErrXaerRmerr = 1401 - ErrXaRbrollback = 1402 - ErrNonexistingProcGrant = 1403 - ErrProcAutoGrantFail = 1404 - ErrProcAutoRevokeFail = 1405 - ErrDataTooLong = 1406 - ErrSpBadSQLstate = 1407 - ErrStartup = 1408 - ErrLoadFromFixedSizeRowsToVar = 1409 - ErrCantCreateUserWithGrant = 1410 - ErrWrongValueForType = 1411 - ErrTableDefChanged = 1412 - ErrSpDupHandler = 1413 - ErrSpNotVarArg = 1414 - ErrSpNoRetset = 1415 - ErrCantCreateGeometryObject = 1416 - ErrFailedRoutineBreakBinlog = 1417 - ErrBinlogUnsafeRoutine = 1418 - ErrBinlogCreateRoutineNeedSuper = 1419 - ErrExecStmtWithOpenCursor = 1420 - ErrStmtHasNoOpenCursor = 1421 - ErrCommitNotAllowedInSfOrTrg = 1422 - ErrNoDefaultForViewField = 1423 - ErrSpNoRecursion = 1424 - ErrTooBigScale = 1425 - ErrTooBigPrecision = 1426 - ErrMBiggerThanD = 1427 - ErrWrongLockOfSystemTable = 1428 - ErrConnectToForeignDataSource = 1429 - ErrQueryOnForeignDataSource = 1430 - ErrForeignDataSourceDoesntExist = 1431 - ErrForeignDataStringInvalidCantCreate = 1432 - ErrForeignDataStringInvalid = 1433 - ErrCantCreateFederatedTable = 1434 - ErrTrgInWrongSchema = 1435 - ErrStackOverrunNeedMore = 1436 - ErrTooLongBody = 1437 - ErrWarnCantDropDefaultKeycache = 1438 - ErrTooBigDisplaywidth = 1439 - ErrXaerDupid = 1440 - ErrDatetimeFunctionOverflow = 1441 - ErrCantUpdateUsedTableInSfOrTrg = 1442 - ErrViewPreventUpdate = 1443 - ErrPsNoRecursion = 1444 - ErrSpCantSetAutocommit = 1445 - ErrMalformedDefiner = 1446 - ErrViewFrmNoUser = 1447 - ErrViewOtherUser = 1448 - ErrNoSuchUser = 1449 - ErrForbidSchemaChange = 1450 - ErrRowIsReferenced2 = 1451 - ErrNoReferencedRow2 = 1452 - ErrSpBadVarShadow = 1453 - ErrTrgNoDefiner = 1454 - ErrOldFileFormat = 1455 - ErrSpRecursionLimit = 1456 - ErrSpProcTableCorrupt = 1457 - ErrSpWrongName = 1458 - ErrTableNeedsUpgrade = 1459 - ErrSpNoAggregate = 1460 - ErrMaxPreparedStmtCountReached = 1461 - ErrViewRecursive = 1462 - ErrNonGroupingFieldUsed = 1463 - ErrTableCantHandleSpkeys = 1464 - ErrNoTriggersOnSystemSchema = 1465 - ErrRemovedSpaces = 1466 - ErrAutoincReadFailed = 1467 - ErrUsername = 1468 - ErrHostname = 1469 - ErrWrongStringLength = 1470 - ErrNonInsertableTable = 1471 - ErrAdminWrongMrgTable = 1472 - ErrTooHighLevelOfNestingForSelect = 1473 - ErrNameBecomesEmpty = 1474 - ErrAmbiguousFieldTerm = 1475 - ErrForeignServerExists = 1476 - ErrForeignServerDoesntExist = 1477 - ErrIllegalHaCreateOption = 1478 - ErrPartitionRequiresValues = 1479 - ErrPartitionWrongValues = 1480 - ErrPartitionMaxvalue = 1481 - ErrPartitionSubpartition = 1482 - ErrPartitionSubpartMix = 1483 - ErrPartitionWrongNoPart = 1484 - ErrPartitionWrongNoSubpart = 1485 - ErrWrongExprInPartitionFunc = 1486 - ErrNoConstExprInRangeOrList = 1487 - ErrFieldNotFoundPart = 1488 - ErrListOfFieldsOnlyInHash = 1489 - ErrInconsistentPartitionInfo = 1490 - ErrPartitionFuncNotAllowed = 1491 - ErrPartitionsMustBeDefined = 1492 - ErrRangeNotIncreasing = 1493 - ErrInconsistentTypeOfFunctions = 1494 - ErrMultipleDefConstInListPart = 1495 - ErrPartitionEntry = 1496 - ErrMixHandler = 1497 - ErrPartitionNotDefined = 1498 - ErrTooManyPartitions = 1499 - ErrSubpartition = 1500 - ErrCantCreateHandlerFile = 1501 - ErrBlobFieldInPartFunc = 1502 - ErrUniqueKeyNeedAllFieldsInPf = 1503 - ErrNoParts = 1504 - ErrPartitionMgmtOnNonpartitioned = 1505 - ErrForeignKeyOnPartitioned = 1506 - ErrDropPartitionNonExistent = 1507 - ErrDropLastPartition = 1508 - ErrCoalesceOnlyOnHashPartition = 1509 - ErrReorgHashOnlyOnSameNo = 1510 - ErrReorgNoParam = 1511 - ErrOnlyOnRangeListPartition = 1512 - ErrAddPartitionSubpart = 1513 - ErrAddPartitionNoNewPartition = 1514 - ErrCoalescePartitionNoPartition = 1515 - ErrReorgPartitionNotExist = 1516 - ErrSameNamePartition = 1517 - ErrNoBinlog = 1518 - ErrConsecutiveReorgPartitions = 1519 - ErrReorgOutsideRange = 1520 - ErrPartitionFunctionFailure = 1521 - ErrPartState = 1522 - ErrLimitedPartRange = 1523 - ErrPluginIsNotLoaded = 1524 - ErrWrongValue = 1525 - ErrNoPartitionForGivenValue = 1526 - ErrFilegroupOptionOnlyOnce = 1527 - ErrCreateFilegroupFailed = 1528 - ErrDropFilegroupFailed = 1529 - ErrTablespaceAutoExtend = 1530 - ErrWrongSizeNumber = 1531 - ErrSizeOverflow = 1532 - ErrAlterFilegroupFailed = 1533 - ErrBinlogRowLoggingFailed = 1534 - ErrBinlogRowWrongTableDef = 1535 - ErrBinlogRowRbrToSbr = 1536 - ErrEventAlreadyExists = 1537 - ErrEventStoreFailed = 1538 - ErrEventDoesNotExist = 1539 - ErrEventCantAlter = 1540 - ErrEventDropFailed = 1541 - ErrEventIntervalNotPositiveOrTooBig = 1542 - ErrEventEndsBeforeStarts = 1543 - ErrEventExecTimeInThePast = 1544 - ErrEventOpenTableFailed = 1545 - ErrEventNeitherMExprNorMAt = 1546 - ErrObsoleteColCountDoesntMatchCorrupted = 1547 - ErrObsoleteCannotLoadFromTable = 1548 - ErrEventCannotDelete = 1549 - ErrEventCompile = 1550 - ErrEventSameName = 1551 - ErrEventDataTooLong = 1552 - ErrDropIndexFk = 1553 - ErrWarnDeprecatedSyntaxWithVer = 1554 - ErrCantWriteLockLogTable = 1555 - ErrCantLockLogTable = 1556 - ErrForeignDuplicateKeyOldUnused = 1557 - ErrColCountDoesntMatchPleaseUpdate = 1558 - ErrTempTablePreventsSwitchOutOfRbr = 1559 - ErrStoredFunctionPreventsSwitchBinlogFormat = 1560 - ErrNdbCantSwitchBinlogFormat = 1561 - ErrPartitionNoTemporary = 1562 - ErrPartitionConstDomain = 1563 - ErrPartitionFunctionIsNotAllowed = 1564 - ErrDdlLog = 1565 - ErrNullInValuesLessThan = 1566 - ErrWrongPartitionName = 1567 - ErrCantChangeTxCharacteristics = 1568 - ErrDupEntryAutoincrementCase = 1569 - ErrEventModifyQueue = 1570 - ErrEventSetVar = 1571 - ErrPartitionMerge = 1572 - ErrCantActivateLog = 1573 - ErrRbrNotAvailable = 1574 - ErrBase64Decode = 1575 - ErrEventRecursionForbidden = 1576 - ErrEventsDB = 1577 - ErrOnlyIntegersAllowed = 1578 - ErrUnsuportedLogEngine = 1579 - ErrBadLogStatement = 1580 - ErrCantRenameLogTable = 1581 - ErrWrongParamcountToNativeFct = 1582 - ErrWrongParametersToNativeFct = 1583 - ErrWrongParametersToStoredFct = 1584 - ErrNativeFctNameCollision = 1585 - ErrDupEntryWithKeyName = 1586 - ErrBinlogPurgeEmFile = 1587 - ErrEventCannotCreateInThePast = 1588 - ErrEventCannotAlterInThePast = 1589 - ErrSlaveIncident = 1590 - ErrNoPartitionForGivenValueSilent = 1591 - ErrBinlogUnsafeStatement = 1592 - ErrSlaveFatal = 1593 - ErrSlaveRelayLogReadFailure = 1594 - ErrSlaveRelayLogWriteFailure = 1595 - ErrSlaveCreateEventFailure = 1596 - ErrSlaveMasterComFailure = 1597 - ErrBinlogLoggingImpossible = 1598 - ErrViewNoCreationCtx = 1599 - ErrViewInvalidCreationCtx = 1600 - ErrSrInvalidCreationCtx = 1601 - ErrTrgCorruptedFile = 1602 - ErrTrgNoCreationCtx = 1603 - ErrTrgInvalidCreationCtx = 1604 - ErrEventInvalidCreationCtx = 1605 - ErrTrgCantOpenTable = 1606 - ErrCantCreateSroutine = 1607 - ErrNeverUsed = 1608 - ErrNoFormatDescriptionEventBeforeBinlogStatement = 1609 - ErrSlaveCorruptEvent = 1610 - ErrLoadDataInvalidColumn = 1611 - ErrLogPurgeNoFile = 1612 - ErrXaRbtimeout = 1613 - ErrXaRbdeadlock = 1614 - ErrNeedReprepare = 1615 - ErrDelayedNotSupported = 1616 - WarnNoMasterInfo = 1617 - WarnOptionIgnored = 1618 - WarnPluginDeleteBuiltin = 1619 - WarnPluginBusy = 1620 - ErrVariableIsReadonly = 1621 - ErrWarnEngineTransactionRollback = 1622 - ErrSlaveHeartbeatFailure = 1623 - ErrSlaveHeartbeatValueOutOfRange = 1624 - ErrNdbReplicationSchema = 1625 - ErrConflictFnParse = 1626 - ErrExceptionsWrite = 1627 - ErrTooLongTableComment = 1628 - ErrTooLongFieldComment = 1629 - ErrFuncInexistentNameCollision = 1630 - ErrDatabaseName = 1631 - ErrTableName = 1632 - ErrPartitionName = 1633 - ErrSubpartitionName = 1634 - ErrTemporaryName = 1635 - ErrRenamedName = 1636 - ErrTooManyConcurrentTrxs = 1637 - WarnNonASCIISeparatorNotImplemented = 1638 - ErrDebugSyncTimeout = 1639 - ErrDebugSyncHitLimit = 1640 - ErrDupSignalSet = 1641 - ErrSignalWarn = 1642 - ErrSignalNotFound = 1643 - ErrSignalException = 1644 - ErrResignalWithoutActiveHandler = 1645 - ErrSignalBadConditionType = 1646 - WarnCondItemTruncated = 1647 - ErrCondItemTooLong = 1648 - ErrUnknownLocale = 1649 - ErrSlaveIgnoreServerIds = 1650 - ErrQueryCacheDisabled = 1651 - ErrSameNamePartitionField = 1652 - ErrPartitionColumnList = 1653 - ErrWrongTypeColumnValue = 1654 - ErrTooManyPartitionFuncFields = 1655 - ErrMaxvalueInValuesIn = 1656 - ErrTooManyValues = 1657 - ErrRowSinglePartitionField = 1658 - ErrFieldTypeNotAllowedAsPartitionField = 1659 - ErrPartitionFieldsTooLong = 1660 - ErrBinlogRowEngineAndStmtEngine = 1661 - ErrBinlogRowModeAndStmtEngine = 1662 - ErrBinlogUnsafeAndStmtEngine = 1663 - ErrBinlogRowInjectionAndStmtEngine = 1664 - ErrBinlogStmtModeAndRowEngine = 1665 - ErrBinlogRowInjectionAndStmtMode = 1666 - ErrBinlogMultipleEnginesAndSelfLoggingEngine = 1667 - ErrBinlogUnsafeLimit = 1668 - ErrBinlogUnsafeInsertDelayed = 1669 - ErrBinlogUnsafeSystemTable = 1670 - ErrBinlogUnsafeAutoincColumns = 1671 - ErrBinlogUnsafeUdf = 1672 - ErrBinlogUnsafeSystemVariable = 1673 - ErrBinlogUnsafeSystemFunction = 1674 - ErrBinlogUnsafeNontransAfterTrans = 1675 - ErrMessageAndStatement = 1676 - ErrSlaveConversionFailed = 1677 - ErrSlaveCantCreateConversion = 1678 - ErrInsideTransactionPreventsSwitchBinlogFormat = 1679 - ErrPathLength = 1680 - ErrWarnDeprecatedSyntaxNoReplacement = 1681 - ErrWrongNativeTableStructure = 1682 - ErrWrongPerfschemaUsage = 1683 - ErrWarnISSkippedTable = 1684 - ErrInsideTransactionPreventsSwitchBinlogDirect = 1685 - ErrStoredFunctionPreventsSwitchBinlogDirect = 1686 - ErrSpatialMustHaveGeomCol = 1687 - ErrTooLongIndexComment = 1688 - ErrLockAborted = 1689 - ErrDataOutOfRange = 1690 - ErrWrongSpvarTypeInLimit = 1691 - ErrBinlogUnsafeMultipleEnginesAndSelfLoggingEngine = 1692 - ErrBinlogUnsafeMixedStatement = 1693 - ErrInsideTransactionPreventsSwitchSQLLogBin = 1694 - ErrStoredFunctionPreventsSwitchSQLLogBin = 1695 - ErrFailedReadFromParFile = 1696 - ErrValuesIsNotIntType = 1697 - ErrAccessDeniedNoPassword = 1698 - ErrSetPasswordAuthPlugin = 1699 - ErrGrantPluginUserExists = 1700 - ErrTruncateIllegalFk = 1701 - ErrPluginIsPermanent = 1702 - ErrSlaveHeartbeatValueOutOfRangeMin = 1703 - ErrSlaveHeartbeatValueOutOfRangeMax = 1704 - ErrStmtCacheFull = 1705 - ErrMultiUpdateKeyConflict = 1706 - ErrTableNeedsRebuild = 1707 - WarnOptionBelowLimit = 1708 - ErrIndexColumnTooLong = 1709 - ErrErrorInTriggerBody = 1710 - ErrErrorInUnknownTriggerBody = 1711 - ErrIndexCorrupt = 1712 - ErrUndoRecordTooBig = 1713 - ErrBinlogUnsafeInsertIgnoreSelect = 1714 - ErrBinlogUnsafeInsertSelectUpdate = 1715 - ErrBinlogUnsafeReplaceSelect = 1716 - ErrBinlogUnsafeCreateIgnoreSelect = 1717 - ErrBinlogUnsafeCreateReplaceSelect = 1718 - ErrBinlogUnsafeUpdateIgnore = 1719 - ErrPluginNoUninstall = 1720 - ErrPluginNoInstall = 1721 - ErrBinlogUnsafeWriteAutoincSelect = 1722 - ErrBinlogUnsafeCreateSelectAutoinc = 1723 - ErrBinlogUnsafeInsertTwoKeys = 1724 - ErrTableInFkCheck = 1725 - ErrUnsupportedEngine = 1726 - ErrBinlogUnsafeAutoincNotFirst = 1727 - ErrCannotLoadFromTableV2 = 1728 - ErrMasterDelayValueOutOfRange = 1729 - ErrOnlyFdAndRbrEventsAllowedInBinlogStatement = 1730 - ErrPartitionExchangeDifferentOption = 1731 - ErrPartitionExchangePartTable = 1732 - ErrPartitionExchangeTempTable = 1733 - ErrPartitionInsteadOfSubpartition = 1734 - ErrUnknownPartition = 1735 - ErrTablesDifferentMetadata = 1736 - ErrRowDoesNotMatchPartition = 1737 - ErrBinlogCacheSizeGreaterThanMax = 1738 - ErrWarnIndexNotApplicable = 1739 - ErrPartitionExchangeForeignKey = 1740 - ErrNoSuchKeyValue = 1741 - ErrRplInfoDataTooLong = 1742 - ErrNetworkReadEventChecksumFailure = 1743 - ErrBinlogReadEventChecksumFailure = 1744 - ErrBinlogStmtCacheSizeGreaterThanMax = 1745 - ErrCantUpdateTableInCreateTableSelect = 1746 - ErrPartitionClauseOnNonpartitioned = 1747 - ErrRowDoesNotMatchGivenPartitionSet = 1748 - ErrNoSuchPartitionunused = 1749 - ErrChangeRplInfoRepositoryFailure = 1750 - ErrWarningNotCompleteRollbackWithCreatedTempTable = 1751 - ErrWarningNotCompleteRollbackWithDroppedTempTable = 1752 - ErrMtsFeatureIsNotSupported = 1753 - ErrMtsUpdatedDBsGreaterMax = 1754 - ErrMtsCantParallel = 1755 - ErrMtsInconsistentData = 1756 - ErrFulltextNotSupportedWithPartitioning = 1757 - ErrDaInvalidConditionNumber = 1758 - ErrInsecurePlainText = 1759 - ErrInsecureChangeMaster = 1760 - ErrForeignDuplicateKeyWithChildInfo = 1761 - ErrForeignDuplicateKeyWithoutChildInfo = 1762 - ErrSQLthreadWithSecureSlave = 1763 - ErrTableHasNoFt = 1764 - ErrVariableNotSettableInSfOrTrigger = 1765 - ErrVariableNotSettableInTransaction = 1766 - ErrGtidNextIsNotInGtidNextList = 1767 - ErrCantChangeGtidNextInTransactionWhenGtidNextListIsNull = 1768 - ErrSetStatementCannotInvokeFunction = 1769 - ErrGtidNextCantBeAutomaticIfGtidNextListIsNonNull = 1770 - ErrSkippingLoggedTransaction = 1771 - ErrMalformedGtidSetSpecification = 1772 - ErrMalformedGtidSetEncoding = 1773 - ErrMalformedGtidSpecification = 1774 - ErrGnoExhausted = 1775 - ErrBadSlaveAutoPosition = 1776 - ErrAutoPositionRequiresGtidModeOn = 1777 - ErrCantDoImplicitCommitInTrxWhenGtidNextIsSet = 1778 - ErrGtidMode2Or3RequiresEnforceGtidConsistencyOn = 1779 - ErrGtidModeRequiresBinlog = 1780 - ErrCantSetGtidNextToGtidWhenGtidModeIsOff = 1781 - ErrCantSetGtidNextToAnonymousWhenGtidModeIsOn = 1782 - ErrCantSetGtidNextListToNonNullWhenGtidModeIsOff = 1783 - ErrFoundGtidEventWhenGtidModeIsOff = 1784 - ErrGtidUnsafeNonTransactionalTable = 1785 - ErrGtidUnsafeCreateSelect = 1786 - ErrGtidUnsafeCreateDropTemporaryTableInTransaction = 1787 - ErrGtidModeCanOnlyChangeOneStepAtATime = 1788 - ErrMasterHasPurgedRequiredGtids = 1789 - ErrCantSetGtidNextWhenOwningGtid = 1790 - ErrUnknownExplainFormat = 1791 - ErrCantExecuteInReadOnlyTransaction = 1792 - ErrTooLongTablePartitionComment = 1793 - ErrSlaveConfiguration = 1794 - ErrInnodbFtLimit = 1795 - ErrInnodbNoFtTempTable = 1796 - ErrInnodbFtWrongDocidColumn = 1797 - ErrInnodbFtWrongDocidIndex = 1798 - ErrInnodbOnlineLogTooBig = 1799 - ErrUnknownAlterAlgorithm = 1800 - ErrUnknownAlterLock = 1801 - ErrMtsChangeMasterCantRunWithGaps = 1802 - ErrMtsRecoveryFailure = 1803 - ErrMtsResetWorkers = 1804 - ErrColCountDoesntMatchCorruptedV2 = 1805 - ErrSlaveSilentRetryTransaction = 1806 - ErrDiscardFkChecksRunning = 1807 - ErrTableSchemaMismatch = 1808 - ErrTableInSystemTablespace = 1809 - ErrIoRead = 1810 - ErrIoWrite = 1811 - ErrTablespaceMissing = 1812 - ErrTablespaceExists = 1813 - ErrTablespaceDiscarded = 1814 - ErrInternal = 1815 - ErrInnodbImport = 1816 - ErrInnodbIndexCorrupt = 1817 - ErrInvalidYearColumnLength = 1818 - ErrNotValidPassword = 1819 - ErrMustChangePassword = 1820 - ErrFkNoIndexChild = 1821 - ErrFkNoIndexParent = 1822 - ErrFkFailAddSystem = 1823 - ErrFkCannotOpenParent = 1824 - ErrFkIncorrectOption = 1825 - ErrFkDupName = 1826 - ErrPasswordFormat = 1827 - ErrFkColumnCannotDrop = 1828 - ErrFkColumnCannotDropChild = 1829 - ErrFkColumnNotNull = 1830 - ErrDupIndex = 1831 - ErrFkColumnCannotChange = 1832 - ErrFkColumnCannotChangeChild = 1833 - ErrFkCannotDeleteParent = 1834 - ErrMalformedPacket = 1835 - ErrReadOnlyMode = 1836 - ErrGtidNextTypeUndefinedGroup = 1837 - ErrVariableNotSettableInSp = 1838 - ErrCantSetGtidPurgedWhenGtidModeIsOff = 1839 - ErrCantSetGtidPurgedWhenGtidExecutedIsNotEmpty = 1840 - ErrCantSetGtidPurgedWhenOwnedGtidsIsNotEmpty = 1841 - ErrGtidPurgedWasChanged = 1842 - ErrGtidExecutedWasChanged = 1843 - ErrBinlogStmtModeAndNoReplTables = 1844 - ErrAlterOperationNotSupported = 1845 - ErrAlterOperationNotSupportedReason = 1846 - ErrAlterOperationNotSupportedReasonCopy = 1847 - ErrAlterOperationNotSupportedReasonPartition = 1848 - ErrAlterOperationNotSupportedReasonFkRename = 1849 - ErrAlterOperationNotSupportedReasonColumnType = 1850 - ErrAlterOperationNotSupportedReasonFkCheck = 1851 - ErrAlterOperationNotSupportedReasonIgnore = 1852 - ErrAlterOperationNotSupportedReasonNopk = 1853 - ErrAlterOperationNotSupportedReasonAutoinc = 1854 - ErrAlterOperationNotSupportedReasonHiddenFts = 1855 - ErrAlterOperationNotSupportedReasonChangeFts = 1856 - ErrAlterOperationNotSupportedReasonFts = 1857 - ErrSQLSlaveSkipCounterNotSettableInGtidMode = 1858 - ErrDupUnknownInIndex = 1859 - ErrIdentCausesTooLongPath = 1860 - ErrAlterOperationNotSupportedReasonNotNull = 1861 - ErrMustChangePasswordLogin = 1862 - ErrRowInWrongPartition = 1863 - ErrErrorLast = 1863 - ErrBadGeneratedColumn = 3105 - ErrUnsupportedOnGeneratedColumn = 3106 - ErrGeneratedColumnNonPrior = 3107 - ErrDependentByGeneratedColumn = 3108 - ErrInvalidJSONText = 3140 - ErrInvalidJSONPath = 3143 - ErrInvalidJSONData = 3146 - ErrJSONUsedAsKey = 3152 - - // TiDB self-defined errors. - ErrMemExceedThreshold = 8001 - ErrForUpdateCantRetry = 8002 - - // TiKV/PD errors. - ErrPDServerTimeout = 9001 - ErrTiKVServerTimeout = 9002 - ErrTiKVServerBusy = 9003 - ErrResolveLockTimeout = 9004 - ErrRegionUnavailable = 9005 - ErrGCTooEarly = 9006 - - ErrTxnTooLarge = 9500 -) diff --git a/vendor/github.com/pingcap/tidb/mysql/errname.go b/vendor/github.com/pingcap/tidb/mysql/errname.go deleted file mode 100644 index 617bd69..0000000 --- a/vendor/github.com/pingcap/tidb/mysql/errname.go +++ /dev/null @@ -1,902 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package mysql - -// MySQLErrName maps error code to MySQL error messages. -var MySQLErrName = map[uint16]string{ - ErrHashchk: "hashchk", - ErrNisamchk: "isamchk", - ErrNo: "NO", - ErrYes: "YES", - ErrCantCreateFile: "Can't create file '%-.200s' (errno: %d - %s)", - ErrCantCreateTable: "Can't create table '%-.200s' (errno: %d)", - ErrCantCreateDB: "Can't create database '%-.192s' (errno: %d)", - ErrDBCreateExists: "Can't create database '%-.192s'; database exists", - ErrDBDropExists: "Can't drop database '%-.192s'; database doesn't exist", - ErrDBDropDelete: "Error dropping database (can't delete '%-.192s', errno: %d)", - ErrDBDropRmdir: "Error dropping database (can't rmdir '%-.192s', errno: %d)", - ErrCantDeleteFile: "Error on delete of '%-.192s' (errno: %d - %s)", - ErrCantFindSystemRec: "Can't read record in system table", - ErrCantGetStat: "Can't get status of '%-.200s' (errno: %d - %s)", - ErrCantGetWd: "Can't get working directory (errno: %d - %s)", - ErrCantLock: "Can't lock file (errno: %d - %s)", - ErrCantOpenFile: "Can't open file: '%-.200s' (errno: %d - %s)", - ErrFileNotFound: "Can't find file: '%-.200s' (errno: %d - %s)", - ErrCantReadDir: "Can't read dir of '%-.192s' (errno: %d - %s)", - ErrCantSetWd: "Can't change dir to '%-.192s' (errno: %d - %s)", - ErrCheckread: "Record has changed since last read in table '%-.192s'", - ErrDiskFull: "Disk full (%s); waiting for someone to free some space... (errno: %d - %s)", - ErrDupKey: "Can't write; duplicate key in table '%-.192s'", - ErrErrorOnClose: "Error on close of '%-.192s' (errno: %d - %s)", - ErrErrorOnRead: "Error reading file '%-.200s' (errno: %d - %s)", - ErrErrorOnRename: "Error on rename of '%-.210s' to '%-.210s' (errno: %d - %s)", - ErrErrorOnWrite: "Error writing file '%-.200s' (errno: %d - %s)", - ErrFileUsed: "'%-.192s' is locked against change", - ErrFilsortAbort: "Sort aborted", - ErrFormNotFound: "View '%-.192s' doesn't exist for '%-.192s'", - ErrGetErrno: "Got error %d from storage engine", - ErrIllegalHa: "Table storage engine for '%-.192s' doesn't have this option", - ErrKeyNotFound: "Can't find record in '%-.192s'", - ErrNotFormFile: "Incorrect information in file: '%-.200s'", - ErrNotKeyFile: "Incorrect key file for table '%-.200s'; try to repair it", - ErrOldKeyFile: "Old key file for table '%-.192s'; repair it!", - ErrOpenAsReadonly: "Table '%-.192s' is read only", - ErrOutofMemory: "Out of memory; restart server and try again (needed %d bytes)", - ErrOutOfSortMemory: "Out of sort memory, consider increasing server sort buffer size", - ErrUnexpectedEOF: "Unexpected EOF found when reading file '%-.192s' (errno: %d - %s)", - ErrConCount: "Too many connections", - ErrOutOfResources: "Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space", - ErrBadHost: "Can't get hostname for your address", - ErrHandshake: "Bad handshake", - ErrDBaccessDenied: "Access denied for user '%-.48s'@'%-.64s' to database '%-.192s'", - ErrAccessDenied: "Access denied for user '%-.48s'@'%-.64s' (using password: %s)", - ErrNoDB: "No database selected", - ErrUnknownCom: "Unknown command", - ErrBadNull: "Column '%-.192s' cannot be null", - ErrBadDB: "Unknown database '%-.192s'", - ErrTableExists: "Table '%-.192s' already exists", - ErrBadTable: "Unknown table '%-.100s'", - ErrNonUniq: "Column '%-.192s' in %-.192s is ambiguous", - ErrServerShutdown: "Server shutdown in progress", - ErrBadField: "Unknown column '%-.192s' in '%-.192s'", - ErrFieldNotInGroupBy: "Expression #%d of %s is not in GROUP BY clause and contains nonaggregated column '%s' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by", - ErrWrongGroupField: "Can't group on '%-.192s'", - ErrWrongSumSelect: "Statement has sum functions and columns in same statement", - ErrWrongValueCount: "Column count doesn't match value count", - ErrTooLongIdent: "Identifier name '%-.100s' is too long", - ErrDupFieldName: "Duplicate column name '%-.192s'", - ErrDupKeyName: "Duplicate key name '%-.192s'", - ErrDupEntry: "Duplicate entry '%-.192s' for key %d", - ErrWrongFieldSpec: "Incorrect column specifier for column '%-.192s'", - ErrParse: "%s near '%-.80s' at line %d", - ErrEmptyQuery: "Query was empty", - ErrNonuniqTable: "Not unique table/alias: '%-.192s'", - ErrInvalidDefault: "Invalid default value for '%-.192s'", - ErrMultiplePriKey: "Multiple primary key defined", - ErrTooManyKeys: "Too many keys specified; max %d keys allowed", - ErrTooManyKeyParts: "Too many key parts specified; max %d parts allowed", - ErrTooLongKey: "Specified key was too long; max key length is %d bytes", - ErrKeyColumnDoesNotExits: "Key column '%-.192s' doesn't exist in table", - ErrBlobUsedAsKey: "BLOB column '%-.192s' can't be used in key specification with the used table type", - ErrTooBigFieldlength: "Column length too big for column '%-.192s' (max = %lu); use BLOB or TEXT instead", - ErrWrongAutoKey: "Incorrect table definition; there can be only one auto column and it must be defined as a key", - ErrReady: "%s: ready for connections.\nVersion: '%s' socket: '%s' port: %d", - ErrNormalShutdown: "%s: Normal shutdown\n", - ErrGotSignal: "%s: Got signal %d. Aborting!\n", - ErrShutdownComplete: "%s: Shutdown complete\n", - ErrForcingClose: "%s: Forcing close of thread %d user: '%-.48s'\n", - ErrIpsock: "Can't create IP socket", - ErrNoSuchIndex: "Table '%-.192s' has no index like the one used in CREATE INDEX; recreate the table", - ErrWrongFieldTerminators: "Field separator argument is not what is expected; check the manual", - ErrBlobsAndNoTerminated: "You can't use fixed rowlength with BLOBs; please use 'fields terminated by'", - ErrTextFileNotReadable: "The file '%-.128s' must be in the database directory or be readable by all", - ErrFileExists: "File '%-.200s' already exists", - ErrLoadInfo: "Records: %d Deleted: %d Skipped: %d Warnings: %d", - ErrAlterInfo: "Records: %d Duplicates: %d", - ErrWrongSubKey: "Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys", - ErrCantRemoveAllFields: "You can't delete all columns with ALTER TABLE; use DROP TABLE instead", - ErrCantDropFieldOrKey: "Can't DROP '%-.192s'; check that column/key exists", - ErrInsertInfo: "Records: %d Duplicates: %d Warnings: %d", - ErrUpdateTableUsed: "You can't specify target table '%-.192s' for update in FROM clause", - ErrNoSuchThread: "Unknown thread id: %lu", - ErrKillDenied: "You are not owner of thread %lu", - ErrNoTablesUsed: "No tables used", - ErrTooBigSet: "Too many strings for column %-.192s and SET", - ErrNoUniqueLogFile: "Can't generate a unique log-filename %-.200s.(1-999)\n", - ErrTableNotLockedForWrite: "Table '%-.192s' was locked with a READ lock and can't be updated", - ErrTableNotLocked: "Table '%-.192s' was not locked with LOCK TABLES", - ErrBlobCantHaveDefault: "BLOB/TEXT/JSON column '%-.192s' can't have a default value", - ErrWrongDBName: "Incorrect database name '%-.100s'", - ErrWrongTableName: "Incorrect table name '%-.100s'", - ErrTooBigSelect: "The SELECT would examine more than MAXJOINSIZE rows; check your WHERE and use SET SQLBIGSELECTS=1 or SET MAXJOINSIZE=# if the SELECT is okay", - ErrUnknown: "Unknown error", - ErrUnknownProcedure: "Unknown procedure '%-.192s'", - ErrWrongParamcountToProcedure: "Incorrect parameter count to procedure '%-.192s'", - ErrWrongParametersToProcedure: "Incorrect parameters to procedure '%-.192s'", - ErrUnknownTable: "Unknown table '%-.192s' in %-.32s", - ErrFieldSpecifiedTwice: "Column '%-.192s' specified twice", - ErrInvalidGroupFuncUse: "Invalid use of group function", - ErrUnsupportedExtension: "Table '%-.192s' uses an extension that doesn't exist in this MySQL version", - ErrTableMustHaveColumns: "A table must have at least 1 column", - ErrRecordFileFull: "The table '%-.192s' is full", - ErrUnknownCharacterSet: "Unknown character set: '%-.64s'", - ErrTooManyTables: "Too many tables; MySQL can only use %d tables in a join", - ErrTooManyFields: "Too many columns", - ErrTooBigRowsize: "Row size too large. The maximum row size for the used table type, not counting BLOBs, is %d. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs", - ErrStackOverrun: "Thread stack overrun: Used: %d of a %d stack. Use 'mysqld --threadStack=#' to specify a bigger stack if needed", - ErrWrongOuterJoin: "Cross dependency found in OUTER JOIN; examine your ON conditions", - ErrNullColumnInIndex: "Table handler doesn't support NULL in given index. Please change column '%-.192s' to be NOT NULL or use another handler", - ErrCantFindUdf: "Can't load function '%-.192s'", - ErrCantInitializeUdf: "Can't initialize function '%-.192s'; %-.80s", - ErrUdfNoPaths: "No paths allowed for shared library", - ErrUdfExists: "Function '%-.192s' already exists", - ErrCantOpenLibrary: "Can't open shared library '%-.192s' (errno: %d %-.128s)", - ErrCantFindDlEntry: "Can't find symbol '%-.128s' in library", - ErrFunctionNotDefined: "Function '%-.192s' is not defined", - ErrHostIsBlocked: "Host '%-.64s' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'", - ErrHostNotPrivileged: "Host '%-.64s' is not allowed to connect to this MySQL server", - ErrPasswordAnonymousUser: "You are using MySQL as an anonymous user and anonymous users are not allowed to change passwords", - ErrPasswordNotAllowed: "You must have privileges to update tables in the mysql database to be able to change passwords for others", - ErrPasswordNoMatch: "Can't find any matching row in the user table", - ErrUpdateInfo: "Rows matched: %d Changed: %d Warnings: %d", - ErrCantCreateThread: "Can't create a new thread (errno %d); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug", - ErrWrongValueCountOnRow: "Column count doesn't match value count at row %d", - ErrCantReopenTable: "Can't reopen table: '%-.192s'", - ErrInvalidUseOfNull: "Invalid use of NULL value", - ErrRegexp: "Got error '%-.64s' from regexp", - ErrMixOfGroupFuncAndFields: "Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause", - ErrNonexistingGrant: "There is no such grant defined for user '%-.48s' on host '%-.64s'", - ErrTableaccessDenied: "%-.128s command denied to user '%-.48s'@'%-.64s' for table '%-.64s'", - ErrColumnaccessDenied: "%-.16s command denied to user '%-.48s'@'%-.64s' for column '%-.192s' in table '%-.192s'", - ErrIllegalGrantForTable: "Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be used", - ErrGrantWrongHostOrUser: "The host or user argument to GRANT is too long", - ErrNoSuchTable: "Table '%-.192s.%-.192s' doesn't exist", - ErrNonexistingTableGrant: "There is no such grant defined for user '%-.48s' on host '%-.64s' on table '%-.192s'", - ErrNotAllowedCommand: "The used command is not allowed with this MySQL version", - ErrSyntax: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use", - ErrDelayedCantChangeLock: "Delayed insert thread couldn't get requested lock for table %-.192s", - ErrTooManyDelayedThreads: "Too many delayed threads in use", - ErrAbortingConnection: "Aborted connection %d to db: '%-.192s' user: '%-.48s' (%-.64s)", - ErrNetPacketTooLarge: "Got a packet bigger than 'maxAllowedPacket' bytes", - ErrNetReadErrorFromPipe: "Got a read error from the connection pipe", - ErrNetFcntl: "Got an error from fcntl()", - ErrNetPacketsOutOfOrder: "Got packets out of order", - ErrNetUncompress: "Couldn't uncompress communication packet", - ErrNetRead: "Got an error reading communication packets", - ErrNetReadInterrupted: "Got timeout reading communication packets", - ErrNetErrorOnWrite: "Got an error writing communication packets", - ErrNetWriteInterrupted: "Got timeout writing communication packets", - ErrTooLongString: "Result string is longer than 'maxAllowedPacket' bytes", - ErrTableCantHandleBlob: "The used table type doesn't support BLOB/TEXT columns", - ErrTableCantHandleAutoIncrement: "The used table type doesn't support AUTOINCREMENT columns", - ErrDelayedInsertTableLocked: "INSERT DELAYED can't be used with table '%-.192s' because it is locked with LOCK TABLES", - ErrWrongColumnName: "Incorrect column name '%-.100s'", - ErrWrongKeyColumn: "The used storage engine can't index column '%-.192s'", - ErrWrongMrgTable: "Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist", - ErrDupUnique: "Can't write, because of unique constraint, to table '%-.192s'", - ErrBlobKeyWithoutLength: "BLOB/TEXT column '%-.192s' used in key specification without a key length", - ErrPrimaryCantHaveNull: "All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead", - ErrTooManyRows: "Result consisted of more than one row", - ErrRequiresPrimaryKey: "This table type requires a primary key", - ErrNoRaidCompiled: "This version of MySQL is not compiled with RAID support", - ErrUpdateWithoutKeyInSafeMode: "You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column", - ErrKeyDoesNotExist: "Key '%-.192s' doesn't exist in table '%-.192s'", - ErrCheckNoSuchTable: "Can't open table", - ErrCheckNotImplemented: "The storage engine for the table doesn't support %s", - ErrCantDoThisDuringAnTransaction: "You are not allowed to execute this command in a transaction", - ErrErrorDuringCommit: "Got error %d during COMMIT", - ErrErrorDuringRollback: "Got error %d during ROLLBACK", - ErrErrorDuringFlushLogs: "Got error %d during FLUSHLOGS", - ErrErrorDuringCheckpoint: "Got error %d during CHECKPOINT", - ErrNewAbortingConnection: "Aborted connection %d to db: '%-.192s' user: '%-.48s' host: '%-.64s' (%-.64s)", - ErrDumpNotImplemented: "The storage engine for the table does not support binary table dump", - ErrFlushMasterBinlogClosed: "Binlog closed, cannot RESET MASTER", - ErrIndexRebuild: "Failed rebuilding the index of dumped table '%-.192s'", - ErrMaster: "Error from master: '%-.64s'", - ErrMasterNetRead: "Net error reading from master", - ErrMasterNetWrite: "Net error writing to master", - ErrFtMatchingKeyNotFound: "Can't find FULLTEXT index matching the column list", - ErrLockOrActiveTransaction: "Can't execute the given command because you have active locked tables or an active transaction", - ErrUnknownSystemVariable: "Unknown system variable '%-.64s'", - ErrCrashedOnUsage: "Table '%-.192s' is marked as crashed and should be repaired", - ErrCrashedOnRepair: "Table '%-.192s' is marked as crashed and last (automatic?) repair failed", - ErrWarningNotCompleteRollback: "Some non-transactional changed tables couldn't be rolled back", - ErrTransCacheFull: "Multi-statement transaction required more than 'maxBinlogCacheSize' bytes of storage; increase this mysqld variable and try again", - ErrSlaveMustStop: "This operation cannot be performed with a running slave; run STOP SLAVE first", - ErrSlaveNotRunning: "This operation requires a running slave; configure slave and do START SLAVE", - ErrBadSlave: "The server is not configured as slave; fix in config file or with CHANGE MASTER TO", - ErrMasterInfo: "Could not initialize master info structure; more error messages can be found in the MySQL error log", - ErrSlaveThread: "Could not create slave thread; check system resources", - ErrTooManyUserConnections: "User %-.64s already has more than 'maxUserConnections' active connections", - ErrSetConstantsOnly: "You may only use constant expressions with SET", - ErrLockWaitTimeout: "Lock wait timeout exceeded; try restarting transaction", - ErrLockTableFull: "The total number of locks exceeds the lock table size", - ErrReadOnlyTransaction: "Update locks cannot be acquired during a READ UNCOMMITTED transaction", - ErrDropDBWithReadLock: "DROP DATABASE not allowed while thread is holding global read lock", - ErrCreateDBWithReadLock: "CREATE DATABASE not allowed while thread is holding global read lock", - ErrWrongArguments: "Incorrect arguments to %s", - ErrNoPermissionToCreateUser: "'%-.48s'@'%-.64s' is not allowed to create new users", - ErrUnionTablesInDifferentDir: "Incorrect table definition; all MERGE tables must be in the same database", - ErrLockDeadlock: "Deadlock found when trying to get lock; try restarting transaction", - ErrTableCantHandleFt: "The used table type doesn't support FULLTEXT indexes", - ErrCannotAddForeign: "Cannot add foreign key constraint", - ErrNoReferencedRow: "Cannot add or update a child row: a foreign key constraint fails", - ErrRowIsReferenced: "Cannot delete or update a parent row: a foreign key constraint fails", - ErrConnectToMaster: "Error connecting to master: %-.128s", - ErrQueryOnMaster: "Error running query on master: %-.128s", - ErrErrorWhenExecutingCommand: "Error when executing command %s: %-.128s", - ErrWrongUsage: "Incorrect usage of %s and %s", - ErrWrongNumberOfColumnsInSelect: "The used SELECT statements have a different number of columns", - ErrCantUpdateWithReadlock: "Can't execute the query because you have a conflicting read lock", - ErrMixingNotAllowed: "Mixing of transactional and non-transactional tables is disabled", - ErrDupArgument: "Option '%s' used twice in statement", - ErrUserLimitReached: "User '%-.64s' has exceeded the '%s' resource (current value: %d)", - ErrSpecificAccessDenied: "Access denied; you need (at least one of) the %-.128s privilege(s) for this operation", - ErrLocalVariable: "Variable '%-.64s' is a SESSION variable and can't be used with SET GLOBAL", - ErrGlobalVariable: "Variable '%-.64s' is a GLOBAL variable and should be set with SET GLOBAL", - ErrNoDefault: "Variable '%-.64s' doesn't have a default value", - ErrWrongValueForVar: "Variable '%-.64s' can't be set to the value of '%-.200s'", - ErrWrongTypeForVar: "Incorrect argument type to variable '%-.64s'", - ErrVarCantBeRead: "Variable '%-.64s' can only be set, not read", - ErrCantUseOptionHere: "Incorrect usage/placement of '%s'", - ErrNotSupportedYet: "This version of MySQL doesn't yet support '%s'", - ErrMasterFatalErrorReadingBinlog: "Got fatal error %d from master when reading data from binary log: '%-.320s'", - ErrSlaveIgnoredTable: "Slave SQL thread ignored the query because of replicate-*-table rules", - ErrIncorrectGlobalLocalVar: "Variable '%-.192s' is a %s variable", - ErrWrongFkDef: "Incorrect foreign key definition for '%-.192s': %s", - ErrKeyRefDoNotMatchTableRef: "Key reference and table reference don't match", - ErrOperandColumns: "Operand should contain %d column(s)", - ErrSubqueryNo1Row: "Subquery returns more than 1 row", - ErrUnknownStmtHandler: "Unknown prepared statement handler (%.*s) given to %s", - ErrCorruptHelpDB: "Help database is corrupt or does not exist", - ErrCyclicReference: "Cyclic reference on subqueries", - ErrAutoConvert: "Converting column '%s' from %s to %s", - ErrIllegalReference: "Reference '%-.64s' not supported (%s)", - ErrDerivedMustHaveAlias: "Every derived table must have its own alias", - ErrSelectReduced: "Select %d was reduced during optimization", - ErrTablenameNotAllowedHere: "Table '%-.192s' from one of the SELECTs cannot be used in %-.32s", - ErrNotSupportedAuthMode: "Client does not support authentication protocol requested by server; consider upgrading MySQL client", - ErrSpatialCantHaveNull: "All parts of a SPATIAL index must be NOT NULL", - ErrCollationCharsetMismatch: "COLLATION '%s' is not valid for CHARACTER SET '%s'", - ErrSlaveWasRunning: "Slave is already running", - ErrSlaveWasNotRunning: "Slave already has been stopped", - ErrTooBigForUncompress: "Uncompressed data size too large; the maximum size is %d (probably, length of uncompressed data was corrupted)", - ErrZlibZMem: "ZLIB: Not enough memory", - ErrZlibZBuf: "ZLIB: Not enough room in the output buffer (probably, length of uncompressed data was corrupted)", - ErrZlibZData: "ZLIB: Input data corrupted", - ErrCutValueGroupConcat: "Row %d was cut by GROUPCONCAT()", - ErrWarnTooFewRecords: "Row %d doesn't contain data for all columns", - ErrWarnTooManyRecords: "Row %d was truncated; it contained more data than there were input columns", - ErrWarnNullToNotnull: "Column set to default value; NULL supplied to NOT NULL column '%s' at row %d", - ErrWarnDataOutOfRange: "Out of range value for column '%s' at row %d", - WarnDataTruncated: "Data truncated for column '%s' at row %d", - ErrWarnUsingOtherHandler: "Using storage engine %s for table '%s'", - ErrCantAggregate2collations: "Illegal mix of collations (%s,%s) and (%s,%s) for operation '%s'", - ErrDropUser: "Cannot drop one or more of the requested users", - ErrRevokeGrants: "Can't revoke all privileges for one or more of the requested users", - ErrCantAggregate3collations: "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", - ErrCantAggregateNcollations: "Illegal mix of collations for operation '%s'", - ErrVariableIsNotStruct: "Variable '%-.64s' is not a variable component (can't be used as XXXX.variableName)", - ErrUnknownCollation: "Unknown collation: '%-.64s'", - ErrSlaveIgnoredSslParams: "SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later if MySQL slave with SSL is started", - ErrServerIsInSecureAuthMode: "Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format", - ErrWarnFieldResolved: "Field or reference '%-.192s%s%-.192s%s%-.192s' of SELECT #%d was resolved in SELECT #%d", - ErrBadSlaveUntilCond: "Incorrect parameter or combination of parameters for START SLAVE UNTIL", - ErrMissingSkipSlave: "It is recommended to use --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL; otherwise, you will get problems if you get an unexpected slave's mysqld restart", - ErrUntilCondIgnored: "SQL thread is not to be started so UNTIL options are ignored", - ErrWrongNameForIndex: "Incorrect index name '%-.100s'", - ErrWrongNameForCatalog: "Incorrect catalog name '%-.100s'", - ErrWarnQcResize: "Query cache failed to set size %lu; new query cache size is %lu", - ErrBadFtColumn: "Column '%-.192s' cannot be part of FULLTEXT index", - ErrUnknownKeyCache: "Unknown key cache '%-.100s'", - ErrWarnHostnameWontWork: "MySQL is started in --skip-name-resolve mode; you must restart it without this switch for this grant to work", - ErrUnknownStorageEngine: "Unknown storage engine '%s'", - ErrWarnDeprecatedSyntax: "'%s' is deprecated and will be removed in a future release. Please use %s instead", - ErrNonUpdatableTable: "The target table %-.100s of the %s is not updatable", - ErrFeatureDisabled: "The '%s' feature is disabled; you need MySQL built with '%s' to have it working", - ErrOptionPreventsStatement: "The MySQL server is running with the %s option so it cannot execute this statement", - ErrDuplicatedValueInType: "Column '%-.100s' has duplicated value '%-.64s' in %s", - ErrTruncatedWrongValue: "Truncated incorrect %-.32s value: '%-.128s'", - ErrTooMuchAutoTimestampCols: "Incorrect table definition; there can be only one TIMESTAMP column with CURRENTTIMESTAMP in DEFAULT or ON UPDATE clause", - ErrInvalidOnUpdate: "Invalid ON UPDATE clause for '%-.192s' column", - ErrUnsupportedPs: "This command is not supported in the prepared statement protocol yet", - ErrGetErrmsg: "Got error %d '%-.100s' from %s", - ErrGetTemporaryErrmsg: "Got temporary error %d '%-.100s' from %s", - ErrUnknownTimeZone: "Unknown or incorrect time zone: '%-.64s'", - ErrWarnInvalidTimestamp: "Invalid TIMESTAMP value in column '%s' at row %d", - ErrInvalidCharacterString: "Invalid %s character string: '%.64s'", - ErrWarnAllowedPacketOverflowed: "Result of %s() was larger than maxAllowedPacket (%d) - truncated", - ErrConflictingDeclarations: "Conflicting declarations: '%s%s' and '%s%s'", - ErrSpNoRecursiveCreate: "Can't create a %s from within another stored routine", - ErrSpAlreadyExists: "%s %s already exists", - ErrSpDoesNotExist: "%s %s does not exist", - ErrSpDropFailed: "Failed to DROP %s %s", - ErrSpStoreFailed: "Failed to CREATE %s %s", - ErrSpLilabelMismatch: "%s with no matching label: %s", - ErrSpLabelRedefine: "Redefining label %s", - ErrSpLabelMismatch: "End-label %s without match", - ErrSpUninitVar: "Referring to uninitialized variable %s", - ErrSpBadselect: "PROCEDURE %s can't return a result set in the given context", - ErrSpBadreturn: "RETURN is only allowed in a FUNCTION", - ErrSpBadstatement: "%s is not allowed in stored procedures", - ErrUpdateLogDeprecatedIgnored: "The update log is deprecated and replaced by the binary log; SET SQLLOGUPDATE has been ignored.", - ErrUpdateLogDeprecatedTranslated: "The update log is deprecated and replaced by the binary log; SET SQLLOGUPDATE has been translated to SET SQLLOGBIN.", - ErrQueryInterrupted: "Query execution was interrupted", - ErrSpWrongNoOfArgs: "Incorrect number of arguments for %s %s; expected %d, got %d", - ErrSpCondMismatch: "Undefined CONDITION: %s", - ErrSpNoreturn: "No RETURN found in FUNCTION %s", - ErrSpNoreturnend: "FUNCTION %s ended without RETURN", - ErrSpBadCursorQuery: "Cursor statement must be a SELECT", - ErrSpBadCursorSelect: "Cursor SELECT must not have INTO", - ErrSpCursorMismatch: "Undefined CURSOR: %s", - ErrSpCursorAlreadyOpen: "Cursor is already open", - ErrSpCursorNotOpen: "Cursor is not open", - ErrSpUndeclaredVar: "Undeclared variable: %s", - ErrSpWrongNoOfFetchArgs: "Incorrect number of FETCH variables", - ErrSpFetchNoData: "No data - zero rows fetched, selected, or processed", - ErrSpDupParam: "Duplicate parameter: %s", - ErrSpDupVar: "Duplicate variable: %s", - ErrSpDupCond: "Duplicate condition: %s", - ErrSpDupCurs: "Duplicate cursor: %s", - ErrSpCantAlter: "Failed to ALTER %s %s", - ErrSpSubselectNyi: "Subquery value not supported", - ErrStmtNotAllowedInSfOrTrg: "%s is not allowed in stored function or trigger", - ErrSpVarcondAfterCurshndlr: "Variable or condition declaration after cursor or handler declaration", - ErrSpCursorAfterHandler: "Cursor declaration after handler declaration", - ErrSpCaseNotFound: "Case not found for CASE statement", - ErrFparserTooBigFile: "Configuration file '%-.192s' is too big", - ErrFparserBadHeader: "Malformed file type header in file '%-.192s'", - ErrFparserEOFInComment: "Unexpected end of file while parsing comment '%-.200s'", - ErrFparserErrorInParameter: "Error while parsing parameter '%-.192s' (line: '%-.192s')", - ErrFparserEOFInUnknownParameter: "Unexpected end of file while skipping unknown parameter '%-.192s'", - ErrViewNoExplain: "EXPLAIN/SHOW can not be issued; lacking privileges for underlying table", - ErrFrmUnknownType: "File '%-.192s' has unknown type '%-.64s' in its header", - ErrWrongObject: "'%-.192s.%-.192s' is not %s", - ErrNonupdateableColumn: "Column '%-.192s' is not updatable", - ErrViewSelectDerived: "View's SELECT contains a subquery in the FROM clause", - ErrViewSelectClause: "View's SELECT contains a '%s' clause", - ErrViewSelectVariable: "View's SELECT contains a variable or parameter", - ErrViewSelectTmptable: "View's SELECT refers to a temporary table '%-.192s'", - ErrViewWrongList: "View's SELECT and view's field list have different column counts", - ErrWarnViewMerge: "View merge algorithm can't be used here for now (assumed undefined algorithm)", - ErrWarnViewWithoutKey: "View being updated does not have complete key of underlying table in it", - ErrViewInvalid: "View '%-.192s.%-.192s' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them", - ErrSpNoDropSp: "Can't drop or alter a %s from within another stored routine", - ErrSpGotoInHndlr: "GOTO is not allowed in a stored procedure handler", - ErrTrgAlreadyExists: "Trigger already exists", - ErrTrgDoesNotExist: "Trigger does not exist", - ErrTrgOnViewOrTempTable: "Trigger's '%-.192s' is view or temporary table", - ErrTrgCantChangeRow: "Updating of %s row is not allowed in %strigger", - ErrTrgNoSuchRowInTrg: "There is no %s row in %s trigger", - ErrNoDefaultForField: "Field '%-.192s' doesn't have a default value", - ErrDivisionByZero: "Division by 0", - ErrTruncatedWrongValueForField: "Incorrect %-.32s value: '%-.128s' for column '%.192s' at row %d", - ErrIllegalValueForType: "Illegal %s '%-.192s' value found during parsing", - ErrViewNonupdCheck: "CHECK OPTION on non-updatable view '%-.192s.%-.192s'", - ErrViewCheckFailed: "CHECK OPTION failed '%-.192s.%-.192s'", - ErrProcaccessDenied: "%-.16s command denied to user '%-.48s'@'%-.64s' for routine '%-.192s'", - ErrRelayLogFail: "Failed purging old relay logs: %s", - ErrPasswdLength: "Password hash should be a %d-digit hexadecimal number", - ErrUnknownTargetBinlog: "Target log not found in binlog index", - ErrIoErrLogIndexRead: "I/O error reading log index file", - ErrBinlogPurgeProhibited: "Server configuration does not permit binlog purge", - ErrFseekFail: "Failed on fseek()", - ErrBinlogPurgeFatalErr: "Fatal error during log purge", - ErrLogInUse: "A purgeable log is in use, will not purge", - ErrLogPurgeUnknownErr: "Unknown error during log purge", - ErrRelayLogInit: "Failed initializing relay log position: %s", - ErrNoBinaryLogging: "You are not using binary logging", - ErrReservedSyntax: "The '%-.64s' syntax is reserved for purposes internal to the MySQL server", - ErrWsasFailed: "WSAStartup Failed", - ErrDiffGroupsProc: "Can't handle procedures with different groups yet", - ErrNoGroupForProc: "Select must have a group with this procedure", - ErrOrderWithProc: "Can't use ORDER clause with this procedure", - ErrLoggingProhibitChangingOf: "Binary logging and replication forbid changing the global server %s", - ErrNoFileMapping: "Can't map file: %-.200s, errno: %d", - ErrWrongMagic: "Wrong magic in %-.64s", - ErrPsManyParam: "Prepared statement contains too many placeholders", - ErrKeyPart0: "Key part '%-.192s' length cannot be 0", - ErrViewChecksum: "View text checksum failed", - ErrViewMultiupdate: "Can not modify more than one base table through a join view '%-.192s.%-.192s'", - ErrViewNoInsertFieldList: "Can not insert into join view '%-.192s.%-.192s' without fields list", - ErrViewDeleteMergeView: "Can not delete from join view '%-.192s.%-.192s'", - ErrCannotUser: "Operation %s failed for %.256s", - ErrXaerNota: "XAERNOTA: Unknown XID", - ErrXaerInval: "XAERINVAL: Invalid arguments (or unsupported command)", - ErrXaerRmfail: "XAERRMFAIL: The command cannot be executed when global transaction is in the %.64s state", - ErrXaerOutside: "XAEROUTSIDE: Some work is done outside global transaction", - ErrXaerRmerr: "XAERRMERR: Fatal error occurred in the transaction branch - check your data for consistency", - ErrXaRbrollback: "XARBROLLBACK: Transaction branch was rolled back", - ErrNonexistingProcGrant: "There is no such grant defined for user '%-.48s' on host '%-.64s' on routine '%-.192s'", - ErrProcAutoGrantFail: "Failed to grant EXECUTE and ALTER ROUTINE privileges", - ErrProcAutoRevokeFail: "Failed to revoke all privileges to dropped routine", - ErrDataTooLong: "Data too long for column '%s' at row %d", - ErrSpBadSQLstate: "Bad SQLSTATE: '%s'", - ErrStartup: "%s: ready for connections.\nVersion: '%s' socket: '%s' port: %d %s", - ErrLoadFromFixedSizeRowsToVar: "Can't load value from file with fixed size rows to variable", - ErrCantCreateUserWithGrant: "You are not allowed to create a user with GRANT", - ErrWrongValueForType: "Incorrect %-.32s value: '%-.128s' for function %-.32s", - ErrTableDefChanged: "Table definition has changed, please retry transaction", - ErrSpDupHandler: "Duplicate handler declared in the same block", - ErrSpNotVarArg: "OUT or INOUT argument %d for routine %s is not a variable or NEW pseudo-variable in BEFORE trigger", - ErrSpNoRetset: "Not allowed to return a result set from a %s", - ErrCantCreateGeometryObject: "Cannot get geometry object from data you send to the GEOMETRY field", - ErrFailedRoutineBreakBinlog: "A routine failed and has neither NO SQL nor READS SQL DATA in its declaration and binary logging is enabled; if non-transactional tables were updated, the binary log will miss their changes", - ErrBinlogUnsafeRoutine: "This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe logBinTrustFunctionCreators variable)", - ErrBinlogCreateRoutineNeedSuper: "You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe logBinTrustFunctionCreators variable)", - ErrExecStmtWithOpenCursor: "You can't execute a prepared statement which has an open cursor associated with it. Reset the statement to re-execute it.", - ErrStmtHasNoOpenCursor: "The statement (%lu) has no open cursor.", - ErrCommitNotAllowedInSfOrTrg: "Explicit or implicit commit is not allowed in stored function or trigger.", - ErrNoDefaultForViewField: "Field of view '%-.192s.%-.192s' underlying table doesn't have a default value", - ErrSpNoRecursion: "Recursive stored functions and triggers are not allowed.", - ErrTooBigScale: "Too big scale %d specified for column '%-.192s'. Maximum is %d.", - ErrTooBigPrecision: "Too big precision %d specified for column '%-.192s'. Maximum is %d.", - ErrMBiggerThanD: "For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column '%-.192s').", - ErrWrongLockOfSystemTable: "You can't combine write-locking of system tables with other tables or lock types", - ErrConnectToForeignDataSource: "Unable to connect to foreign data source: %.64s", - ErrQueryOnForeignDataSource: "There was a problem processing the query on the foreign data source. Data source : %-.64s", - ErrForeignDataSourceDoesntExist: "The foreign data source you are trying to reference does not exist. Data source : %-.64s", - ErrForeignDataStringInvalidCantCreate: "Can't create federated table. The data source connection string '%-.64s' is not in the correct format", - ErrForeignDataStringInvalid: "The data source connection string '%-.64s' is not in the correct format", - ErrCantCreateFederatedTable: "Can't create federated table. Foreign data src : %-.64s", - ErrTrgInWrongSchema: "Trigger in wrong schema", - ErrStackOverrunNeedMore: "Thread stack overrun: %d bytes used of a %d byte stack, and %d bytes needed. Use 'mysqld --threadStack=#' to specify a bigger stack.", - ErrTooLongBody: "Routine body for '%-.100s' is too long", - ErrWarnCantDropDefaultKeycache: "Cannot drop default keycache", - ErrTooBigDisplaywidth: "Display width out of range for column '%-.192s' (max = %lu)", - ErrXaerDupid: "XAERDUPID: The XID already exists", - ErrDatetimeFunctionOverflow: "Datetime function: %-.32s field overflow", - ErrCantUpdateUsedTableInSfOrTrg: "Can't update table '%-.192s' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.", - ErrViewPreventUpdate: "The definition of table '%-.192s' prevents operation %.192s on table '%-.192s'.", - ErrPsNoRecursion: "The prepared statement contains a stored routine call that refers to that same statement. It's not allowed to execute a prepared statement in such a recursive manner", - ErrSpCantSetAutocommit: "Not allowed to set autocommit from a stored function or trigger", - ErrMalformedDefiner: "Definer is not fully qualified", - ErrViewFrmNoUser: "View '%-.192s'.'%-.192s' has no definer information (old table format). Current user is used as definer. Please recreate the view!", - ErrViewOtherUser: "You need the SUPER privilege for creation view with '%-.192s'@'%-.192s' definer", - ErrNoSuchUser: "The user specified as a definer ('%-.64s'@'%-.64s') does not exist", - ErrForbidSchemaChange: "Changing schema from '%-.192s' to '%-.192s' is not allowed.", - ErrRowIsReferenced2: "Cannot delete or update a parent row: a foreign key constraint fails (%.192s)", - ErrNoReferencedRow2: "Cannot add or update a child row: a foreign key constraint fails (%.192s)", - ErrSpBadVarShadow: "Variable '%-.64s' must be quoted with `...`, or renamed", - ErrTrgNoDefiner: "No definer attribute for trigger '%-.192s'.'%-.192s'. The trigger will be activated under the authorization of the invoker, which may have insufficient privileges. Please recreate the trigger.", - ErrOldFileFormat: "'%-.192s' has an old format, you should re-create the '%s' object(s)", - ErrSpRecursionLimit: "Recursive limit %d (as set by the maxSpRecursionDepth variable) was exceeded for routine %.192s", - ErrSpProcTableCorrupt: "Failed to load routine %-.192s. The table mysql.proc is missing, corrupt, or contains bad data (internal code %d)", - ErrSpWrongName: "Incorrect routine name '%-.192s'", - ErrTableNeedsUpgrade: "Table upgrade required. Please do \"REPAIR TABLE `%-.32s`\"", - ErrSpNoAggregate: "AGGREGATE is not supported for stored functions", - ErrMaxPreparedStmtCountReached: "Can't create more than maxPreparedStmtCount statements (current value: %lu)", - ErrViewRecursive: "`%-.192s`.`%-.192s` contains view recursion", - ErrNonGroupingFieldUsed: "Non-grouping field '%-.192s' is used in %-.64s clause", - ErrTableCantHandleSpkeys: "The used table type doesn't support SPATIAL indexes", - ErrNoTriggersOnSystemSchema: "Triggers can not be created on system tables", - ErrRemovedSpaces: "Leading spaces are removed from name '%s'", - ErrAutoincReadFailed: "Failed to read auto-increment value from storage engine", - ErrUsername: "user name", - ErrHostname: "host name", - ErrWrongStringLength: "String '%-.70s' is too long for %s (should be no longer than %d)", - ErrNonInsertableTable: "The target table %-.100s of the %s is not insertable-into", - ErrAdminWrongMrgTable: "Table '%-.64s' is differently defined or of non-MyISAM type or doesn't exist", - ErrTooHighLevelOfNestingForSelect: "Too high level of nesting for select", - ErrNameBecomesEmpty: "Name '%-.64s' has become ''", - ErrAmbiguousFieldTerm: "First character of the FIELDS TERMINATED string is ambiguous; please use non-optional and non-empty FIELDS ENCLOSED BY", - ErrForeignServerExists: "The foreign server, %s, you are trying to create already exists.", - ErrForeignServerDoesntExist: "The foreign server name you are trying to reference does not exist. Data source : %-.64s", - ErrIllegalHaCreateOption: "Table storage engine '%-.64s' does not support the create option '%.64s'", - ErrPartitionRequiresValues: "Syntax : %-.64s PARTITIONING requires definition of VALUES %-.64s for each partition", - ErrPartitionWrongValues: "Only %-.64s PARTITIONING can use VALUES %-.64s in partition definition", - ErrPartitionMaxvalue: "MAXVALUE can only be used in last partition definition", - ErrPartitionSubpartition: "Subpartitions can only be hash partitions and by key", - ErrPartitionSubpartMix: "Must define subpartitions on all partitions if on one partition", - ErrPartitionWrongNoPart: "Wrong number of partitions defined, mismatch with previous setting", - ErrPartitionWrongNoSubpart: "Wrong number of subpartitions defined, mismatch with previous setting", - ErrWrongExprInPartitionFunc: "Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed", - ErrNoConstExprInRangeOrList: "Expression in RANGE/LIST VALUES must be constant", - ErrFieldNotFoundPart: "Field in list of fields for partition function not found in table", - ErrListOfFieldsOnlyInHash: "List of fields is only allowed in KEY partitions", - ErrInconsistentPartitionInfo: "The partition info in the frm file is not consistent with what can be written into the frm file", - ErrPartitionFuncNotAllowed: "The %-.192s function returns the wrong type", - ErrPartitionsMustBeDefined: "For %-.64s partitions each partition must be defined", - ErrRangeNotIncreasing: "VALUES LESS THAN value must be strictly increasing for each partition", - ErrInconsistentTypeOfFunctions: "VALUES value must be of same type as partition function", - ErrMultipleDefConstInListPart: "Multiple definition of same constant in list partitioning", - ErrPartitionEntry: "Partitioning can not be used stand-alone in query", - ErrMixHandler: "The mix of handlers in the partitions is not allowed in this version of MySQL", - ErrPartitionNotDefined: "For the partitioned engine it is necessary to define all %-.64s", - ErrTooManyPartitions: "Too many partitions (including subpartitions) were defined", - ErrSubpartition: "It is only possible to mix RANGE/LIST partitioning with HASH/KEY partitioning for subpartitioning", - ErrCantCreateHandlerFile: "Failed to create specific handler file", - ErrBlobFieldInPartFunc: "A BLOB field is not allowed in partition function", - ErrUniqueKeyNeedAllFieldsInPf: "A %-.192s must include all columns in the table's partitioning function", - ErrNoParts: "Number of %-.64s = 0 is not an allowed value", - ErrPartitionMgmtOnNonpartitioned: "Partition management on a not partitioned table is not possible", - ErrForeignKeyOnPartitioned: "Foreign key clause is not yet supported in conjunction with partitioning", - ErrDropPartitionNonExistent: "Error in list of partitions to %-.64s", - ErrDropLastPartition: "Cannot remove all partitions, use DROP TABLE instead", - ErrCoalesceOnlyOnHashPartition: "COALESCE PARTITION can only be used on HASH/KEY partitions", - ErrReorgHashOnlyOnSameNo: "REORGANIZE PARTITION can only be used to reorganize partitions not to change their numbers", - ErrReorgNoParam: "REORGANIZE PARTITION without parameters can only be used on auto-partitioned tables using HASH PARTITIONs", - ErrOnlyOnRangeListPartition: "%-.64s PARTITION can only be used on RANGE/LIST partitions", - ErrAddPartitionSubpart: "Trying to Add partition(s) with wrong number of subpartitions", - ErrAddPartitionNoNewPartition: "At least one partition must be added", - ErrCoalescePartitionNoPartition: "At least one partition must be coalesced", - ErrReorgPartitionNotExist: "More partitions to reorganize than there are partitions", - ErrSameNamePartition: "Duplicate partition name %-.192s", - ErrNoBinlog: "It is not allowed to shut off binlog on this command", - ErrConsecutiveReorgPartitions: "When reorganizing a set of partitions they must be in consecutive order", - ErrReorgOutsideRange: "Reorganize of range partitions cannot change total ranges except for last partition where it can extend the range", - ErrPartitionFunctionFailure: "Partition function not supported in this version for this handler", - ErrPartState: "Partition state cannot be defined from CREATE/ALTER TABLE", - ErrLimitedPartRange: "The %-.64s handler only supports 32 bit integers in VALUES", - ErrPluginIsNotLoaded: "Plugin '%-.192s' is not loaded", - ErrWrongValue: "Incorrect %-.32s value: '%-.128s'", - ErrNoPartitionForGivenValue: "Table has no partition for value %-.64s", - ErrFilegroupOptionOnlyOnce: "It is not allowed to specify %s more than once", - ErrCreateFilegroupFailed: "Failed to create %s", - ErrDropFilegroupFailed: "Failed to drop %s", - ErrTablespaceAutoExtend: "The handler doesn't support autoextend of tablespaces", - ErrWrongSizeNumber: "A size parameter was incorrectly specified, either number or on the form 10M", - ErrSizeOverflow: "The size number was correct but we don't allow the digit part to be more than 2 billion", - ErrAlterFilegroupFailed: "Failed to alter: %s", - ErrBinlogRowLoggingFailed: "Writing one row to the row-based binary log failed", - ErrBinlogRowWrongTableDef: "Table definition on master and slave does not match: %s", - ErrBinlogRowRbrToSbr: "Slave running with --log-slave-updates must use row-based binary logging to be able to replicate row-based binary log events", - ErrEventAlreadyExists: "Event '%-.192s' already exists", - ErrEventStoreFailed: "Failed to store event %s. Error code %d from storage engine.", - ErrEventDoesNotExist: "Unknown event '%-.192s'", - ErrEventCantAlter: "Failed to alter event '%-.192s'", - ErrEventDropFailed: "Failed to drop %s", - ErrEventIntervalNotPositiveOrTooBig: "INTERVAL is either not positive or too big", - ErrEventEndsBeforeStarts: "ENDS is either invalid or before STARTS", - ErrEventExecTimeInThePast: "Event execution time is in the past. Event has been disabled", - ErrEventOpenTableFailed: "Failed to open mysql.event", - ErrEventNeitherMExprNorMAt: "No datetime expression provided", - ErrObsoleteColCountDoesntMatchCorrupted: "Column count of mysql.%s is wrong. Expected %d, found %d. The table is probably corrupted", - ErrObsoleteCannotLoadFromTable: "Cannot load from mysql.%s. The table is probably corrupted", - ErrEventCannotDelete: "Failed to delete the event from mysql.event", - ErrEventCompile: "Error during compilation of event's body", - ErrEventSameName: "Same old and new event name", - ErrEventDataTooLong: "Data for column '%s' too long", - ErrDropIndexFk: "Cannot drop index '%-.192s': needed in a foreign key constraint", - ErrWarnDeprecatedSyntaxWithVer: "The syntax '%s' is deprecated and will be removed in MySQL %s. Please use %s instead", - ErrCantWriteLockLogTable: "You can't write-lock a log table. Only read access is possible", - ErrCantLockLogTable: "You can't use locks with log tables.", - ErrForeignDuplicateKeyOldUnused: "Upholding foreign key constraints for table '%.192s', entry '%-.192s', key %d would lead to a duplicate entry", - ErrColCountDoesntMatchPleaseUpdate: "Column count of mysql.%s is wrong. Expected %d, found %d. Created with MySQL %d, now running %d. Please use mysqlUpgrade to fix this error.", - ErrTempTablePreventsSwitchOutOfRbr: "Cannot switch out of the row-based binary log format when the session has open temporary tables", - ErrStoredFunctionPreventsSwitchBinlogFormat: "Cannot change the binary logging format inside a stored function or trigger", - ErrNdbCantSwitchBinlogFormat: "The NDB cluster engine does not support changing the binlog format on the fly yet", - ErrPartitionNoTemporary: "Cannot create temporary table with partitions", - ErrPartitionConstDomain: "Partition constant is out of partition function domain", - ErrPartitionFunctionIsNotAllowed: "This partition function is not allowed", - ErrDdlLog: "Error in DDL log", - ErrNullInValuesLessThan: "Not allowed to use NULL value in VALUES LESS THAN", - ErrWrongPartitionName: "Incorrect partition name", - ErrCantChangeTxCharacteristics: "Transaction characteristics can't be changed while a transaction is in progress", - ErrDupEntryAutoincrementCase: "ALTER TABLE causes autoIncrement resequencing, resulting in duplicate entry '%-.192s' for key '%-.192s'", - ErrEventModifyQueue: "Internal scheduler error %d", - ErrEventSetVar: "Error during starting/stopping of the scheduler. Error code %d", - ErrPartitionMerge: "Engine cannot be used in partitioned tables", - ErrCantActivateLog: "Cannot activate '%-.64s' log", - ErrRbrNotAvailable: "The server was not built with row-based replication", - ErrBase64Decode: "Decoding of base64 string failed", - ErrEventRecursionForbidden: "Recursion of EVENT DDL statements is forbidden when body is present", - ErrEventsDB: "Cannot proceed because system tables used by Event Scheduler were found damaged at server start", - ErrOnlyIntegersAllowed: "Only integers allowed as number here", - ErrUnsuportedLogEngine: "This storage engine cannot be used for log tables\"", - ErrBadLogStatement: "You cannot '%s' a log table if logging is enabled", - ErrCantRenameLogTable: "Cannot rename '%s'. When logging enabled, rename to/from log table must rename two tables: the log table to an archive table and another table back to '%s'", - ErrWrongParamcountToNativeFct: "Incorrect parameter count in the call to native function '%-.192s'", - ErrWrongParametersToNativeFct: "Incorrect parameters in the call to native function '%-.192s'", - ErrWrongParametersToStoredFct: "Incorrect parameters in the call to stored function '%-.192s'", - ErrNativeFctNameCollision: "This function '%-.192s' has the same name as a native function", - ErrDupEntryWithKeyName: "Duplicate entry '%-.64s' for key '%-.192s'", - ErrBinlogPurgeEmFile: "Too many files opened, please execute the command again", - ErrEventCannotCreateInThePast: "Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation.", - ErrEventCannotAlterInThePast: "Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was not changed. Specify a time in the future.", - ErrSlaveIncident: "The incident %s occurred on the master. Message: %-.64s", - ErrNoPartitionForGivenValueSilent: "Table has no partition for some existing values", - ErrBinlogUnsafeStatement: "Unsafe statement written to the binary log using statement format since BINLOGFORMAT = STATEMENT. %s", - ErrSlaveFatal: "Fatal : %s", - ErrSlaveRelayLogReadFailure: "Relay log read failure: %s", - ErrSlaveRelayLogWriteFailure: "Relay log write failure: %s", - ErrSlaveCreateEventFailure: "Failed to create %s", - ErrSlaveMasterComFailure: "Master command %s failed: %s", - ErrBinlogLoggingImpossible: "Binary logging not possible. Message: %s", - ErrViewNoCreationCtx: "View `%-.64s`.`%-.64s` has no creation context", - ErrViewInvalidCreationCtx: "Creation context of view `%-.64s`.`%-.64s' is invalid", - ErrSrInvalidCreationCtx: "Creation context of stored routine `%-.64s`.`%-.64s` is invalid", - ErrTrgCorruptedFile: "Corrupted TRG file for table `%-.64s`.`%-.64s`", - ErrTrgNoCreationCtx: "Triggers for table `%-.64s`.`%-.64s` have no creation context", - ErrTrgInvalidCreationCtx: "Trigger creation context of table `%-.64s`.`%-.64s` is invalid", - ErrEventInvalidCreationCtx: "Creation context of event `%-.64s`.`%-.64s` is invalid", - ErrTrgCantOpenTable: "Cannot open table for trigger `%-.64s`.`%-.64s`", - ErrCantCreateSroutine: "Cannot create stored routine `%-.64s`. Check warnings", - ErrNeverUsed: "Ambiguous slave modes combination. %s", - ErrNoFormatDescriptionEventBeforeBinlogStatement: "The BINLOG statement of type `%s` was not preceded by a format description BINLOG statement.", - ErrSlaveCorruptEvent: "Corrupted replication event was detected", - ErrLoadDataInvalidColumn: "Invalid column reference (%-.64s) in LOAD DATA", - ErrLogPurgeNoFile: "Being purged log %s was not found", - ErrXaRbtimeout: "XARBTIMEOUT: Transaction branch was rolled back: took too long", - ErrXaRbdeadlock: "XARBDEADLOCK: Transaction branch was rolled back: deadlock was detected", - ErrNeedReprepare: "Prepared statement needs to be re-prepared", - ErrDelayedNotSupported: "DELAYED option not supported for table '%-.192s'", - WarnNoMasterInfo: "The master info structure does not exist", - WarnOptionIgnored: "<%-.64s> option ignored", - WarnPluginDeleteBuiltin: "Built-in plugins cannot be deleted", - WarnPluginBusy: "Plugin is busy and will be uninstalled on shutdown", - ErrVariableIsReadonly: "%s variable '%s' is read-only. Use SET %s to assign the value", - ErrWarnEngineTransactionRollback: "Storage engine %s does not support rollback for this statement. Transaction rolled back and must be restarted", - ErrSlaveHeartbeatFailure: "Unexpected master's heartbeat data: %s", - ErrSlaveHeartbeatValueOutOfRange: "The requested value for the heartbeat period is either negative or exceeds the maximum allowed (%s seconds).", - ErrNdbReplicationSchema: "Bad schema for mysql.ndbReplication table. Message: %-.64s", - ErrConflictFnParse: "Error in parsing conflict function. Message: %-.64s", - ErrExceptionsWrite: "Write to exceptions table failed. Message: %-.128s\"", - ErrTooLongTableComment: "Comment for table '%-.64s' is too long (max = %lu)", - ErrTooLongFieldComment: "Comment for field '%-.64s' is too long (max = %lu)", - ErrFuncInexistentNameCollision: "FUNCTION %s does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual", - ErrDatabaseName: "Database", - ErrTableName: "Table", - ErrPartitionName: "Partition", - ErrSubpartitionName: "Subpartition", - ErrTemporaryName: "Temporary", - ErrRenamedName: "Renamed", - ErrTooManyConcurrentTrxs: "Too many active concurrent transactions", - WarnNonASCIISeparatorNotImplemented: "Non-ASCII separator arguments are not fully supported", - ErrDebugSyncTimeout: "debug sync point wait timed out", - ErrDebugSyncHitLimit: "debug sync point hit limit reached", - ErrDupSignalSet: "Duplicate condition information item '%s'", - ErrSignalWarn: "Unhandled user-defined warning condition", - ErrSignalNotFound: "Unhandled user-defined not found condition", - ErrSignalException: "Unhandled user-defined exception condition", - ErrResignalWithoutActiveHandler: "RESIGNAL when handler not active", - ErrSignalBadConditionType: "SIGNAL/RESIGNAL can only use a CONDITION defined with SQLSTATE", - WarnCondItemTruncated: "Data truncated for condition item '%s'", - ErrCondItemTooLong: "Data too long for condition item '%s'", - ErrUnknownLocale: "Unknown locale: '%-.64s'", - ErrSlaveIgnoreServerIds: "The requested server id %d clashes with the slave startup option --replicate-same-server-id", - ErrQueryCacheDisabled: "Query cache is disabled; restart the server with queryCacheType=1 to enable it", - ErrSameNamePartitionField: "Duplicate partition field name '%-.192s'", - ErrPartitionColumnList: "Inconsistency in usage of column lists for partitioning", - ErrWrongTypeColumnValue: "Partition column values of incorrect type", - ErrTooManyPartitionFuncFields: "Too many fields in '%-.192s'", - ErrMaxvalueInValuesIn: "Cannot use MAXVALUE as value in VALUES IN", - ErrTooManyValues: "Cannot have more than one value for this type of %-.64s partitioning", - ErrRowSinglePartitionField: "Row expressions in VALUES IN only allowed for multi-field column partitioning", - ErrFieldTypeNotAllowedAsPartitionField: "Field '%-.192s' is of a not allowed type for this type of partitioning", - ErrPartitionFieldsTooLong: "The total length of the partitioning fields is too large", - ErrBinlogRowEngineAndStmtEngine: "Cannot execute statement: impossible to write to binary log since both row-incapable engines and statement-incapable engines are involved.", - ErrBinlogRowModeAndStmtEngine: "Cannot execute statement: impossible to write to binary log since BINLOGFORMAT = ROW and at least one table uses a storage engine limited to statement-based logging.", - ErrBinlogUnsafeAndStmtEngine: "Cannot execute statement: impossible to write to binary log since statement is unsafe, storage engine is limited to statement-based logging, and BINLOGFORMAT = MIXED. %s", - ErrBinlogRowInjectionAndStmtEngine: "Cannot execute statement: impossible to write to binary log since statement is in row format and at least one table uses a storage engine limited to statement-based logging.", - ErrBinlogStmtModeAndRowEngine: "Cannot execute statement: impossible to write to binary log since BINLOGFORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging.%s", - ErrBinlogRowInjectionAndStmtMode: "Cannot execute statement: impossible to write to binary log since statement is in row format and BINLOGFORMAT = STATEMENT.", - ErrBinlogMultipleEnginesAndSelfLoggingEngine: "Cannot execute statement: impossible to write to binary log since more than one engine is involved and at least one engine is self-logging.", - ErrBinlogUnsafeLimit: "The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.", - ErrBinlogUnsafeInsertDelayed: "The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.", - ErrBinlogUnsafeSystemTable: "The statement is unsafe because it uses the general log, slow query log, or performanceSchema table(s). This is unsafe because system tables may differ on slaves.", - ErrBinlogUnsafeAutoincColumns: "Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTOINCREMENT column. Inserted values cannot be logged correctly.", - ErrBinlogUnsafeUdf: "Statement is unsafe because it uses a UDF which may not return the same value on the slave.", - ErrBinlogUnsafeSystemVariable: "Statement is unsafe because it uses a system variable that may have a different value on the slave.", - ErrBinlogUnsafeSystemFunction: "Statement is unsafe because it uses a system function that may return a different value on the slave.", - ErrBinlogUnsafeNontransAfterTrans: "Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.", - ErrMessageAndStatement: "%s Statement: %s", - ErrSlaveConversionFailed: "Column %d of table '%-.192s.%-.192s' cannot be converted from type '%-.32s' to type '%-.32s'", - ErrSlaveCantCreateConversion: "Can't create conversion table for table '%-.192s.%-.192s'", - ErrInsideTransactionPreventsSwitchBinlogFormat: "Cannot modify @@session.binlogFormat inside a transaction", - ErrPathLength: "The path specified for %.64s is too long.", - ErrWarnDeprecatedSyntaxNoReplacement: "'%s' is deprecated and will be removed in a future release.", - ErrWrongNativeTableStructure: "Native table '%-.64s'.'%-.64s' has the wrong structure", - ErrWrongPerfschemaUsage: "Invalid performanceSchema usage.", - ErrWarnISSkippedTable: "Table '%s'.'%s' was skipped since its definition is being modified by concurrent DDL statement", - ErrInsideTransactionPreventsSwitchBinlogDirect: "Cannot modify @@session.binlogDirectNonTransactionalUpdates inside a transaction", - ErrStoredFunctionPreventsSwitchBinlogDirect: "Cannot change the binlog direct flag inside a stored function or trigger", - ErrSpatialMustHaveGeomCol: "A SPATIAL index may only contain a geometrical type column", - ErrTooLongIndexComment: "Comment for index '%-.64s' is too long (max = %d)", - ErrLockAborted: "Wait on a lock was aborted due to a pending exclusive lock", - ErrDataOutOfRange: "%s value is out of range in '%s'", - ErrWrongSpvarTypeInLimit: "A variable of a non-integer based type in LIMIT clause", - ErrBinlogUnsafeMultipleEnginesAndSelfLoggingEngine: "Mixing self-logging and non-self-logging engines in a statement is unsafe.", - ErrBinlogUnsafeMixedStatement: "Statement accesses nontransactional table as well as transactional or temporary table, and writes to any of them.", - ErrInsideTransactionPreventsSwitchSQLLogBin: "Cannot modify @@session.sqlLogBin inside a transaction", - ErrStoredFunctionPreventsSwitchSQLLogBin: "Cannot change the sqlLogBin inside a stored function or trigger", - ErrFailedReadFromParFile: "Failed to read from the .par file", - ErrValuesIsNotIntType: "VALUES value for partition '%-.64s' must have type INT", - ErrAccessDeniedNoPassword: "Access denied for user '%-.48s'@'%-.64s'", - ErrSetPasswordAuthPlugin: "SET PASSWORD has no significance for users authenticating via plugins", - ErrGrantPluginUserExists: "GRANT with IDENTIFIED WITH is illegal because the user %-.*s already exists", - ErrTruncateIllegalFk: "Cannot truncate a table referenced in a foreign key constraint (%.192s)", - ErrPluginIsPermanent: "Plugin '%s' is forcePlusPermanent and can not be unloaded", - ErrSlaveHeartbeatValueOutOfRangeMin: "The requested value for the heartbeat period is less than 1 millisecond. The value is reset to 0, meaning that heartbeating will effectively be disabled.", - ErrSlaveHeartbeatValueOutOfRangeMax: "The requested value for the heartbeat period exceeds the value of `slaveNetTimeout' seconds. A sensible value for the period should be less than the timeout.", - ErrStmtCacheFull: "Multi-row statements required more than 'maxBinlogStmtCacheSize' bytes of storage; increase this mysqld variable and try again", - ErrMultiUpdateKeyConflict: "Primary key/partition key update is not allowed since the table is updated both as '%-.192s' and '%-.192s'.", - ErrTableNeedsRebuild: "Table rebuild required. Please do \"ALTER TABLE `%-.32s` FORCE\" or dump/reload to fix it!", - WarnOptionBelowLimit: "The value of '%s' should be no less than the value of '%s'", - ErrIndexColumnTooLong: "Index column size too large. The maximum column size is %lu bytes.", - ErrErrorInTriggerBody: "Trigger '%-.64s' has an error in its body: '%-.256s'", - ErrErrorInUnknownTriggerBody: "Unknown trigger has an error in its body: '%-.256s'", - ErrIndexCorrupt: "Index %s is corrupted", - ErrUndoRecordTooBig: "Undo log record is too big.", - ErrBinlogUnsafeInsertIgnoreSelect: "INSERT IGNORE... SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave.", - ErrBinlogUnsafeInsertSelectUpdate: "INSERT... SELECT... ON DUPLICATE KEY UPDATE is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are updated. This order cannot be predicted and may differ on master and the slave.", - ErrBinlogUnsafeReplaceSelect: "REPLACE... SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are replaced. This order cannot be predicted and may differ on master and the slave.", - ErrBinlogUnsafeCreateIgnoreSelect: "CREATE... IGNORE SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave.", - ErrBinlogUnsafeCreateReplaceSelect: "CREATE... REPLACE SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are replaced. This order cannot be predicted and may differ on master and the slave.", - ErrBinlogUnsafeUpdateIgnore: "UPDATE IGNORE is unsafe because the order in which rows are updated determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave.", - ErrPluginNoUninstall: "Plugin '%s' is marked as not dynamically uninstallable. You have to stop the server to uninstall it.", - ErrPluginNoInstall: "Plugin '%s' is marked as not dynamically installable. You have to stop the server to install it.", - ErrBinlogUnsafeWriteAutoincSelect: "Statements writing to a table with an auto-increment column after selecting from another table are unsafe because the order in which rows are retrieved determines what (if any) rows will be written. This order cannot be predicted and may differ on master and the slave.", - ErrBinlogUnsafeCreateSelectAutoinc: "CREATE TABLE... SELECT... on a table with an auto-increment column is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are inserted. This order cannot be predicted and may differ on master and the slave.", - ErrBinlogUnsafeInsertTwoKeys: "INSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY is unsafe", - ErrTableInFkCheck: "Table is being used in foreign key check.", - ErrUnsupportedEngine: "Storage engine '%s' does not support system tables. [%s.%s]", - ErrBinlogUnsafeAutoincNotFirst: "INSERT into autoincrement field which is not the first part in the composed primary key is unsafe.", - ErrCannotLoadFromTableV2: "Cannot load from %s.%s. The table is probably corrupted", - ErrMasterDelayValueOutOfRange: "The requested value %d for the master delay exceeds the maximum %d", - ErrOnlyFdAndRbrEventsAllowedInBinlogStatement: "Only FormatDescriptionLogEvent and row events are allowed in BINLOG statements (but %s was provided)", - ErrPartitionExchangeDifferentOption: "Non matching attribute '%-.64s' between partition and table", - ErrPartitionExchangePartTable: "Table to exchange with partition is partitioned: '%-.64s'", - ErrPartitionExchangeTempTable: "Table to exchange with partition is temporary: '%-.64s'", - ErrPartitionInsteadOfSubpartition: "Subpartitioned table, use subpartition instead of partition", - ErrUnknownPartition: "Unknown partition '%-.64s' in table '%-.64s'", - ErrTablesDifferentMetadata: "Tables have different definitions", - ErrRowDoesNotMatchPartition: "Found a row that does not match the partition", - ErrBinlogCacheSizeGreaterThanMax: "Option binlogCacheSize (%lu) is greater than maxBinlogCacheSize (%lu); setting binlogCacheSize equal to maxBinlogCacheSize.", - ErrWarnIndexNotApplicable: "Cannot use %-.64s access on index '%-.64s' due to type or collation conversion on field '%-.64s'", - ErrPartitionExchangeForeignKey: "Table to exchange with partition has foreign key references: '%-.64s'", - ErrNoSuchKeyValue: "Key value '%-.192s' was not found in table '%-.192s.%-.192s'", - ErrRplInfoDataTooLong: "Data for column '%s' too long", - ErrNetworkReadEventChecksumFailure: "Replication event checksum verification failed while reading from network.", - ErrBinlogReadEventChecksumFailure: "Replication event checksum verification failed while reading from a log file.", - ErrBinlogStmtCacheSizeGreaterThanMax: "Option binlogStmtCacheSize (%lu) is greater than maxBinlogStmtCacheSize (%lu); setting binlogStmtCacheSize equal to maxBinlogStmtCacheSize.", - ErrCantUpdateTableInCreateTableSelect: "Can't update table '%-.192s' while '%-.192s' is being created.", - ErrPartitionClauseOnNonpartitioned: "PARTITION () clause on non partitioned table", - ErrRowDoesNotMatchGivenPartitionSet: "Found a row not matching the given partition set", - ErrNoSuchPartitionunused: "partition '%-.64s' doesn't exist", - ErrChangeRplInfoRepositoryFailure: "Failure while changing the type of replication repository: %s.", - ErrWarningNotCompleteRollbackWithCreatedTempTable: "The creation of some temporary tables could not be rolled back.", - ErrWarningNotCompleteRollbackWithDroppedTempTable: "Some temporary tables were dropped, but these operations could not be rolled back.", - ErrMtsFeatureIsNotSupported: "%s is not supported in multi-threaded slave mode. %s", - ErrMtsUpdatedDBsGreaterMax: "The number of modified databases exceeds the maximum %d; the database names will not be included in the replication event metadata.", - ErrMtsCantParallel: "Cannot execute the current event group in the parallel mode. Encountered event %s, relay-log name %s, position %s which prevents execution of this event group in parallel mode. Reason: %s.", - ErrMtsInconsistentData: "%s", - ErrFulltextNotSupportedWithPartitioning: "FULLTEXT index is not supported for partitioned tables.", - ErrDaInvalidConditionNumber: "Invalid condition number", - ErrInsecurePlainText: "Sending passwords in plain text without SSL/TLS is extremely insecure.", - ErrInsecureChangeMaster: "Storing MySQL user name or password information in the master.info repository is not secure and is therefore not recommended. Please see the MySQL Manual for more about this issue and possible alternatives.", - ErrForeignDuplicateKeyWithChildInfo: "Foreign key constraint for table '%.192s', record '%-.192s' would lead to a duplicate entry in table '%.192s', key '%.192s'", - ErrForeignDuplicateKeyWithoutChildInfo: "Foreign key constraint for table '%.192s', record '%-.192s' would lead to a duplicate entry in a child table", - ErrSQLthreadWithSecureSlave: "Setting authentication options is not possible when only the Slave SQL Thread is being started.", - ErrTableHasNoFt: "The table does not have FULLTEXT index to support this query", - ErrVariableNotSettableInSfOrTrigger: "The system variable %.200s cannot be set in stored functions or triggers.", - ErrVariableNotSettableInTransaction: "The system variable %.200s cannot be set when there is an ongoing transaction.", - ErrGtidNextIsNotInGtidNextList: "The system variable @@SESSION.GTIDNEXT has the value %.200s, which is not listed in @@SESSION.GTIDNEXTLIST.", - ErrCantChangeGtidNextInTransactionWhenGtidNextListIsNull: "When @@SESSION.GTIDNEXTLIST == NULL, the system variable @@SESSION.GTIDNEXT cannot change inside a transaction.", - ErrSetStatementCannotInvokeFunction: "The statement 'SET %.200s' cannot invoke a stored function.", - ErrGtidNextCantBeAutomaticIfGtidNextListIsNonNull: "The system variable @@SESSION.GTIDNEXT cannot be 'AUTOMATIC' when @@SESSION.GTIDNEXTLIST is non-NULL.", - ErrSkippingLoggedTransaction: "Skipping transaction %.200s because it has already been executed and logged.", - ErrMalformedGtidSetSpecification: "Malformed GTID set specification '%.200s'.", - ErrMalformedGtidSetEncoding: "Malformed GTID set encoding.", - ErrMalformedGtidSpecification: "Malformed GTID specification '%.200s'.", - ErrGnoExhausted: "Impossible to generate Global Transaction Identifier: the integer component reached the maximal value. Restart the server with a new serverUuid.", - ErrBadSlaveAutoPosition: "Parameters MASTERLOGFILE, MASTERLOGPOS, RELAYLOGFILE and RELAYLOGPOS cannot be set when MASTERAUTOPOSITION is active.", - ErrAutoPositionRequiresGtidModeOn: "CHANGE MASTER TO MASTERAUTOPOSITION = 1 can only be executed when @@GLOBAL.GTIDMODE = ON.", - ErrCantDoImplicitCommitInTrxWhenGtidNextIsSet: "Cannot execute statements with implicit commit inside a transaction when @@SESSION.GTIDNEXT != AUTOMATIC or @@SESSION.GTIDNEXTLIST != NULL.", - ErrGtidMode2Or3RequiresEnforceGtidConsistencyOn: "@@GLOBAL.GTIDMODE = ON or UPGRADESTEP2 requires @@GLOBAL.ENFORCEGTIDCONSISTENCY = 1.", - ErrGtidModeRequiresBinlog: "@@GLOBAL.GTIDMODE = ON or UPGRADESTEP1 or UPGRADESTEP2 requires --log-bin and --log-slave-updates.", - ErrCantSetGtidNextToGtidWhenGtidModeIsOff: "@@SESSION.GTIDNEXT cannot be set to UUID:NUMBER when @@GLOBAL.GTIDMODE = OFF.", - ErrCantSetGtidNextToAnonymousWhenGtidModeIsOn: "@@SESSION.GTIDNEXT cannot be set to ANONYMOUS when @@GLOBAL.GTIDMODE = ON.", - ErrCantSetGtidNextListToNonNullWhenGtidModeIsOff: "@@SESSION.GTIDNEXTLIST cannot be set to a non-NULL value when @@GLOBAL.GTIDMODE = OFF.", - ErrFoundGtidEventWhenGtidModeIsOff: "Found a GtidLogEvent or PreviousGtidsLogEvent when @@GLOBAL.GTIDMODE = OFF.", - ErrGtidUnsafeNonTransactionalTable: "When @@GLOBAL.ENFORCEGTIDCONSISTENCY = 1, updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions, and never in the same statement as updates to transactional tables.", - ErrGtidUnsafeCreateSelect: "CREATE TABLE ... SELECT is forbidden when @@GLOBAL.ENFORCEGTIDCONSISTENCY = 1.", - ErrGtidUnsafeCreateDropTemporaryTableInTransaction: "When @@GLOBAL.ENFORCEGTIDCONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1.", - ErrGtidModeCanOnlyChangeOneStepAtATime: "The value of @@GLOBAL.GTIDMODE can only change one step at a time: OFF <-> UPGRADESTEP1 <-> UPGRADESTEP2 <-> ON. Also note that this value must be stepped up or down simultaneously on all servers; see the Manual for instructions.", - ErrMasterHasPurgedRequiredGtids: "The slave is connecting using CHANGE MASTER TO MASTERAUTOPOSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.", - ErrCantSetGtidNextWhenOwningGtid: "@@SESSION.GTIDNEXT cannot be changed by a client that owns a GTID. The client owns %s. Ownership is released on COMMIT or ROLLBACK.", - ErrUnknownExplainFormat: "Unknown EXPLAIN format name: '%s'", - ErrCantExecuteInReadOnlyTransaction: "Cannot execute statement in a READ ONLY transaction.", - ErrTooLongTablePartitionComment: "Comment for table partition '%-.64s' is too long (max = %lu)", - ErrSlaveConfiguration: "Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.", - ErrInnodbFtLimit: "InnoDB presently supports one FULLTEXT index creation at a time", - ErrInnodbNoFtTempTable: "Cannot create FULLTEXT index on temporary InnoDB table", - ErrInnodbFtWrongDocidColumn: "Column '%-.192s' is of wrong type for an InnoDB FULLTEXT index", - ErrInnodbFtWrongDocidIndex: "Index '%-.192s' is of wrong type for an InnoDB FULLTEXT index", - ErrInnodbOnlineLogTooBig: "Creating index '%-.192s' required more than 'innodbOnlineAlterLogMaxSize' bytes of modification log. Please try again.", - ErrUnknownAlterAlgorithm: "Unknown ALGORITHM '%s'", - ErrUnknownAlterLock: "Unknown LOCK type '%s'", - ErrMtsChangeMasterCantRunWithGaps: "CHANGE MASTER cannot be executed when the slave was stopped with an error or killed in MTS mode. Consider using RESET SLAVE or START SLAVE UNTIL.", - ErrMtsRecoveryFailure: "Cannot recover after SLAVE errored out in parallel execution mode. Additional error messages can be found in the MySQL error log.", - ErrMtsResetWorkers: "Cannot clean up worker info tables. Additional error messages can be found in the MySQL error log.", - ErrColCountDoesntMatchCorruptedV2: "Column count of %s.%s is wrong. Expected %d, found %d. The table is probably corrupted", - ErrSlaveSilentRetryTransaction: "Slave must silently retry current transaction", - ErrDiscardFkChecksRunning: "There is a foreign key check running on table '%-.192s'. Cannot discard the table.", - ErrTableSchemaMismatch: "Schema mismatch (%s)", - ErrTableInSystemTablespace: "Table '%-.192s' in system tablespace", - ErrIoRead: "IO Read : (%lu, %s) %s", - ErrIoWrite: "IO Write : (%lu, %s) %s", - ErrTablespaceMissing: "Tablespace is missing for table '%-.192s'", - ErrTablespaceExists: "Tablespace for table '%-.192s' exists. Please DISCARD the tablespace before IMPORT.", - ErrTablespaceDiscarded: "Tablespace has been discarded for table '%-.192s'", - ErrInternal: "Internal : %s", - ErrInnodbImport: "ALTER TABLE '%-.192s' IMPORT TABLESPACE failed with error %lu : '%s'", - ErrInnodbIndexCorrupt: "Index corrupt: %s", - ErrInvalidYearColumnLength: "YEAR(%lu) column type is deprecated. Creating YEAR(4) column instead.", - ErrNotValidPassword: "Your password does not satisfy the current policy requirements", - ErrMustChangePassword: "You must SET PASSWORD before executing this statement", - ErrFkNoIndexChild: "Failed to add the foreign key constaint. Missing index for constraint '%s' in the foreign table '%s'", - ErrFkNoIndexParent: "Failed to add the foreign key constaint. Missing index for constraint '%s' in the referenced table '%s'", - ErrFkFailAddSystem: "Failed to add the foreign key constraint '%s' to system tables", - ErrFkCannotOpenParent: "Failed to open the referenced table '%s'", - ErrFkIncorrectOption: "Failed to add the foreign key constraint on table '%s'. Incorrect options in FOREIGN KEY constraint '%s'", - ErrFkDupName: "Duplicate foreign key constraint name '%s'", - ErrPasswordFormat: "The password hash doesn't have the expected format. Check if the correct password algorithm is being used with the PASSWORD() function.", - ErrFkColumnCannotDrop: "Cannot drop column '%-.192s': needed in a foreign key constraint '%-.192s'", - ErrFkColumnCannotDropChild: "Cannot drop column '%-.192s': needed in a foreign key constraint '%-.192s' of table '%-.192s'", - ErrFkColumnNotNull: "Column '%-.192s' cannot be NOT NULL: needed in a foreign key constraint '%-.192s' SET NULL", - ErrDupIndex: "Duplicate index '%-.64s' defined on the table '%-.64s.%-.64s'. This is deprecated and will be disallowed in a future release.", - ErrFkColumnCannotChange: "Cannot change column '%-.192s': used in a foreign key constraint '%-.192s'", - ErrFkColumnCannotChangeChild: "Cannot change column '%-.192s': used in a foreign key constraint '%-.192s' of table '%-.192s'", - ErrFkCannotDeleteParent: "Cannot delete rows from table which is parent in a foreign key constraint '%-.192s' of table '%-.192s'", - ErrMalformedPacket: "Malformed communication packet.", - ErrReadOnlyMode: "Running in read-only mode", - ErrGtidNextTypeUndefinedGroup: "When @@SESSION.GTIDNEXT is set to a GTID, you must explicitly set it again after a COMMIT or ROLLBACK. If you see this error message in the slave SQL thread, it means that a table in the current transaction is transactional on the master and non-transactional on the slave. In a client connection, it means that you executed SET @@SESSION.GTIDNEXT before a transaction and forgot to set @@SESSION.GTIDNEXT to a different identifier or to 'AUTOMATIC' after COMMIT or ROLLBACK. Current @@SESSION.GTIDNEXT is '%s'.", - ErrVariableNotSettableInSp: "The system variable %.200s cannot be set in stored procedures.", - ErrCantSetGtidPurgedWhenGtidModeIsOff: "@@GLOBAL.GTIDPURGED can only be set when @@GLOBAL.GTIDMODE = ON.", - ErrCantSetGtidPurgedWhenGtidExecutedIsNotEmpty: "@@GLOBAL.GTIDPURGED can only be set when @@GLOBAL.GTIDEXECUTED is empty.", - ErrCantSetGtidPurgedWhenOwnedGtidsIsNotEmpty: "@@GLOBAL.GTIDPURGED can only be set when there are no ongoing transactions (not even in other clients).", - ErrGtidPurgedWasChanged: "@@GLOBAL.GTIDPURGED was changed from '%s' to '%s'.", - ErrGtidExecutedWasChanged: "@@GLOBAL.GTIDEXECUTED was changed from '%s' to '%s'.", - ErrBinlogStmtModeAndNoReplTables: "Cannot execute statement: impossible to write to binary log since BINLOGFORMAT = STATEMENT, and both replicated and non replicated tables are written to.", - ErrAlterOperationNotSupported: "%s is not supported for this operation. Try %s.", - ErrAlterOperationNotSupportedReason: "%s is not supported. Reason: %s. Try %s.", - ErrAlterOperationNotSupportedReasonCopy: "COPY algorithm requires a lock", - ErrAlterOperationNotSupportedReasonPartition: "Partition specific operations do not yet support LOCK/ALGORITHM", - ErrAlterOperationNotSupportedReasonFkRename: "Columns participating in a foreign key are renamed", - ErrAlterOperationNotSupportedReasonColumnType: "Cannot change column type INPLACE", - ErrAlterOperationNotSupportedReasonFkCheck: "Adding foreign keys needs foreignKeyChecks=OFF", - ErrAlterOperationNotSupportedReasonIgnore: "Creating unique indexes with IGNORE requires COPY algorithm to remove duplicate rows", - ErrAlterOperationNotSupportedReasonNopk: "Dropping a primary key is not allowed without also adding a new primary key", - ErrAlterOperationNotSupportedReasonAutoinc: "Adding an auto-increment column requires a lock", - ErrAlterOperationNotSupportedReasonHiddenFts: "Cannot replace hidden FTSDOCID with a user-visible one", - ErrAlterOperationNotSupportedReasonChangeFts: "Cannot drop or rename FTSDOCID", - ErrAlterOperationNotSupportedReasonFts: "Fulltext index creation requires a lock", - ErrSQLSlaveSkipCounterNotSettableInGtidMode: "sqlSlaveSkipCounter can not be set when the server is running with @@GLOBAL.GTIDMODE = ON. Instead, for each transaction that you want to skip, generate an empty transaction with the same GTID as the transaction", - ErrDupUnknownInIndex: "Duplicate entry for key '%-.192s'", - ErrIdentCausesTooLongPath: "Long database name and identifier for object resulted in path length exceeding %d characters. Path: '%s'.", - ErrAlterOperationNotSupportedReasonNotNull: "cannot silently convert NULL values, as required in this SQLMODE", - ErrMustChangePasswordLogin: "Your password has expired. To log in you must change it using a client that supports expired passwords.", - ErrRowInWrongPartition: "Found a row in wrong partition %s", - ErrBadGeneratedColumn: "The value specified for generated column '%s' in table '%s' is not allowed.", - ErrUnsupportedOnGeneratedColumn: "'%s' is not supported for generated columns.", - ErrGeneratedColumnNonPrior: "Generated column can refer only to generated columns defined prior to it.", - ErrDependentByGeneratedColumn: "Column '%s' has a generated column dependency.", - ErrInvalidJSONText: "Invalid JSON text: %-.192s", - ErrInvalidJSONPath: "Invalid JSON path expression %s.", - ErrInvalidJSONData: "Invalid data type for JSON data", - ErrJSONUsedAsKey: "JSON column '%-.192s' cannot be used in key specification.", - ErrMemExceedThreshold: "%s holds %dB memory, exceeds threshold %dB.%s", - ErrForUpdateCantRetry: "[%d] can not retry select for update statement", - - // TiKV/PD errors. - ErrPDServerTimeout: "PD server timeout", - ErrTiKVServerTimeout: "TiKV server timeout", - ErrTiKVServerBusy: "TiKV server is busy", - ErrResolveLockTimeout: "Resolve lock timeout", - ErrRegionUnavailable: "Region is unavailable", - ErrGCTooEarly: "GC life time is shorter than transaction duration", - - ErrTxnTooLarge: "Transaction is too large", -} diff --git a/vendor/github.com/pingcap/tidb/mysql/error.go b/vendor/github.com/pingcap/tidb/mysql/error.go deleted file mode 100644 index fd6316c..0000000 --- a/vendor/github.com/pingcap/tidb/mysql/error.go +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package mysql - -import ( - "errors" - "fmt" -) - -// Portable analogs of some common call errors. -var ( - ErrBadConn = errors.New("connection was bad") - ErrMalformPacket = errors.New("malform packet error") -) - -// SQLError records an error information, from executing SQL. -type SQLError struct { - Code uint16 - Message string - State string -} - -// Error prints errors, with a formatted string. -func (e *SQLError) Error() string { - return fmt.Sprintf("ERROR %d (%s): %s", e.Code, e.State, e.Message) -} - -// NewErr generates a SQL error, with an error code and default format specifier defined in MySQLErrName. -func NewErr(errCode uint16, args ...interface{}) *SQLError { - e := &SQLError{Code: errCode} - - if s, ok := MySQLState[errCode]; ok { - e.State = s - } else { - e.State = DefaultMySQLState - } - - if format, ok := MySQLErrName[errCode]; ok { - e.Message = fmt.Sprintf(format, args...) - } else { - e.Message = fmt.Sprint(args...) - } - - return e -} - -// NewErrf creates a SQL error, with an error code and a format specifier. -func NewErrf(errCode uint16, format string, args ...interface{}) *SQLError { - e := &SQLError{Code: errCode} - - if s, ok := MySQLState[errCode]; ok { - e.State = s - } else { - e.State = DefaultMySQLState - } - - e.Message = fmt.Sprintf(format, args...) - - return e -} diff --git a/vendor/github.com/pingcap/tidb/mysql/locale_format.go b/vendor/github.com/pingcap/tidb/mysql/locale_format.go deleted file mode 100644 index dc665be..0000000 --- a/vendor/github.com/pingcap/tidb/mysql/locale_format.go +++ /dev/null @@ -1,99 +0,0 @@ -package mysql - -import ( - "bytes" - "strconv" - "strings" - "unicode" - - "github.com/juju/errors" -) - -func formatENUS(number string, precision string) (string, error) { - var buffer bytes.Buffer - if unicode.IsDigit(rune(precision[0])) { - for i, v := range precision { - if unicode.IsDigit(v) { - continue - } else { - precision = precision[:i] - break - } - } - } else { - precision = "0" - } - if number[0] == '-' && number[1] == '.' { - number = strings.Replace(number, "-", "-0", 1) - } else if number[0] == '.' { - number = strings.Replace(number, ".", "0.", 1) - } - - if (number[:1] == "-" && !unicode.IsDigit(rune(number[1]))) || - (!unicode.IsDigit(rune(number[0])) && number[:1] != "-") { - buffer.Write([]byte{'0'}) - position, err := strconv.ParseUint(precision, 10, 64) - if err == nil && position > 0 { - buffer.Write([]byte{'.'}) - buffer.WriteString(strings.Repeat("0", int(position))) - } - return buffer.String(), nil - } else if number[:1] == "-" { - buffer.Write([]byte{'-'}) - number = number[1:] - } - - for i, v := range number { - if unicode.IsDigit(v) { - continue - } else if i == 1 && number[1] == '.' { - continue - } else if v == '.' && number[1] != '.' { - continue - } else { - number = number[:i] - break - } - } - - comma := []byte{','} - parts := strings.Split(number, ".") - pos := 0 - if len(parts[0])%3 != 0 { - pos += len(parts[0]) % 3 - buffer.WriteString(parts[0][:pos]) - buffer.Write(comma) - } - for ; pos < len(parts[0]); pos += 3 { - buffer.WriteString(parts[0][pos : pos+3]) - buffer.Write(comma) - } - buffer.Truncate(buffer.Len() - 1) - - position, err := strconv.ParseUint(precision, 10, 64) - if err == nil { - if position > 0 { - buffer.Write([]byte{'.'}) - if len(parts) == 2 { - if uint64(len(parts[1])) >= position { - buffer.WriteString(parts[1][:position]) - } else { - buffer.WriteString(parts[1]) - buffer.WriteString(strings.Repeat("0", int(position)-len(parts[1]))) - } - } else { - buffer.WriteString(strings.Repeat("0", int(position))) - } - } - } - - return buffer.String(), nil -} - -func formatZHCN(number string, precision string) (string, error) { - return "", errors.New("not implemented") -} - -func formatNotSupport(number string, precision string) (string, error) { - return "", errors.New("not support for the specific locale") -} diff --git a/vendor/github.com/pingcap/tidb/mysql/state.go b/vendor/github.com/pingcap/tidb/mysql/state.go deleted file mode 100644 index 117b6e0..0000000 --- a/vendor/github.com/pingcap/tidb/mysql/state.go +++ /dev/null @@ -1,257 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package mysql - -const ( - // DefaultMySQLState is default state of the mySQL - DefaultMySQLState = "HY000" -) - -// MySQLState maps error code to MySQL SQLSTATE value. -// The values are taken from ANSI SQL and ODBC and are more standardized. -var MySQLState = map[uint16]string{ - ErrDupKey: "23000", - ErrOutofMemory: "HY001", - ErrOutOfSortMemory: "HY001", - ErrConCount: "08004", - ErrBadHost: "08S01", - ErrHandshake: "08S01", - ErrDBaccessDenied: "42000", - ErrAccessDenied: "28000", - ErrNoDB: "3D000", - ErrUnknownCom: "08S01", - ErrBadNull: "23000", - ErrBadDB: "42000", - ErrTableExists: "42S01", - ErrBadTable: "42S02", - ErrNonUniq: "23000", - ErrServerShutdown: "08S01", - ErrBadField: "42S22", - ErrFieldNotInGroupBy: "42000", - ErrWrongSumSelect: "42000", - ErrWrongGroupField: "42000", - ErrWrongValueCount: "21S01", - ErrTooLongIdent: "42000", - ErrDupFieldName: "42S21", - ErrDupKeyName: "42000", - ErrDupEntry: "23000", - ErrWrongFieldSpec: "42000", - ErrParse: "42000", - ErrEmptyQuery: "42000", - ErrNonuniqTable: "42000", - ErrInvalidDefault: "42000", - ErrMultiplePriKey: "42000", - ErrTooManyKeys: "42000", - ErrTooManyKeyParts: "42000", - ErrTooLongKey: "42000", - ErrKeyColumnDoesNotExits: "42000", - ErrBlobUsedAsKey: "42000", - ErrTooBigFieldlength: "42000", - ErrWrongAutoKey: "42000", - ErrForcingClose: "08S01", - ErrIpsock: "08S01", - ErrNoSuchIndex: "42S12", - ErrWrongFieldTerminators: "42000", - ErrBlobsAndNoTerminated: "42000", - ErrCantRemoveAllFields: "42000", - ErrCantDropFieldOrKey: "42000", - ErrBlobCantHaveDefault: "42000", - ErrWrongDBName: "42000", - ErrWrongTableName: "42000", - ErrTooBigSelect: "42000", - ErrUnknownProcedure: "42000", - ErrWrongParamcountToProcedure: "42000", - ErrUnknownTable: "42S02", - ErrFieldSpecifiedTwice: "42000", - ErrUnsupportedExtension: "42000", - ErrTableMustHaveColumns: "42000", - ErrUnknownCharacterSet: "42000", - ErrTooBigRowsize: "42000", - ErrWrongOuterJoin: "42000", - ErrNullColumnInIndex: "42000", - ErrPasswordAnonymousUser: "42000", - ErrPasswordNotAllowed: "42000", - ErrPasswordNoMatch: "42000", - ErrWrongValueCountOnRow: "21S01", - ErrInvalidUseOfNull: "22004", - ErrRegexp: "42000", - ErrMixOfGroupFuncAndFields: "42000", - ErrNonexistingGrant: "42000", - ErrTableaccessDenied: "42000", - ErrColumnaccessDenied: "42000", - ErrIllegalGrantForTable: "42000", - ErrGrantWrongHostOrUser: "42000", - ErrNoSuchTable: "42S02", - ErrNonexistingTableGrant: "42000", - ErrNotAllowedCommand: "42000", - ErrSyntax: "42000", - ErrAbortingConnection: "08S01", - ErrNetPacketTooLarge: "08S01", - ErrNetReadErrorFromPipe: "08S01", - ErrNetFcntl: "08S01", - ErrNetPacketsOutOfOrder: "08S01", - ErrNetUncompress: "08S01", - ErrNetRead: "08S01", - ErrNetReadInterrupted: "08S01", - ErrNetErrorOnWrite: "08S01", - ErrNetWriteInterrupted: "08S01", - ErrTooLongString: "42000", - ErrTableCantHandleBlob: "42000", - ErrTableCantHandleAutoIncrement: "42000", - ErrWrongColumnName: "42000", - ErrWrongKeyColumn: "42000", - ErrDupUnique: "23000", - ErrBlobKeyWithoutLength: "42000", - ErrPrimaryCantHaveNull: "42000", - ErrTooManyRows: "42000", - ErrRequiresPrimaryKey: "42000", - ErrKeyDoesNotExist: "42000", - ErrCheckNoSuchTable: "42000", - ErrCheckNotImplemented: "42000", - ErrCantDoThisDuringAnTransaction: "25000", - ErrNewAbortingConnection: "08S01", - ErrMasterNetRead: "08S01", - ErrMasterNetWrite: "08S01", - ErrTooManyUserConnections: "42000", - ErrReadOnlyTransaction: "25000", - ErrNoPermissionToCreateUser: "42000", - ErrLockDeadlock: "40001", - ErrNoReferencedRow: "23000", - ErrRowIsReferenced: "23000", - ErrConnectToMaster: "08S01", - ErrWrongNumberOfColumnsInSelect: "21000", - ErrUserLimitReached: "42000", - ErrSpecificAccessDenied: "42000", - ErrNoDefault: "42000", - ErrWrongValueForVar: "42000", - ErrWrongTypeForVar: "42000", - ErrCantUseOptionHere: "42000", - ErrNotSupportedYet: "42000", - ErrWrongFkDef: "42000", - ErrOperandColumns: "21000", - ErrSubqueryNo1Row: "21000", - ErrIllegalReference: "42S22", - ErrDerivedMustHaveAlias: "42000", - ErrSelectReduced: "01000", - ErrTablenameNotAllowedHere: "42000", - ErrNotSupportedAuthMode: "08004", - ErrSpatialCantHaveNull: "42000", - ErrCollationCharsetMismatch: "42000", - ErrWarnTooFewRecords: "01000", - ErrWarnTooManyRecords: "01000", - ErrWarnNullToNotnull: "22004", - ErrWarnDataOutOfRange: "22003", - WarnDataTruncated: "01000", - ErrWrongNameForIndex: "42000", - ErrWrongNameForCatalog: "42000", - ErrUnknownStorageEngine: "42000", - ErrTruncatedWrongValue: "22007", - ErrSpNoRecursiveCreate: "2F003", - ErrSpAlreadyExists: "42000", - ErrSpDoesNotExist: "42000", - ErrSpLilabelMismatch: "42000", - ErrSpLabelRedefine: "42000", - ErrSpLabelMismatch: "42000", - ErrSpUninitVar: "01000", - ErrSpBadselect: "0A000", - ErrSpBadreturn: "42000", - ErrSpBadstatement: "0A000", - ErrUpdateLogDeprecatedIgnored: "42000", - ErrUpdateLogDeprecatedTranslated: "42000", - ErrQueryInterrupted: "70100", - ErrSpWrongNoOfArgs: "42000", - ErrSpCondMismatch: "42000", - ErrSpNoreturn: "42000", - ErrSpNoreturnend: "2F005", - ErrSpBadCursorQuery: "42000", - ErrSpBadCursorSelect: "42000", - ErrSpCursorMismatch: "42000", - ErrSpCursorAlreadyOpen: "24000", - ErrSpCursorNotOpen: "24000", - ErrSpUndeclaredVar: "42000", - ErrSpFetchNoData: "02000", - ErrSpDupParam: "42000", - ErrSpDupVar: "42000", - ErrSpDupCond: "42000", - ErrSpDupCurs: "42000", - ErrSpSubselectNyi: "0A000", - ErrStmtNotAllowedInSfOrTrg: "0A000", - ErrSpVarcondAfterCurshndlr: "42000", - ErrSpCursorAfterHandler: "42000", - ErrSpCaseNotFound: "20000", - ErrDivisionByZero: "22012", - ErrIllegalValueForType: "22007", - ErrProcaccessDenied: "42000", - ErrXaerNota: "XAE04", - ErrXaerInval: "XAE05", - ErrXaerRmfail: "XAE07", - ErrXaerOutside: "XAE09", - ErrXaerRmerr: "XAE03", - ErrXaRbrollback: "XA100", - ErrNonexistingProcGrant: "42000", - ErrDataTooLong: "22001", - ErrSpBadSQLstate: "42000", - ErrCantCreateUserWithGrant: "42000", - ErrSpDupHandler: "42000", - ErrSpNotVarArg: "42000", - ErrSpNoRetset: "0A000", - ErrCantCreateGeometryObject: "22003", - ErrTooBigScale: "42000", - ErrTooBigPrecision: "42000", - ErrMBiggerThanD: "42000", - ErrTooLongBody: "42000", - ErrTooBigDisplaywidth: "42000", - ErrXaerDupid: "XAE08", - ErrDatetimeFunctionOverflow: "22008", - ErrRowIsReferenced2: "23000", - ErrNoReferencedRow2: "23000", - ErrSpBadVarShadow: "42000", - ErrSpWrongName: "42000", - ErrSpNoAggregate: "42000", - ErrMaxPreparedStmtCountReached: "42000", - ErrNonGroupingFieldUsed: "42000", - ErrForeignDuplicateKeyOldUnused: "23000", - ErrCantChangeTxCharacteristics: "25001", - ErrWrongParamcountToNativeFct: "42000", - ErrWrongParametersToNativeFct: "42000", - ErrWrongParametersToStoredFct: "42000", - ErrDupEntryWithKeyName: "23000", - ErrXaRbtimeout: "XA106", - ErrXaRbdeadlock: "XA102", - ErrFuncInexistentNameCollision: "42000", - ErrDupSignalSet: "42000", - ErrSignalWarn: "01000", - ErrSignalNotFound: "02000", - ErrSignalException: "HY000", - ErrResignalWithoutActiveHandler: "0K000", - ErrSpatialMustHaveGeomCol: "42000", - ErrDataOutOfRange: "22003", - ErrAccessDeniedNoPassword: "28000", - ErrTruncateIllegalFk: "42000", - ErrDaInvalidConditionNumber: "35000", - ErrForeignDuplicateKeyWithChildInfo: "23000", - ErrForeignDuplicateKeyWithoutChildInfo: "23000", - ErrCantExecuteInReadOnlyTransaction: "25006", - ErrAlterOperationNotSupported: "0A000", - ErrAlterOperationNotSupportedReason: "0A000", - ErrDupUnknownInIndex: "23000", - ErrBadGeneratedColumn: "HY000", - ErrUnsupportedOnGeneratedColumn: "HY000", - ErrGeneratedColumnNonPrior: "HY000", - ErrDependentByGeneratedColumn: "HY000", - ErrInvalidJSONText: "22032", - ErrInvalidJSONPath: "42000", - ErrInvalidJSONData: "22032", - ErrJSONUsedAsKey: "42000", -} diff --git a/vendor/github.com/pingcap/tidb/mysql/type.go b/vendor/github.com/pingcap/tidb/mysql/type.go deleted file mode 100644 index a18e7a6..0000000 --- a/vendor/github.com/pingcap/tidb/mysql/type.go +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package mysql - -// MySQL type information. -const ( - TypeDecimal byte = 0 - TypeTiny byte = 1 - TypeShort byte = 2 - TypeLong byte = 3 - TypeFloat byte = 4 - TypeDouble byte = 5 - TypeNull byte = 6 - TypeTimestamp byte = 7 - TypeLonglong byte = 8 - TypeInt24 byte = 9 - TypeDate byte = 10 - /* Original name was TypeTime, renamed to Duration to resolve the conflict with Go type Time.*/ - TypeDuration byte = 11 - TypeDatetime byte = 12 - TypeYear byte = 13 - TypeNewDate byte = 14 - TypeVarchar byte = 15 - TypeBit byte = 16 - - TypeJSON byte = 0xf5 - TypeNewDecimal byte = 0xf6 - TypeEnum byte = 0xf7 - TypeSet byte = 0xf8 - TypeTinyBlob byte = 0xf9 - TypeMediumBlob byte = 0xfa - TypeLongBlob byte = 0xfb - TypeBlob byte = 0xfc - TypeVarString byte = 0xfd - TypeString byte = 0xfe - TypeGeometry byte = 0xff -) - -// TypeUnspecified is an uninitialized type. TypeDecimal is not used in MySQL. -const TypeUnspecified = TypeDecimal - -// Flag information. -const ( - NotNullFlag uint = 1 << 0 /* Field can't be NULL */ - PriKeyFlag uint = 1 << 1 /* Field is part of a primary key */ - UniqueKeyFlag uint = 1 << 2 /* Field is part of a unique key */ - MultipleKeyFlag uint = 1 << 3 /* Field is part of a key */ - BlobFlag uint = 1 << 4 /* Field is a blob */ - UnsignedFlag uint = 1 << 5 /* Field is unsigned */ - ZerofillFlag uint = 1 << 6 /* Field is zerofill */ - BinaryFlag uint = 1 << 7 /* Field is binary */ - EnumFlag uint = 1 << 8 /* Field is an enum */ - AutoIncrementFlag uint = 1 << 9 /* Field is an auto increment field */ - TimestampFlag uint = 1 << 10 /* Field is a timestamp */ - SetFlag uint = 1 << 11 /* Field is a set */ - NoDefaultValueFlag uint = 1 << 12 /* Field doesn't have a default value */ - OnUpdateNowFlag uint = 1 << 13 /* Field is set to NOW on UPDATE */ - PartKeyFlag uint = 1 << 14 /* Intern: Part of some keys */ - NumFlag uint = 1 << 15 /* Field is a num (for clients) */ - - GroupFlag uint = 1 << 15 /* Internal: Group field */ - UniqueFlag uint = 1 << 16 /* Internal: Used by sql_yacc */ - BinCmpFlag uint = 1 << 17 /* Internal: Used by sql_yacc */ - ParseToJSONFlag uint = 1 << 18 /* Internal: Used when we want to parse string to JSON in CAST */ - IsBooleanFlag uint = 1 << 19 /* Internal: Used for telling boolean literal from integer */ -) - -// TypeInt24 bounds. -const ( - MaxUint24 = 1<<24 - 1 - MaxInt24 = 1<<23 - 1 - MinInt24 = -1 << 23 -) - -// HasNotNullFlag checks if NotNullFlag is set. -func HasNotNullFlag(flag uint) bool { - return (flag & NotNullFlag) > 0 -} - -// HasNoDefaultValueFlag checks if NoDefaultValueFlag is set. -func HasNoDefaultValueFlag(flag uint) bool { - return (flag & NoDefaultValueFlag) > 0 -} - -// HasAutoIncrementFlag checks if AutoIncrementFlag is set. -func HasAutoIncrementFlag(flag uint) bool { - return (flag & AutoIncrementFlag) > 0 -} - -// HasUnsignedFlag checks if UnsignedFlag is set. -func HasUnsignedFlag(flag uint) bool { - return (flag & UnsignedFlag) > 0 -} - -// HasZerofillFlag checks if ZerofillFlag is set. -func HasZerofillFlag(flag uint) bool { - return (flag & ZerofillFlag) > 0 -} - -// HasBinaryFlag checks if BinaryFlag is set. -func HasBinaryFlag(flag uint) bool { - return (flag & BinaryFlag) > 0 -} - -// HasPriKeyFlag checks if PriKeyFlag is set. -func HasPriKeyFlag(flag uint) bool { - return (flag & PriKeyFlag) > 0 -} - -// HasUniKeyFlag checks if UniqueKeyFlag is set. -func HasUniKeyFlag(flag uint) bool { - return (flag & UniqueKeyFlag) > 0 -} - -// HasMultipleKeyFlag checks if MultipleKeyFlag is set. -func HasMultipleKeyFlag(flag uint) bool { - return (flag & MultipleKeyFlag) > 0 -} - -// HasTimestampFlag checks if HasTimestampFlag is set. -func HasTimestampFlag(flag uint) bool { - return (flag & TimestampFlag) > 0 -} - -// HasOnUpdateNowFlag checks if OnUpdateNowFlag is set. -func HasOnUpdateNowFlag(flag uint) bool { - return (flag & OnUpdateNowFlag) > 0 -} - -// HasParseToJSONFlag checks if ParseToJSONFlag is set. -func HasParseToJSONFlag(flag uint) bool { - return (flag & ParseToJSONFlag) > 0 -} - -// HasIsBooleanFlag checks if IsBooleanFlag is set. -func HasIsBooleanFlag(flag uint) bool { - return (flag & IsBooleanFlag) > 0 -} diff --git a/vendor/github.com/pingcap/tidb/mysql/util.go b/vendor/github.com/pingcap/tidb/mysql/util.go deleted file mode 100644 index 312161c..0000000 --- a/vendor/github.com/pingcap/tidb/mysql/util.go +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package mysql - -type lengthAndDecimal struct { - length int - decimal int -} - -// defaultLengthAndDecimal provides default Flen and Decimal for fields -// from CREATE TABLE when they are unspecified. -var defaultLengthAndDecimal = map[byte]lengthAndDecimal{ - TypeBit: {1, 0}, - TypeTiny: {4, 0}, - TypeShort: {6, 0}, - TypeInt24: {9, 0}, - TypeLong: {11, 0}, - TypeLonglong: {20, 0}, - TypeDouble: {22, -1}, - TypeFloat: {12, -1}, - TypeNewDecimal: {11, 0}, - TypeDuration: {10, 0}, - TypeDate: {10, 0}, - TypeTimestamp: {19, 0}, - TypeDatetime: {19, 0}, - TypeYear: {4, 0}, - TypeString: {1, 0}, - TypeVarchar: {5, 0}, - TypeVarString: {5, 0}, - TypeTinyBlob: {255, 0}, - TypeBlob: {65535, 0}, - TypeMediumBlob: {16777215, 0}, - TypeLongBlob: {4294967295, 0}, - TypeJSON: {4294967295, 0}, - TypeNull: {0, 0}, - TypeSet: {-1, 0}, - TypeEnum: {-1, 0}, -} - -// IsIntegerType indicate whether tp is an integer type. -func IsIntegerType(tp byte) bool { - switch tp { - case TypeTiny, TypeShort, TypeInt24, TypeLong, TypeLonglong: - return true - } - return false -} - -// GetDefaultFieldLengthAndDecimal returns the default display length (flen) and decimal length for column. -// Call this when no Flen assigned in ddl. -// or column value is calculated from an expression. -// For example: "select count(*) from t;", the column type is int64 and Flen in ResultField will be 21. -// See https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html -func GetDefaultFieldLengthAndDecimal(tp byte) (flen int, decimal int) { - val, ok := defaultLengthAndDecimal[tp] - if ok { - return val.length, val.decimal - } - return -1, -1 -} - -// defaultLengthAndDecimal provides default Flen and Decimal for fields -// from CAST when they are unspecified. -var defaultLengthAndDecimalForCast = map[byte]lengthAndDecimal{ - TypeString: {0, -1}, // Flen & Decimal differs. - TypeDate: {10, 0}, - TypeDatetime: {19, 0}, - TypeNewDecimal: {11, 0}, - TypeDuration: {10, 0}, - TypeLonglong: {22, 0}, - TypeJSON: {4194304, 0}, // Flen differs. -} - -// GetDefaultFieldLengthAndDecimalForCast returns the default display length (flen) and decimal length for casted column -// when flen or decimal is not specified. -func GetDefaultFieldLengthAndDecimalForCast(tp byte) (flen int, decimal int) { - val, ok := defaultLengthAndDecimalForCast[tp] - if ok { - return val.length, val.decimal - } - return -1, -1 -} diff --git a/vendor/github.com/pingcap/tidb/owner/manager.go b/vendor/github.com/pingcap/tidb/owner/manager.go deleted file mode 100644 index d7ae201..0000000 --- a/vendor/github.com/pingcap/tidb/owner/manager.go +++ /dev/null @@ -1,342 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package owner - -import ( - "fmt" - "math" - "os" - "strconv" - "sync/atomic" - "time" - - "github.com/coreos/etcd/clientv3" - "github.com/coreos/etcd/clientv3/concurrency" - "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes" - "github.com/coreos/etcd/mvcc/mvccpb" - "github.com/juju/errors" - "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/util" - log "github.com/sirupsen/logrus" - "golang.org/x/net/context" - "google.golang.org/grpc" -) - -const ( - newSessionRetryInterval = 200 * time.Millisecond - logIntervalCnt = int(3 * time.Second / newSessionRetryInterval) -) - -// Manager is used to campaign the owner and manage the owner information. -type Manager interface { - // ID returns the ID of the manager. - ID() string - // IsOwner returns whether the ownerManager is the owner. - IsOwner() bool - // SetOwner sets whether the ownerManager is the owner. - SetOwner(isOwner bool) - // GetOwnerID gets the owner ID. - GetOwnerID(ctx context.Context) (string, error) - // CampaignOwner campaigns the owner. - CampaignOwner(ctx context.Context) error - // Cancel cancels this etcd ownerManager campaign. - Cancel() -} - -const ( - // NewSessionDefaultRetryCnt is the default retry times when create new session. - NewSessionDefaultRetryCnt = 3 - // NewSessionRetryUnlimited is the unlimited retry times when create new session. - NewSessionRetryUnlimited = math.MaxInt64 -) - -// DDLOwnerChecker is used to check whether tidb is owner. -type DDLOwnerChecker interface { - // IsOwner returns whether the ownerManager is the owner. - IsOwner() bool -} - -// ownerManager represents the structure which is used for electing owner. -type ownerManager struct { - owner int32 - id string // id is the ID of the manager. - key string - prompt string - etcdCli *clientv3.Client - cancel context.CancelFunc -} - -// NewOwnerManager creates a new Manager. -func NewOwnerManager(etcdCli *clientv3.Client, prompt, id, key string, cancel context.CancelFunc) Manager { - return &ownerManager{ - etcdCli: etcdCli, - id: id, - key: key, - prompt: prompt, - cancel: cancel, - } -} - -// ID implements Manager.ID interface. -func (m *ownerManager) ID() string { - return m.id -} - -// IsOwner implements Manager.IsOwner interface. -func (m *ownerManager) IsOwner() bool { - return atomic.LoadInt32(&m.owner) == 1 -} - -// SetOwner implements Manager.SetOwner interface. -func (m *ownerManager) SetOwner(isOwner bool) { - if isOwner { - atomic.StoreInt32(&m.owner, 1) - } else { - atomic.StoreInt32(&m.owner, 0) - } -} - -// Cancel implements Manager.Cancel interface. -func (m *ownerManager) Cancel() { - m.cancel() -} - -// ManagerSessionTTL is the etcd session's TTL in seconds. It's exported for testing. -var ManagerSessionTTL = 60 - -// setManagerSessionTTL sets the ManagerSessionTTL value, it's used for testing. -func setManagerSessionTTL() error { - ttlStr := os.Getenv("tidb_manager_ttl") - if len(ttlStr) == 0 { - return nil - } - ttl, err := strconv.Atoi(ttlStr) - if err != nil { - return errors.Trace(err) - } - ManagerSessionTTL = ttl - return nil -} - -// NewSession creates a new etcd session. -func NewSession(ctx context.Context, logPrefix string, etcdCli *clientv3.Client, retryCnt, ttl int) (*concurrency.Session, error) { - var err error - - var etcdSession *concurrency.Session - failedCnt := 0 - for i := 0; i < retryCnt; i++ { - if err = contextDone(ctx, err); err != nil { - return etcdSession, errors.Trace(err) - } - - // gofail: var closeClient bool - // if closeClient { - // etcdCli.Close() - // } - - // gofail: var closeGrpc bool - // if closeGrpc { - // etcdCli.ActiveConnection().Close() - // } - startTime := time.Now() - etcdSession, err = concurrency.NewSession(etcdCli, - concurrency.WithTTL(ttl), concurrency.WithContext(ctx)) - metrics.NewSessionHistogram.WithLabelValues(logPrefix, metrics.RetLabel(err)).Observe(time.Since(startTime).Seconds()) - if err == nil { - break - } - if failedCnt%logIntervalCnt == 0 { - log.Warnf("%s failed to new session to etcd, err %v", logPrefix, err) - } - - time.Sleep(newSessionRetryInterval) - failedCnt++ - } - return etcdSession, errors.Trace(err) -} - -// CampaignOwner implements Manager.CampaignOwner interface. -func (m *ownerManager) CampaignOwner(ctx context.Context) error { - logPrefix := fmt.Sprintf("[%s] %s", m.prompt, m.key) - session, err := NewSession(ctx, logPrefix, m.etcdCli, NewSessionDefaultRetryCnt, ManagerSessionTTL) - if err != nil { - return errors.Trace(err) - } - cancelCtx, _ := context.WithCancel(ctx) - go m.campaignLoop(cancelCtx, session) - return nil -} - -func (m *ownerManager) campaignLoop(ctx context.Context, etcdSession *concurrency.Session) { - defer func() { - if r := recover(); r != nil { - buf := util.GetStack() - log.Errorf("[%s] recover panic:%v, %s", m.prompt, r, buf) - metrics.PanicCounter.WithLabelValues(metrics.LabelDDLOwner).Inc() - } - }() - - logPrefix := fmt.Sprintf("[%s] %s ownerManager %s", m.prompt, m.key, m.id) - var err error - for { - if err != nil { - metrics.CampaignOwnerCounter.WithLabelValues(m.prompt, err.Error()).Inc() - } - - select { - case <-etcdSession.Done(): - log.Infof("%s etcd session is done, creates a new one", logPrefix) - leaseID := etcdSession.Lease() - etcdSession, err = NewSession(ctx, logPrefix, m.etcdCli, NewSessionRetryUnlimited, ManagerSessionTTL) - if err != nil { - log.Infof("%s break campaign loop, NewSession err %v", logPrefix, err) - m.revokeSession(logPrefix, leaseID) - return - } - case <-ctx.Done(): - m.revokeSession(logPrefix, etcdSession.Lease()) - return - default: - } - // If the etcd server turns clocks forward,the following case may occur. - // The etcd server deletes this session's lease ID, but etcd session doesn't find it. - // In this time if we do the campaign operation, the etcd server will return ErrLeaseNotFound. - if terror.ErrorEqual(err, rpctypes.ErrLeaseNotFound) { - if etcdSession != nil { - err = etcdSession.Close() - log.Infof("%s etcd session encounters the error of lease not found, closes it err %s", logPrefix, err) - } - continue - } - - elec := concurrency.NewElection(etcdSession, m.key) - err = elec.Campaign(ctx, m.id) - if err != nil { - log.Infof("%s failed to campaign, err %v", logPrefix, err) - continue - } - - ownerKey, err := GetOwnerInfo(ctx, elec, logPrefix, m.id) - if err != nil { - continue - } - m.SetOwner(true) - m.watchOwner(ctx, etcdSession, ownerKey) - m.SetOwner(false) - - metrics.CampaignOwnerCounter.WithLabelValues(m.prompt, metrics.NoLongerOwner).Inc() - log.Warnf("%s isn't the owner", logPrefix) - } -} - -func (m *ownerManager) revokeSession(logPrefix string, leaseID clientv3.LeaseID) { - // Revoke the session lease. - // If revoke takes longer than the ttl, lease is expired anyway. - cancelCtx, cancel := context.WithTimeout(context.Background(), - time.Duration(ManagerSessionTTL)*time.Second) - _, err := m.etcdCli.Revoke(cancelCtx, leaseID) - cancel() - log.Infof("%s break campaign loop, revoke err %v", logPrefix, err) -} - -// GetOwnerID implements Manager.GetOwnerID interface. -func (m *ownerManager) GetOwnerID(ctx context.Context) (string, error) { - resp, err := m.etcdCli.Get(ctx, m.key, clientv3.WithFirstCreate()...) - if err != nil { - return "", errors.Trace(err) - } - if len(resp.Kvs) == 0 { - return "", concurrency.ErrElectionNoLeader - } - return string(resp.Kvs[0].Value), nil -} - -// GetOwnerInfo gets the owner information. -func GetOwnerInfo(ctx context.Context, elec *concurrency.Election, logPrefix, id string) (string, error) { - resp, err := elec.Leader(ctx) - if err != nil { - // If no leader elected currently, it returns ErrElectionNoLeader. - log.Infof("%s failed to get leader, err %v", logPrefix, err) - return "", errors.Trace(err) - } - ownerID := string(resp.Kvs[0].Value) - log.Infof("%s, owner is %v", logPrefix, ownerID) - if ownerID != id { - log.Warnf("%s isn't the owner", logPrefix) - return "", errors.New("ownerInfoNotMatch") - } - - return string(resp.Kvs[0].Key), nil -} - -func (m *ownerManager) watchOwner(ctx context.Context, etcdSession *concurrency.Session, key string) { - logPrefix := fmt.Sprintf("[%s] ownerManager %s watch owner key %v", m.prompt, m.id, key) - log.Debugf("%s", logPrefix) - watchCh := m.etcdCli.Watch(ctx, key) - for { - select { - case resp, ok := <-watchCh: - if !ok { - metrics.WatchOwnerCounter.WithLabelValues(m.prompt, metrics.WatcherClosed).Inc() - log.Infof("%s watcher is closed, no owner", logPrefix) - return - } - if resp.Canceled { - metrics.WatchOwnerCounter.WithLabelValues(m.prompt, metrics.Cancelled).Inc() - log.Infof("%s canceled, no owner", logPrefix) - return - } - - for _, ev := range resp.Events { - if ev.Type == mvccpb.DELETE { - metrics.WatchOwnerCounter.WithLabelValues(m.prompt, metrics.Deleted).Inc() - log.Infof("%s failed, owner is deleted", logPrefix) - return - } - } - case <-etcdSession.Done(): - metrics.WatchOwnerCounter.WithLabelValues(m.prompt, metrics.SessionDone).Inc() - return - case <-ctx.Done(): - metrics.WatchOwnerCounter.WithLabelValues(m.prompt, metrics.CtxDone).Inc() - return - } - } -} - -func init() { - err := setManagerSessionTTL() - if err != nil { - log.Warnf("set manager session TTL failed %v", err) - } -} - -func contextDone(ctx context.Context, err error) error { - select { - case <-ctx.Done(): - return errors.Trace(ctx.Err()) - default: - } - // Sometime the ctx isn't closed, but the etcd client is closed, - // we need to treat it as if context is done. - // TODO: Make sure ctx is closed with etcd client. - if terror.ErrorEqual(err, context.Canceled) || - terror.ErrorEqual(err, context.DeadlineExceeded) || - terror.ErrorEqual(err, grpc.ErrClientConnClosing) { - return errors.Trace(err) - } - - return nil -} diff --git a/vendor/github.com/pingcap/tidb/owner/mock.go b/vendor/github.com/pingcap/tidb/owner/mock.go deleted file mode 100644 index 4053c2c..0000000 --- a/vendor/github.com/pingcap/tidb/owner/mock.go +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package owner - -import ( - "sync/atomic" - - "github.com/juju/errors" - "golang.org/x/net/context" -) - -var _ Manager = &mockManager{} - -// mockManager represents the structure which is used for electing owner. -// It's used for local store and testing. -// So this worker will always be the owner. -type mockManager struct { - owner int32 - id string // id is the ID of manager. - cancel context.CancelFunc -} - -// NewMockManager creates a new mock Manager. -func NewMockManager(id string, cancel context.CancelFunc) Manager { - return &mockManager{ - id: id, - cancel: cancel, - } -} - -// ID implements Manager.ID interface. -func (m *mockManager) ID() string { - return m.id -} - -// IsOwner implements Manager.IsOwner interface. -func (m *mockManager) IsOwner() bool { - return atomic.LoadInt32(&m.owner) == 1 -} - -// SetOwner implements Manager.SetOwner interface. -func (m *mockManager) SetOwner(isOwner bool) { - if isOwner { - atomic.StoreInt32(&m.owner, 1) - } else { - atomic.StoreInt32(&m.owner, 0) - } -} - -// Cancel implements Manager.Cancel interface. -func (m *mockManager) Cancel() { - m.cancel() -} - -// GetOwnerID implements Manager.GetOwnerID interface. -func (m *mockManager) GetOwnerID(ctx context.Context) (string, error) { - if m.IsOwner() { - return m.ID(), nil - } - return "", errors.New("no owner") -} - -// CampaignOwner implements Manager.CampaignOwner interface. -func (m *mockManager) CampaignOwner(_ context.Context) error { - m.SetOwner(true) - return nil -} diff --git a/vendor/github.com/pingcap/tidb/parser/opcode/opcode.go b/vendor/github.com/pingcap/tidb/parser/opcode/opcode.go deleted file mode 100644 index 14b541c..0000000 --- a/vendor/github.com/pingcap/tidb/parser/opcode/opcode.go +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package opcode - -import ( - "fmt" - "io" -) - -// Op is opcode type. -type Op int - -// List operators. -const ( - LogicAnd Op = iota + 1 - LeftShift - RightShift - LogicOr - GE - LE - EQ - NE - LT - GT - Plus - Minus - And - Or - Mod - Xor - Div - Mul - Not - BitNeg - IntDiv - LogicXor - NullEQ - In - Like - Case - Regexp - IsNull - IsTruth - IsFalsity -) - -// Ops maps opcode to string. -var Ops = map[Op]string{ - LogicAnd: "and", - LogicOr: "or", - LogicXor: "xor", - LeftShift: "leftshift", - RightShift: "rightshift", - GE: "ge", - LE: "le", - EQ: "eq", - NE: "ne", - LT: "lt", - GT: "gt", - Plus: "plus", - Minus: "minus", - And: "bitand", - Or: "bitor", - Mod: "mod", - Xor: "bitxor", - Div: "div", - Mul: "mul", - Not: "not", - BitNeg: "bitneg", - IntDiv: "intdiv", - NullEQ: "nulleq", - In: "in", - Like: "like", - Case: "case", - Regexp: "regexp", - IsNull: "isnull", - IsTruth: "istrue", - IsFalsity: "isfalse", -} - -// String implements Stringer interface. -func (o Op) String() string { - str, ok := Ops[o] - if !ok { - panic(fmt.Sprintf("%d", o)) - } - - return str -} - -var opsLiteral = map[Op]string{ - LogicAnd: "&&", - LogicOr: "||", - LogicXor: "^", - LeftShift: "<<", - RightShift: ">>", - GE: ">=", - LE: "<=", - EQ: "==", - NE: "!=", - LT: "<", - GT: ">", - Plus: "+", - Minus: "-", - And: "&", - Or: "|", - Mod: "%", - Xor: "^", - Div: "/", - Mul: "*", - Not: "!", - BitNeg: "~", - IntDiv: "//", - NullEQ: "<=>", - In: "IN", - Like: "LIKE", - Case: "CASE", - Regexp: "REGEXP", - IsNull: "IS NULL", - IsTruth: "IS TRUE", - IsFalsity: "IS FALSE", -} - -// Format the ExprNode into a Writer. -func (o Op) Format(w io.Writer) { - fmt.Fprintf(w, opsLiteral[o]) -} diff --git a/vendor/github.com/pingcap/tidb/sessionctx/binloginfo/binloginfo.go b/vendor/github.com/pingcap/tidb/sessionctx/binloginfo/binloginfo.go deleted file mode 100644 index e83b0f5..0000000 --- a/vendor/github.com/pingcap/tidb/sessionctx/binloginfo/binloginfo.go +++ /dev/null @@ -1,184 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package binloginfo - -import ( - "regexp" - "strings" - "sync" - "sync/atomic" - "time" - - "github.com/juju/errors" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/terror" - binlog "github.com/pingcap/tipb/go-binlog" - log "github.com/sirupsen/logrus" - "golang.org/x/net/context" - "google.golang.org/grpc" -) - -func init() { - grpc.EnableTracing = false -} - -var binlogWriteTimeout = 15 * time.Second - -// pumpClient is the gRPC client to write binlog, it is opened on server start and never close, -// shared by all sessions. -var pumpClient binlog.PumpClient -var pumpClientLock sync.RWMutex - -// BinlogInfo contains binlog data and binlog client. -type BinlogInfo struct { - Data *binlog.Binlog - Client binlog.PumpClient -} - -// GetPumpClient gets the pump client instance. -func GetPumpClient() binlog.PumpClient { - pumpClientLock.RLock() - client := pumpClient - pumpClientLock.RUnlock() - return client -} - -// SetPumpClient sets the pump client instance. -func SetPumpClient(client binlog.PumpClient) { - pumpClientLock.Lock() - pumpClient = client - pumpClientLock.Unlock() -} - -// SetGRPCTimeout sets grpc timeout for writing binlog. -func SetGRPCTimeout(timeout time.Duration) { - if timeout < 300*time.Millisecond { - log.Warnf("set binlog grpc timeout %s ignored, use default value %s", timeout, binlogWriteTimeout) - return // Avoid invalid value - } - binlogWriteTimeout = timeout -} - -// GetPrewriteValue gets binlog prewrite value in the context. -func GetPrewriteValue(ctx sessionctx.Context, createIfNotExists bool) *binlog.PrewriteValue { - vars := ctx.GetSessionVars() - v, ok := vars.TxnCtx.Binlog.(*binlog.PrewriteValue) - if !ok && createIfNotExists { - schemaVer := ctx.GetSessionVars().TxnCtx.SchemaVersion - v = &binlog.PrewriteValue{SchemaVersion: schemaVer} - vars.TxnCtx.Binlog = v - } - return v -} - -var skipBinlog uint32 -var ignoreError uint32 - -// DisableSkipBinlogFlag disable the skipBinlog flag. -func DisableSkipBinlogFlag() { - atomic.StoreUint32(&skipBinlog, 0) - log.Warn("[binloginfo] disable the skipBinlog flag") -} - -// SetIgnoreError sets the ignoreError flag, this function called when TiDB start -// up and find config.Binlog.IgnoreError is true. -func SetIgnoreError(on bool) { - if on { - atomic.StoreUint32(&ignoreError, 1) - } else { - atomic.StoreUint32(&ignoreError, 0) - } -} - -// WriteBinlog writes a binlog to Pump. -func (info *BinlogInfo) WriteBinlog(clusterID uint64) error { - skip := atomic.LoadUint32(&skipBinlog) - if skip > 0 { - metrics.CriticalErrorCounter.Add(1) - return nil - } - - commitData, err := info.Data.Marshal() - if err != nil { - return errors.Trace(err) - } - req := &binlog.WriteBinlogReq{ClusterID: clusterID, Payload: commitData} - - // Retry many times because we may raise CRITICAL error here. - for i := 0; i < 20; i++ { - var resp *binlog.WriteBinlogResp - ctx, cancel := context.WithTimeout(context.Background(), binlogWriteTimeout) - resp, err = info.Client.WriteBinlog(ctx, req) - cancel() - if err == nil && resp.Errmsg != "" { - err = errors.New(resp.Errmsg) - } - if err == nil { - return nil - } - if strings.Contains(err.Error(), "received message larger than max") { - // This kind of error is not critical and not retryable, return directly. - return errors.Errorf("binlog data is too large (%s)", err.Error()) - } - log.Errorf("write binlog error %v", err) - time.Sleep(time.Second) - } - - if err != nil { - if atomic.LoadUint32(&ignoreError) == 1 { - log.Errorf("critical error, write binlog fail but error ignored: %s", errors.ErrorStack(err)) - metrics.CriticalErrorCounter.Add(1) - // If error happens once, we'll stop writing binlog. - atomic.CompareAndSwapUint32(&skipBinlog, skip, skip+1) - return nil - } - } - - return terror.ErrCritical.GenByArgs(err) -} - -// SetDDLBinlog sets DDL binlog in the kv.Transaction. -func SetDDLBinlog(client interface{}, txn kv.Transaction, jobID int64, ddlQuery string) { - if client == nil { - return - } - ddlQuery = addSpecialComment(ddlQuery) - info := &BinlogInfo{ - Data: &binlog.Binlog{ - Tp: binlog.BinlogType_Prewrite, - DdlJobId: jobID, - DdlQuery: []byte(ddlQuery), - }, - Client: client.(binlog.PumpClient), - } - txn.SetOption(kv.BinlogInfo, info) -} - -const specialPrefix = `/*!90000 ` - -func addSpecialComment(ddlQuery string) string { - if strings.Contains(ddlQuery, specialPrefix) { - return ddlQuery - } - upperQuery := strings.ToUpper(ddlQuery) - reg, err := regexp.Compile(`SHARD_ROW_ID_BITS\s*=\s*\d+`) - terror.Log(err) - loc := reg.FindStringIndex(upperQuery) - if len(loc) < 2 { - return ddlQuery - } - return ddlQuery[:loc[0]] + specialPrefix + ddlQuery[loc[0]:loc[1]] + ` */` + ddlQuery[loc[1]:] -} diff --git a/vendor/github.com/pingcap/tidb/sessionctx/context.go b/vendor/github.com/pingcap/tidb/sessionctx/context.go deleted file mode 100644 index 4c8ee4c..0000000 --- a/vendor/github.com/pingcap/tidb/sessionctx/context.go +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2018 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package sessionctx - -import ( - "fmt" - - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/owner" - "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util" - "github.com/pingcap/tidb/util/kvcache" - binlog "github.com/pingcap/tipb/go-binlog" - "golang.org/x/net/context" -) - -// Context is an interface for transaction and executive args environment. -type Context interface { - // NewTxn creates a new transaction for further execution. - // If old transaction is valid, it is committed first. - // It's used in BEGIN statement and DDL statements to commit old transaction. - NewTxn() error - - // Txn returns the current transaction which is created before executing a statement. - Txn() kv.Transaction - - // GetClient gets a kv.Client. - GetClient() kv.Client - - // SetValue saves a value associated with this context for key. - SetValue(key fmt.Stringer, value interface{}) - - // Value returns the value associated with this context for key. - Value(key fmt.Stringer) interface{} - - // ClearValue clears the value associated with this context for key. - ClearValue(key fmt.Stringer) - - GetSessionVars() *variable.SessionVars - - GetSessionManager() util.SessionManager - - // RefreshTxnCtx commits old transaction without retry, - // and creates a new transaction. - // now just for load data and batch insert. - RefreshTxnCtx(context.Context) error - - // ActivePendingTxn receives the pending transaction from the transaction channel. - // It should be called right before we builds an executor. - ActivePendingTxn() error - - // InitTxnWithStartTS initializes a transaction with startTS. - // It should be called right before we builds an executor. - InitTxnWithStartTS(startTS uint64) error - - // GetStore returns the store of session. - GetStore() kv.Storage - - // PreparedPlanCache returns the cache of the physical plan - PreparedPlanCache() *kvcache.SimpleLRUCache - - // StoreQueryFeedback stores the query feedback. - StoreQueryFeedback(feedback interface{}) - - // StmtCommit flush all changes by the statement to the underlying transaction. - StmtCommit() - // StmtRollback provides statement level rollback. - StmtRollback() - // StmtGetMutation gets the binlog mutation for current statement. - StmtGetMutation(int64) *binlog.TableMutation - // StmtAddDirtyTableOP adds the dirty table operation for current statement. - StmtAddDirtyTableOP(op int, tid int64, handle int64, row []types.Datum) - // DDLOwnerChecker returns owner.DDLOwnerChecker. - DDLOwnerChecker() owner.DDLOwnerChecker -} - -type basicCtxType int - -func (t basicCtxType) String() string { - switch t { - case QueryString: - return "query_string" - case Initing: - return "initing" - case LastExecuteDDL: - return "last_execute_ddl" - } - return "unknown" -} - -// Context keys. -const ( - // QueryString is the key for original query string. - QueryString basicCtxType = 1 - // Initing is the key for indicating if the server is running bootstrap or upgrade job. - Initing basicCtxType = 2 - // LastExecuteDDL is the key for whether the session execute a ddl command last time. - LastExecuteDDL basicCtxType = 3 -) - -// ConnID is the key in context. -const ConnID kv.ContextKey = "conn ID" - -// SetCommitCtx sets the variables for context before commit a transaction. -func SetCommitCtx(ctx context.Context, sessCtx Context) context.Context { - return context.WithValue(ctx, ConnID, sessCtx.GetSessionVars().ConnectionID) -} diff --git a/vendor/github.com/pingcap/tidb/sessionctx/stmtctx/stmtctx.go b/vendor/github.com/pingcap/tidb/sessionctx/stmtctx/stmtctx.go deleted file mode 100644 index 63ec56e..0000000 --- a/vendor/github.com/pingcap/tidb/sessionctx/stmtctx/stmtctx.go +++ /dev/null @@ -1,214 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package stmtctx - -import ( - "math" - "sync" - "time" - - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/util/memory" -) - -const ( - // WarnLevelError represents level "Error" for 'SHOW WARNINGS' syntax. - WarnLevelError = "Error" - // WarnLevelWarning represents level "Warning" for 'SHOW WARNINGS' syntax. - WarnLevelWarning = "Warning" - // WarnLevelNote represents level "Note" for 'SHOW WARNINGS' syntax. - WarnLevelNote = "Note" -) - -// SQLWarn relates a sql warning and it's level. -type SQLWarn struct { - Level string - Err error -} - -// StatementContext contains variables for a statement. -// It should be reset before executing a statement. -type StatementContext struct { - // Set the following variables before execution - - InInsertStmt bool - InUpdateOrDeleteStmt bool - InSelectStmt bool - IgnoreTruncate bool - IgnoreZeroInDate bool - DupKeyAsWarning bool - BadNullAsWarning bool - DividedByZeroAsWarning bool - TruncateAsWarning bool - OverflowAsWarning bool - InShowWarning bool - UseCache bool - PadCharToFullLength bool - BatchCheck bool - - // mu struct holds variables that change during execution. - mu struct { - sync.Mutex - affectedRows uint64 - foundRows uint64 - warnings []SQLWarn - histogramsNotLoad bool - } - - // Copied from SessionVars.TimeZone. - TimeZone *time.Location - Priority mysql.PriorityEnum - NotFillCache bool - MemTracker *memory.Tracker - TableIDs []int64 - IndexIDs []int64 -} - -// AddAffectedRows adds affected rows. -func (sc *StatementContext) AddAffectedRows(rows uint64) { - sc.mu.Lock() - sc.mu.affectedRows += rows - sc.mu.Unlock() -} - -// AffectedRows gets affected rows. -func (sc *StatementContext) AffectedRows() uint64 { - sc.mu.Lock() - rows := sc.mu.affectedRows - sc.mu.Unlock() - return rows -} - -// FoundRows gets found rows. -func (sc *StatementContext) FoundRows() uint64 { - sc.mu.Lock() - rows := sc.mu.foundRows - sc.mu.Unlock() - return rows -} - -// AddFoundRows adds found rows. -func (sc *StatementContext) AddFoundRows(rows uint64) { - sc.mu.Lock() - sc.mu.foundRows += rows - sc.mu.Unlock() -} - -// GetWarnings gets warnings. -func (sc *StatementContext) GetWarnings() []SQLWarn { - sc.mu.Lock() - warns := make([]SQLWarn, len(sc.mu.warnings)) - copy(warns, sc.mu.warnings) - sc.mu.Unlock() - return warns -} - -// WarningCount gets warning count. -func (sc *StatementContext) WarningCount() uint16 { - if sc.InShowWarning { - return 0 - } - sc.mu.Lock() - wc := uint16(len(sc.mu.warnings)) - sc.mu.Unlock() - return wc -} - -// SetWarnings sets warnings. -func (sc *StatementContext) SetWarnings(warns []SQLWarn) { - sc.mu.Lock() - sc.mu.warnings = warns - sc.mu.Unlock() -} - -// AppendWarning appends a warning with level 'Warning'. -func (sc *StatementContext) AppendWarning(warn error) { - sc.mu.Lock() - if len(sc.mu.warnings) < math.MaxUint16 { - sc.mu.warnings = append(sc.mu.warnings, SQLWarn{WarnLevelWarning, warn}) - } - sc.mu.Unlock() -} - -// AppendNote appends a warning with level 'Note'. -func (sc *StatementContext) AppendNote(warn error) { - sc.mu.Lock() - if len(sc.mu.warnings) < math.MaxUint16 { - sc.mu.warnings = append(sc.mu.warnings, SQLWarn{WarnLevelNote, warn}) - } - sc.mu.Unlock() -} - -// AppendError appends a warning with level 'Error'. -func (sc *StatementContext) AppendError(warn error) { - sc.mu.Lock() - if len(sc.mu.warnings) < math.MaxUint16 { - sc.mu.warnings = append(sc.mu.warnings, SQLWarn{WarnLevelError, warn}) - } - sc.mu.Unlock() -} - -// SetHistogramsNotLoad sets histogramsNotLoad. -func (sc *StatementContext) SetHistogramsNotLoad() { - sc.mu.Lock() - sc.mu.histogramsNotLoad = true - sc.mu.Unlock() -} - -// HistogramsNotLoad gets histogramsNotLoad. -func (sc *StatementContext) HistogramsNotLoad() bool { - sc.mu.Lock() - notLoad := sc.mu.histogramsNotLoad - sc.mu.Unlock() - return notLoad -} - -// HandleTruncate ignores or returns the error based on the StatementContext state. -func (sc *StatementContext) HandleTruncate(err error) error { - // TODO: At present we have not checked whether the error can be ignored or treated as warning. - // We will do that later, and then append WarnDataTruncated instead of the error itself. - if err == nil { - return nil - } - if sc.IgnoreTruncate { - return nil - } - if sc.TruncateAsWarning { - sc.AppendWarning(err) - return nil - } - return err -} - -// HandleOverflow treats ErrOverflow as warnings or returns the error based on the StmtCtx.OverflowAsWarning state. -func (sc *StatementContext) HandleOverflow(err error, warnErr error) error { - if err == nil { - return nil - } - - if sc.OverflowAsWarning { - sc.AppendWarning(warnErr) - return nil - } - return err -} - -// ResetForRetry resets the changed states during execution. -func (sc *StatementContext) ResetForRetry() { - sc.mu.Lock() - sc.mu.affectedRows = 0 - sc.mu.foundRows = 0 - sc.mu.warnings = nil - sc.mu.Unlock() -} diff --git a/vendor/github.com/pingcap/tidb/sessionctx/variable/session.go b/vendor/github.com/pingcap/tidb/sessionctx/variable/session.go deleted file mode 100644 index ca85b8f..0000000 --- a/vendor/github.com/pingcap/tidb/sessionctx/variable/session.go +++ /dev/null @@ -1,639 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package variable - -import ( - "crypto/tls" - "sync" - "sync/atomic" - "time" - - "github.com/juju/errors" - "github.com/pingcap/tidb/config" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/sessionctx/stmtctx" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/auth" -) - -const ( - codeCantGetValidID terror.ErrCode = 1 - codeCantSetToNull terror.ErrCode = 2 - codeSnapshotTooOld terror.ErrCode = 3 -) - -// Error instances. -var ( - errCantGetValidID = terror.ClassVariable.New(codeCantGetValidID, "cannot get valid auto-increment id in retry") - ErrCantSetToNull = terror.ClassVariable.New(codeCantSetToNull, "cannot set variable to null") - ErrSnapshotTooOld = terror.ClassVariable.New(codeSnapshotTooOld, "snapshot is older than GC safe point %s") -) - -// RetryInfo saves retry information. -type RetryInfo struct { - Retrying bool - DroppedPreparedStmtIDs []uint32 - currRetryOff int - autoIncrementIDs []int64 -} - -// Clean does some clean work. -func (r *RetryInfo) Clean() { - r.currRetryOff = 0 - if len(r.autoIncrementIDs) > 0 { - r.autoIncrementIDs = r.autoIncrementIDs[:0] - } - if len(r.DroppedPreparedStmtIDs) > 0 { - r.DroppedPreparedStmtIDs = r.DroppedPreparedStmtIDs[:0] - } -} - -// AddAutoIncrementID adds id to AutoIncrementIDs. -func (r *RetryInfo) AddAutoIncrementID(id int64) { - r.autoIncrementIDs = append(r.autoIncrementIDs, id) -} - -// ResetOffset resets the current retry offset. -func (r *RetryInfo) ResetOffset() { - r.currRetryOff = 0 -} - -// GetCurrAutoIncrementID gets current AutoIncrementID. -func (r *RetryInfo) GetCurrAutoIncrementID() (int64, error) { - if r.currRetryOff >= len(r.autoIncrementIDs) { - return 0, errCantGetValidID - } - id := r.autoIncrementIDs[r.currRetryOff] - r.currRetryOff++ - - return id, nil -} - -// TransactionContext is used to store variables that has transaction scope. -type TransactionContext struct { - ForUpdate bool - DirtyDB interface{} - Binlog interface{} - InfoSchema interface{} - Histroy interface{} - SchemaVersion int64 - StartTS uint64 - Shard *int64 - TableDeltaMap map[int64]TableDelta - - // For metrics. - CreateTime time.Time - StatementCount int -} - -// UpdateDeltaForTable updates the delta info for some table. -func (tc *TransactionContext) UpdateDeltaForTable(tableID int64, delta int64, count int64, colSize map[int64]int64) { - if tc.TableDeltaMap == nil { - tc.TableDeltaMap = make(map[int64]TableDelta) - } - item := tc.TableDeltaMap[tableID] - if item.ColSize == nil && colSize != nil { - item.ColSize = make(map[int64]int64) - } - item.Delta += delta - item.Count += count - for key, val := range colSize { - item.ColSize[key] += val - } - tc.TableDeltaMap[tableID] = item -} - -// ClearDelta clears the delta map. -func (tc *TransactionContext) ClearDelta() { - tc.TableDeltaMap = nil -} - -// WriteStmtBufs can be used by insert/replace/delete/update statement. -// TODO: use a common memory pool to replace this. -type WriteStmtBufs struct { - // RowValBuf is used by tablecodec.EncodeRow, to reduce runtime.growslice. - RowValBuf []byte - // BufStore stores temp KVs for a row when executing insert statement. - // We could reuse a BufStore for multiple rows of a session to reduce memory allocations. - BufStore *kv.BufferStore - // AddRowValues use to store temp insert rows value, to reduce memory allocations when importing data. - AddRowValues []types.Datum - - // IndexValsBuf is used by index.FetchValues - IndexValsBuf []types.Datum - // IndexKeyBuf is used by index.GenIndexKey - IndexKeyBuf []byte -} - -func (ib *WriteStmtBufs) clean() { - ib.BufStore = nil - ib.RowValBuf = nil - ib.AddRowValues = nil - ib.IndexValsBuf = nil - ib.IndexKeyBuf = nil -} - -// SessionVars is to handle user-defined or global variables in the current session. -type SessionVars struct { - Concurrency - MemQuota - BatchSize - RetryLimit int64 - DisableTxnAutoRetry bool - // UsersLock is a lock for user defined variables. - UsersLock sync.RWMutex - // Users are user defined variables. - Users map[string]string - // systems variables, don't modify it directly, use GetSystemVar/SetSystemVar method. - systems map[string]string - // PreparedStmts stores prepared statement. - PreparedStmts map[uint32]interface{} - PreparedStmtNameToID map[string]uint32 - // preparedStmtID is id of prepared statement. - preparedStmtID uint32 - // params for prepared statements - PreparedParams []interface{} - - // retry information - RetryInfo *RetryInfo - // Should be reset on transaction finished. - TxnCtx *TransactionContext - - // KVVars is the variables for KV storage. - KVVars *kv.Variables - - // TxnIsolationLevelOneShot is used to implements "set transaction isolation level ..." - TxnIsolationLevelOneShot struct { - // state 0 means default - // state 1 means it's set in current transaction. - // state 2 means it should be used in current transaction. - State int - Value string - } - - // Following variables are special for current session. - - Status uint16 - PrevLastInsertID uint64 // PrevLastInsertID is the last insert ID of previous statement. - LastInsertID uint64 // LastInsertID is the auto-generated ID in the current statement. - InsertID uint64 // InsertID is the given insert ID of an auto_increment column. - // PrevAffectedRows is the affected-rows value(DDL is 0, DML is the number of affected rows). - PrevAffectedRows int64 - - // ClientCapability is client's capability. - ClientCapability uint32 - - // TLSConnectionState is the TLS connection state (nil if not using TLS). - TLSConnectionState *tls.ConnectionState - - // ConnectionID is the connection id of the current session. - ConnectionID uint64 - - // PlanID is the unique id of logical and physical plan. - PlanID int - - // PlanCacheEnabled stores the global config "plan-cache-enabled", and it will be only updated in tests. - PlanCacheEnabled bool - - // User is the user identity with which the session login. - User *auth.UserIdentity - - // CurrentDB is the default database of this session. - CurrentDB string - - // StrictSQLMode indicates if the session is in strict mode. - StrictSQLMode bool - - // CommonGlobalLoaded indicates if common global variable has been loaded for this session. - CommonGlobalLoaded bool - - // InRestrictedSQL indicates if the session is handling restricted SQL execution. - InRestrictedSQL bool - - // SnapshotTS is used for reading history data. For simplicity, SnapshotTS only supports distsql request. - SnapshotTS uint64 - - // SnapshotInfoschema is used with SnapshotTS, when the schema version at snapshotTS less than current schema - // version, we load an old version schema for query. - SnapshotInfoschema interface{} - - // BinlogClient is used to write binlog. - BinlogClient interface{} - - // GlobalVarsAccessor is used to set and get global variables. - GlobalVarsAccessor GlobalVarAccessor - - // LastFoundRows is the number of found rows of last query statement - LastFoundRows uint64 - - // StmtCtx holds variables for current executing statement. - StmtCtx *stmtctx.StatementContext - - // AllowAggPushDown can be set to false to forbid aggregation push down. - AllowAggPushDown bool - - // AllowInSubqueryUnFolding can be set to true to fold in subquery - AllowInSubqueryUnFolding bool - - // CurrInsertValues is used to record current ValuesExpr's values. - // See http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_values - CurrInsertValues interface{} - - // Per-connection time zones. Each client that connects has its own time zone setting, given by the session time_zone variable. - // See https://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html - TimeZone *time.Location - - SQLMode mysql.SQLMode - - /* TiDB system variables */ - - // ImportingData is true when importing data. - ImportingData bool - - // SkipUTF8Check check on input value. - SkipUTF8Check bool - - // BatchInsert indicates if we should split insert data into multiple batches. - BatchInsert bool - - // BatchDelete indicates if we should split delete data into multiple batches. - BatchDelete bool - - // IDAllocator is provided by kvEncoder, if it is provided, we will use it to alloc auto id instead of using - // Table.alloc. - IDAllocator autoid.Allocator - - // OptimizerSelectivityLevel defines the level of the selectivity estimation in planner. - OptimizerSelectivityLevel int - - // EnableTablePartition enables table partition feature. - EnableTablePartition bool - - // EnableStreaming indicates whether the coprocessor request can use streaming API. - // TODO: remove this after tidb-server configuration "enable-streaming' removed. - EnableStreaming bool - - writeStmtBufs WriteStmtBufs -} - -// NewSessionVars creates a session vars object. -func NewSessionVars() *SessionVars { - vars := &SessionVars{ - Users: make(map[string]string), - systems: make(map[string]string), - PreparedStmts: make(map[uint32]interface{}), - PreparedStmtNameToID: make(map[string]uint32), - PreparedParams: make([]interface{}, 10), - TxnCtx: &TransactionContext{}, - KVVars: kv.NewVariables(), - RetryInfo: &RetryInfo{}, - StrictSQLMode: true, - Status: mysql.ServerStatusAutocommit, - StmtCtx: new(stmtctx.StatementContext), - AllowAggPushDown: false, - OptimizerSelectivityLevel: DefTiDBOptimizerSelectivityLevel, - RetryLimit: DefTiDBRetryLimit, - DisableTxnAutoRetry: DefTiDBDisableTxnAutoRetry, - } - vars.Concurrency = Concurrency{ - IndexLookupConcurrency: DefIndexLookupConcurrency, - IndexSerialScanConcurrency: DefIndexSerialScanConcurrency, - IndexLookupJoinConcurrency: DefIndexLookupJoinConcurrency, - HashJoinConcurrency: DefTiDBHashJoinConcurrency, - ProjectionConcurrency: DefTiDBProjectionConcurrency, - DistSQLScanConcurrency: DefDistSQLScanConcurrency, - HashAggPartialConcurrency: DefTiDBHashAggPartialConcurrency, - HashAggFinalConcurrency: DefTiDBHashAggFinalConcurrency, - } - vars.MemQuota = MemQuota{ - MemQuotaQuery: config.GetGlobalConfig().MemQuotaQuery, - MemQuotaHashJoin: DefTiDBMemQuotaHashJoin, - MemQuotaMergeJoin: DefTiDBMemQuotaMergeJoin, - MemQuotaSort: DefTiDBMemQuotaSort, - MemQuotaTopn: DefTiDBMemQuotaTopn, - MemQuotaIndexLookupReader: DefTiDBMemQuotaIndexLookupReader, - MemQuotaIndexLookupJoin: DefTiDBMemQuotaIndexLookupJoin, - MemQuotaNestedLoopApply: DefTiDBMemQuotaNestedLoopApply, - } - vars.BatchSize = BatchSize{ - IndexJoinBatchSize: DefIndexJoinBatchSize, - IndexLookupSize: DefIndexLookupSize, - MaxChunkSize: DefMaxChunkSize, - DMLBatchSize: DefDMLBatchSize, - } - var enableStreaming string - if config.GetGlobalConfig().EnableStreaming { - enableStreaming = "1" - } else { - enableStreaming = "0" - } - vars.PlanCacheEnabled = config.GetGlobalConfig().PlanCache.Enabled - terror.Log(vars.SetSystemVar(TiDBEnableStreaming, enableStreaming)) - return vars -} - -// GetWriteStmtBufs get pointer of SessionVars.writeStmtBufs. -func (s *SessionVars) GetWriteStmtBufs() *WriteStmtBufs { - return &s.writeStmtBufs -} - -// CleanBuffers cleans the temporary bufs -func (s *SessionVars) CleanBuffers() { - if !s.ImportingData { - s.GetWriteStmtBufs().clean() - } -} - -// GetCharsetInfo gets charset and collation for current context. -// What character set should the server translate a statement to after receiving it? -// For this, the server uses the character_set_connection and collation_connection system variables. -// It converts statements sent by the client from character_set_client to character_set_connection -// (except for string literals that have an introducer such as _latin1 or _utf8). -// collation_connection is important for comparisons of literal strings. -// For comparisons of strings with column values, collation_connection does not matter because columns -// have their own collation, which has a higher collation precedence. -// See https://dev.mysql.com/doc/refman/5.7/en/charset-connection.html -func (s *SessionVars) GetCharsetInfo() (charset, collation string) { - charset = s.systems[CharacterSetConnection] - collation = s.systems[CollationConnection] - return -} - -// SetLastInsertID saves the last insert id to the session context. -// TODO: we may store the result for last_insert_id sys var later. -func (s *SessionVars) SetLastInsertID(insertID uint64) { - s.LastInsertID = insertID -} - -// SetStatusFlag sets the session server status variable. -// If on is ture sets the flag in session status, -// otherwise removes the flag. -func (s *SessionVars) SetStatusFlag(flag uint16, on bool) { - if on { - s.Status |= flag - return - } - s.Status &= ^flag -} - -// GetStatusFlag gets the session server status variable, returns true if it is on. -func (s *SessionVars) GetStatusFlag(flag uint16) bool { - return s.Status&flag > 0 -} - -// InTxn returns if the session is in transaction. -func (s *SessionVars) InTxn() bool { - return s.GetStatusFlag(mysql.ServerStatusInTrans) -} - -// IsAutocommit returns if the session is set to autocommit. -func (s *SessionVars) IsAutocommit() bool { - return s.GetStatusFlag(mysql.ServerStatusAutocommit) -} - -// GetNextPreparedStmtID generates and returns the next session scope prepared statement id. -func (s *SessionVars) GetNextPreparedStmtID() uint32 { - s.preparedStmtID++ - return s.preparedStmtID -} - -// GetTimeZone returns the value of time_zone session variable. -func (s *SessionVars) GetTimeZone() *time.Location { - loc := s.TimeZone - if loc == nil { - loc = time.Local - } - return loc -} - -// ResetPrevAffectedRows reset the prev-affected-rows variable. -func (s *SessionVars) ResetPrevAffectedRows() { - s.PrevAffectedRows = 0 - if s.StmtCtx != nil { - if s.StmtCtx.InUpdateOrDeleteStmt || s.StmtCtx.InInsertStmt { - s.PrevAffectedRows = int64(s.StmtCtx.AffectedRows()) - } else if s.StmtCtx.InSelectStmt { - s.PrevAffectedRows = -1 - } - } -} - -// GetSystemVar gets the string value of a system variable. -func (s *SessionVars) GetSystemVar(name string) (string, bool) { - val, ok := s.systems[name] - return val, ok -} - -// deleteSystemVar deletes a system variable. -func (s *SessionVars) deleteSystemVar(name string) error { - if name != CharacterSetResults { - return ErrCantSetToNull - } - delete(s.systems, name) - return nil -} - -// SetSystemVar sets the value of a system variable. -func (s *SessionVars) SetSystemVar(name string, val string) error { - switch name { - case TxnIsolationOneShot: - s.TxnIsolationLevelOneShot.State = 1 - s.TxnIsolationLevelOneShot.Value = val - case TimeZone: - tz, err := parseTimeZone(val) - if err != nil { - return errors.Trace(err) - } - s.TimeZone = tz - case SQLModeVar: - val = mysql.FormatSQLModeStr(val) - // Modes is a list of different modes separated by commas. - sqlMode, err2 := mysql.GetSQLMode(val) - if err2 != nil { - return errors.Trace(err2) - } - s.StrictSQLMode = sqlMode.HasStrictMode() - s.SQLMode = sqlMode - s.SetStatusFlag(mysql.ServerStatusNoBackslashEscaped, sqlMode.HasNoBackslashEscapesMode()) - case TiDBSnapshot: - err := setSnapshotTS(s, val) - if err != nil { - return errors.Trace(err) - } - case AutocommitVar: - isAutocommit := TiDBOptOn(val) - s.SetStatusFlag(mysql.ServerStatusAutocommit, isAutocommit) - if isAutocommit { - s.SetStatusFlag(mysql.ServerStatusInTrans, false) - } - case TiDBImportingData: - s.ImportingData = TiDBOptOn(val) - case TiDBSkipUTF8Check: - s.SkipUTF8Check = TiDBOptOn(val) - case TiDBOptAggPushDown: - s.AllowAggPushDown = TiDBOptOn(val) - case TiDBOptInSubqUnFolding: - s.AllowInSubqueryUnFolding = TiDBOptOn(val) - case TiDBIndexLookupConcurrency: - s.IndexLookupConcurrency = tidbOptPositiveInt32(val, DefIndexLookupConcurrency) - case TiDBIndexLookupJoinConcurrency: - s.IndexLookupJoinConcurrency = tidbOptPositiveInt32(val, DefIndexLookupJoinConcurrency) - case TiDBIndexJoinBatchSize: - s.IndexJoinBatchSize = tidbOptPositiveInt32(val, DefIndexJoinBatchSize) - case TiDBIndexLookupSize: - s.IndexLookupSize = tidbOptPositiveInt32(val, DefIndexLookupSize) - case TiDBHashJoinConcurrency: - s.HashJoinConcurrency = tidbOptPositiveInt32(val, DefTiDBHashJoinConcurrency) - case TiDBProjectionConcurrency: - s.ProjectionConcurrency = tidbOptInt64(val, DefTiDBProjectionConcurrency) - case TiDBHashAggPartialConcurrency: - s.HashAggPartialConcurrency = tidbOptPositiveInt32(val, DefTiDBHashAggPartialConcurrency) - case TiDBHashAggFinalConcurrency: - s.HashAggFinalConcurrency = tidbOptPositiveInt32(val, DefTiDBHashAggFinalConcurrency) - case TiDBDistSQLScanConcurrency: - s.DistSQLScanConcurrency = tidbOptPositiveInt32(val, DefDistSQLScanConcurrency) - case TiDBIndexSerialScanConcurrency: - s.IndexSerialScanConcurrency = tidbOptPositiveInt32(val, DefIndexSerialScanConcurrency) - case TiDBBackoffLockFast: - s.KVVars.BackoffLockFast = tidbOptPositiveInt32(val, kv.DefBackoffLockFast) - case TiDBBatchInsert: - s.BatchInsert = TiDBOptOn(val) - case TiDBBatchDelete: - s.BatchDelete = TiDBOptOn(val) - case TiDBDMLBatchSize: - s.DMLBatchSize = tidbOptPositiveInt32(val, DefDMLBatchSize) - case TiDBCurrentTS, TiDBConfig: - return ErrReadOnly - case TiDBMaxChunkSize: - s.MaxChunkSize = tidbOptPositiveInt32(val, DefMaxChunkSize) - case TIDBMemQuotaQuery: - s.MemQuotaQuery = tidbOptInt64(val, config.GetGlobalConfig().MemQuotaQuery) - case TIDBMemQuotaHashJoin: - s.MemQuotaHashJoin = tidbOptInt64(val, DefTiDBMemQuotaHashJoin) - case TIDBMemQuotaMergeJoin: - s.MemQuotaMergeJoin = tidbOptInt64(val, DefTiDBMemQuotaMergeJoin) - case TIDBMemQuotaSort: - s.MemQuotaSort = tidbOptInt64(val, DefTiDBMemQuotaSort) - case TIDBMemQuotaTopn: - s.MemQuotaTopn = tidbOptInt64(val, DefTiDBMemQuotaTopn) - case TIDBMemQuotaIndexLookupReader: - s.MemQuotaIndexLookupReader = tidbOptInt64(val, DefTiDBMemQuotaIndexLookupReader) - case TIDBMemQuotaIndexLookupJoin: - s.MemQuotaIndexLookupJoin = tidbOptInt64(val, DefTiDBMemQuotaIndexLookupJoin) - case TIDBMemQuotaNestedLoopApply: - s.MemQuotaNestedLoopApply = tidbOptInt64(val, DefTiDBMemQuotaNestedLoopApply) - case TiDBGeneralLog: - atomic.StoreUint32(&ProcessGeneralLog, uint32(tidbOptPositiveInt32(val, DefTiDBGeneralLog))) - case TiDBRetryLimit: - s.RetryLimit = tidbOptInt64(val, DefTiDBRetryLimit) - case TiDBDisableTxnAutoRetry: - s.DisableTxnAutoRetry = TiDBOptOn(val) - case TiDBEnableStreaming: - s.EnableStreaming = TiDBOptOn(val) - case TiDBOptimizerSelectivityLevel: - s.OptimizerSelectivityLevel = tidbOptPositiveInt32(val, DefTiDBOptimizerSelectivityLevel) - case TiDBEnableTablePartition: - s.EnableTablePartition = TiDBOptOn(val) - case TiDBDDLReorgWorkerCount: - workerCnt := tidbOptPositiveInt32(val, DefTiDBDDLReorgWorkerCount) - SetDDLReorgWorkerCounter(int32(workerCnt)) - } - s.systems[name] = val - return nil -} - -// special session variables. -const ( - SQLModeVar = "sql_mode" - AutocommitVar = "autocommit" - CharacterSetResults = "character_set_results" - MaxAllowedPacket = "max_allowed_packet" - TimeZone = "time_zone" - TxnIsolation = "tx_isolation" - TxnIsolationOneShot = "tx_isolation_one_shot" -) - -// TableDelta stands for the changed count for one table. -type TableDelta struct { - Delta int64 - Count int64 - ColSize map[int64]int64 - InitTime time.Time // InitTime is the time that this delta is generated. -} - -// Concurrency defines concurrency values. -type Concurrency struct { - // IndexLookupConcurrency is the number of concurrent index lookup worker. - IndexLookupConcurrency int - - // IndexLookupJoinConcurrency is the number of concurrent index lookup join inner worker. - IndexLookupJoinConcurrency int - - // DistSQLScanConcurrency is the number of concurrent dist SQL scan worker. - DistSQLScanConcurrency int - - // HashJoinConcurrency is the number of concurrent hash join outer worker. - HashJoinConcurrency int - - // ProjectionConcurrency is the number of concurrent projection worker. - ProjectionConcurrency int64 - - // HashAggPartialConcurrency is the number of concurrent hash aggregation partial worker. - HashAggPartialConcurrency int - - // HashAggPartialConcurrency is the number of concurrent hash aggregation final worker. - HashAggFinalConcurrency int - - // IndexSerialScanConcurrency is the number of concurrent index serial scan worker. - IndexSerialScanConcurrency int -} - -// MemQuota defines memory quota values. -type MemQuota struct { - // MemQuotaQuery defines the memory quota for a query. - MemQuotaQuery int64 - // MemQuotaHashJoin defines the memory quota for a hash join executor. - MemQuotaHashJoin int64 - // MemQuotaMergeJoin defines the memory quota for a merge join executor. - MemQuotaMergeJoin int64 - // MemQuotaSort defines the memory quota for a sort executor. - MemQuotaSort int64 - // MemQuotaTopn defines the memory quota for a top n executor. - MemQuotaTopn int64 - // MemQuotaIndexLookupReader defines the memory quota for a index lookup reader executor. - MemQuotaIndexLookupReader int64 - // MemQuotaIndexLookupJoin defines the memory quota for a index lookup join executor. - MemQuotaIndexLookupJoin int64 - // MemQuotaNestedLoopApply defines the memory quota for a nested loop apply executor. - MemQuotaNestedLoopApply int64 -} - -// BatchSize defines batch size values. -type BatchSize struct { - // DMLBatchSize indicates the size of batches for DML. - // It will be used when BatchInsert or BatchDelete is on. - DMLBatchSize int - - // IndexJoinBatchSize is the batch size of a index lookup join. - IndexJoinBatchSize int - - // IndexLookupSize is the number of handles for an index lookup task in index double read executor. - IndexLookupSize int - - // MaxChunkSize defines max row count of a Chunk during query execution. - MaxChunkSize int -} diff --git a/vendor/github.com/pingcap/tidb/sessionctx/variable/statusvar.go b/vendor/github.com/pingcap/tidb/sessionctx/variable/statusvar.go deleted file mode 100644 index 9052dfe..0000000 --- a/vendor/github.com/pingcap/tidb/sessionctx/variable/statusvar.go +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package variable - -import ( - "bytes" - "crypto/tls" - - "github.com/juju/errors" -) - -var statisticsList []Statistics - -// DefaultStatusVarScopeFlag is the default scope of status variables. -var DefaultStatusVarScopeFlag = ScopeGlobal | ScopeSession - -// StatusVal is the value of the corresponding status variable. -type StatusVal struct { - Scope ScopeFlag - Value interface{} -} - -// Statistics is the interface of statistics. -type Statistics interface { - // GetScope gets the status variables scope. - GetScope(status string) ScopeFlag - // Stats returns the statistics status variables. - Stats(*SessionVars) (map[string]interface{}, error) -} - -// RegisterStatistics registers statistics. -func RegisterStatistics(s Statistics) { - statisticsList = append(statisticsList, s) -} - -// GetStatusVars gets registered statistics status variables. -// TODO: Refactor this function to avoid repeated memory allocation / dealloc -func GetStatusVars(vars *SessionVars) (map[string]*StatusVal, error) { - statusVars := make(map[string]*StatusVal) - - for _, statistics := range statisticsList { - vals, err := statistics.Stats(vars) - if err != nil { - return nil, errors.Trace(err) - } - - for name, val := range vals { - scope := statistics.GetScope(name) - statusVars[name] = &StatusVal{Value: val, Scope: scope} - } - } - - return statusVars, nil -} - -// Taken from https://golang.org/pkg/crypto/tls/#pkg-constants . -var tlsCiphers = []uint16{ - tls.TLS_RSA_WITH_RC4_128_SHA, - tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA, - tls.TLS_RSA_WITH_AES_128_CBC_SHA, - tls.TLS_RSA_WITH_AES_256_CBC_SHA, - tls.TLS_RSA_WITH_AES_128_CBC_SHA256, - tls.TLS_RSA_WITH_AES_128_GCM_SHA256, - tls.TLS_RSA_WITH_AES_256_GCM_SHA384, - tls.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, - tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, - tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, - tls.TLS_ECDHE_RSA_WITH_RC4_128_SHA, - tls.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, - tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, - tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, - tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, - tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, - tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, - tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, - tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, - tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, - tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, - tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, -} - -var tlsSupportedCiphers string - -// Taken from https://github.com/openssl/openssl/blob/c784a838e0947fcca761ee62def7d077dc06d37f/include/openssl/ssl.h#L141 . -var tlsVersionString = map[uint16]string{ - tls.VersionSSL30: "SSLv3", - tls.VersionTLS10: "TLSv1", - tls.VersionTLS11: "TLSv1.1", - tls.VersionTLS12: "TLSv1.2", -} - -// Taken from https://testssl.sh/openssl-rfc.mapping.html . -var tlsCipherString = map[uint16]string{ - tls.TLS_RSA_WITH_RC4_128_SHA: "RC4-SHA", - tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA: "DES-CBC3-SHA", - tls.TLS_RSA_WITH_AES_128_CBC_SHA: "AES128-SHA", - tls.TLS_RSA_WITH_AES_256_CBC_SHA: "AES256-SHA", - tls.TLS_RSA_WITH_AES_128_CBC_SHA256: "AES128-SHA256", - tls.TLS_RSA_WITH_AES_128_GCM_SHA256: "AES128-GCM-SHA256", - tls.TLS_RSA_WITH_AES_256_GCM_SHA384: "AES256-GCM-SHA384", - tls.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA: "ECDHE-ECDSA-RC4-SHA", - tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA: "ECDHE-ECDSA-AES128-SHA", - tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA: "ECDHE-ECDSA-AES256-SHA", - tls.TLS_ECDHE_RSA_WITH_RC4_128_SHA: "ECDHE-RSA-RC4-SHA", - tls.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA: "ECDHE-RSA-DES-CBC3-SHA", - tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA: "ECDHE-RSA-AES128-SHA", - tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA: "ECDHE-RSA-AES256-SHA", - tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256: "ECDHE-ECDSA-AES128-SHA256", - tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256: "ECDHE-RSA-AES128-SHA256", - tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: "ECDHE-RSA-AES128-GCM-SHA256", - tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: "ECDHE-ECDSA-AES128-GCM-SHA256", - tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384: "ECDHE-RSA-AES256-GCM-SHA384", - tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: "ECDHE-ECDSA-AES256-GCM-SHA384", - tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305: "ECDHE-RSA-CHACHA20-POLY1305", - tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305: "ECDHE-ECDSA-CHACHA20-POLY1305", -} - -var defaultStatus = map[string]*StatusVal{ - "Ssl_cipher": {ScopeGlobal | ScopeSession, ""}, - "Ssl_cipher_list": {ScopeGlobal | ScopeSession, ""}, - "Ssl_verify_mode": {ScopeGlobal | ScopeSession, 0}, - "Ssl_version": {ScopeGlobal | ScopeSession, ""}, -} - -type defaultStatusStat struct { -} - -func (s defaultStatusStat) GetScope(status string) ScopeFlag { - return defaultStatus[status].Scope -} - -func (s defaultStatusStat) Stats(vars *SessionVars) (map[string]interface{}, error) { - statusVars := make(map[string]interface{}) - - for name, v := range defaultStatus { - statusVars[name] = v.Value - } - - // `vars` may be nil in unit tests. - if vars != nil && vars.TLSConnectionState != nil { - statusVars["Ssl_cipher"] = tlsCipherString[vars.TLSConnectionState.CipherSuite] - statusVars["Ssl_cipher_list"] = tlsSupportedCiphers - // tls.VerifyClientCertIfGiven == SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE - statusVars["Ssl_verify_mode"] = 0x01 | 0x04 - statusVars["Ssl_version"] = tlsVersionString[vars.TLSConnectionState.Version] - } - - return statusVars, nil -} - -func init() { - var ciphersBuffer bytes.Buffer - for _, v := range tlsCiphers { - ciphersBuffer.WriteString(tlsCipherString[v]) - ciphersBuffer.WriteString(":") - } - tlsSupportedCiphers = ciphersBuffer.String() - - var stat defaultStatusStat - RegisterStatistics(stat) -} diff --git a/vendor/github.com/pingcap/tidb/sessionctx/variable/sysvar.go b/vendor/github.com/pingcap/tidb/sessionctx/variable/sysvar.go deleted file mode 100644 index 32d7866..0000000 --- a/vendor/github.com/pingcap/tidb/sessionctx/variable/sysvar.go +++ /dev/null @@ -1,694 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package variable - -import ( - "strconv" - "strings" - - "github.com/pingcap/tidb/config" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" -) - -// ScopeFlag is for system variable whether can be changed in global/session dynamically or not. -type ScopeFlag uint8 - -const ( - // ScopeNone means the system variable can not be changed dynamically. - ScopeNone ScopeFlag = 0 - // ScopeGlobal means the system variable can be changed globally. - ScopeGlobal ScopeFlag = 1 << 0 - // ScopeSession means the system variable can only be changed in current session. - ScopeSession ScopeFlag = 1 << 1 -) - -// SysVar is for system variable. -type SysVar struct { - // Scope is for whether can be changed or not - Scope ScopeFlag - - // Name is the variable name. - Name string - - // Value is the variable value. - Value string -} - -// SysVars is global sys vars map. -var SysVars map[string]*SysVar - -// GetSysVar returns sys var info for name as key. -func GetSysVar(name string) *SysVar { - name = strings.ToLower(name) - return SysVars[name] -} - -// Variable error codes. -const ( - CodeUnknownStatusVar terror.ErrCode = 1 - CodeUnknownSystemVar terror.ErrCode = 1193 - CodeIncorrectScope terror.ErrCode = 1238 - CodeUnknownTimeZone terror.ErrCode = 1298 - CodeReadOnly terror.ErrCode = 1621 -) - -// Variable errors -var ( - UnknownStatusVar = terror.ClassVariable.New(CodeUnknownStatusVar, "unknown status variable") - UnknownSystemVar = terror.ClassVariable.New(CodeUnknownSystemVar, "unknown system variable '%s'") - ErrIncorrectScope = terror.ClassVariable.New(CodeIncorrectScope, "Incorrect variable scope") - ErrUnknownTimeZone = terror.ClassVariable.New(CodeUnknownTimeZone, "unknown or incorrect time zone: %s") - ErrReadOnly = terror.ClassVariable.New(CodeReadOnly, "variable is read only") -) - -func init() { - SysVars = make(map[string]*SysVar) - for _, v := range defaultSysVars { - SysVars[v.Name] = v - } - initSynonymsSysVariables() - - // Register terror to mysql error map. - mySQLErrCodes := map[terror.ErrCode]uint16{ - CodeUnknownSystemVar: mysql.ErrUnknownSystemVariable, - CodeIncorrectScope: mysql.ErrIncorrectGlobalLocalVar, - CodeUnknownTimeZone: mysql.ErrUnknownTimeZone, - CodeReadOnly: mysql.ErrVariableIsReadonly, - } - terror.ErrClassToMySQLCodes[terror.ClassVariable] = mySQLErrCodes -} - -func boolToIntStr(b bool) string { - if b { - return "1" - } - return "0" -} - -// we only support MySQL now -var defaultSysVars = []*SysVar{ - {ScopeGlobal, "gtid_mode", "OFF"}, - {ScopeGlobal, "flush_time", "0"}, - {ScopeSession, "pseudo_slave_mode", ""}, - {ScopeNone, "performance_schema_max_mutex_classes", "200"}, - {ScopeGlobal | ScopeSession, "low_priority_updates", "OFF"}, - {ScopeGlobal | ScopeSession, "session_track_gtids", ""}, - {ScopeGlobal | ScopeSession, "ndbinfo_max_rows", ""}, - {ScopeGlobal | ScopeSession, "ndb_index_stat_option", ""}, - {ScopeGlobal | ScopeSession, "old_passwords", "0"}, - {ScopeNone, "innodb_version", "5.6.25"}, - {ScopeGlobal, "max_connections", "151"}, - {ScopeGlobal | ScopeSession, "big_tables", "OFF"}, - {ScopeNone, "skip_external_locking", "ON"}, - {ScopeGlobal, "slave_pending_jobs_size_max", "16777216"}, - {ScopeNone, "innodb_sync_array_size", "1"}, - {ScopeSession, "rand_seed2", ""}, - {ScopeGlobal, "validate_password_number_count", "1"}, - {ScopeSession, "gtid_next", ""}, - {ScopeGlobal | ScopeSession, "sql_select_limit", "18446744073709551615"}, - {ScopeGlobal, "ndb_show_foreign_key_mock_tables", ""}, - {ScopeNone, "multi_range_count", "256"}, - {ScopeGlobal | ScopeSession, "default_week_format", "0"}, - {ScopeGlobal | ScopeSession, "binlog_error_action", "IGNORE_ERROR"}, - {ScopeGlobal, "slave_transaction_retries", "10"}, - {ScopeGlobal | ScopeSession, "default_storage_engine", "InnoDB"}, - {ScopeNone, "ft_query_expansion_limit", "20"}, - {ScopeGlobal, "max_connect_errors", "100"}, - {ScopeGlobal, "sync_binlog", "0"}, - {ScopeNone, "max_digest_length", "1024"}, - {ScopeNone, "innodb_force_load_corrupted", "OFF"}, - {ScopeNone, "performance_schema_max_table_handles", "4000"}, - {ScopeGlobal, "innodb_fast_shutdown", "1"}, - {ScopeNone, "ft_max_word_len", "84"}, - {ScopeGlobal, "log_backward_compatible_user_definitions", ""}, - {ScopeNone, "lc_messages_dir", "/usr/local/mysql-5.6.25-osx10.8-x86_64/share/"}, - {ScopeGlobal, "ft_boolean_syntax", "+ -><()~*:\"\"&|"}, - {ScopeGlobal, "table_definition_cache", "1400"}, - {ScopeNone, "skip_name_resolve", "OFF"}, - {ScopeNone, "performance_schema_max_file_handles", "32768"}, - {ScopeSession, "transaction_allow_batching", ""}, - {ScopeGlobal | ScopeSession, SQLModeVar, mysql.DefaultSQLMode}, - {ScopeNone, "performance_schema_max_statement_classes", "168"}, - {ScopeGlobal, "server_id", "0"}, - {ScopeGlobal, "innodb_flushing_avg_loops", "30"}, - {ScopeGlobal | ScopeSession, "tmp_table_size", "16777216"}, - {ScopeGlobal, "innodb_max_purge_lag", "0"}, - {ScopeGlobal | ScopeSession, "preload_buffer_size", "32768"}, - {ScopeGlobal, "slave_checkpoint_period", "300"}, - {ScopeGlobal, "check_proxy_users", ""}, - {ScopeNone, "have_query_cache", "YES"}, - {ScopeGlobal, "innodb_flush_log_at_timeout", "1"}, - {ScopeGlobal, "innodb_max_undo_log_size", ""}, - {ScopeGlobal | ScopeSession, "range_alloc_block_size", "4096"}, - {ScopeGlobal, "connect_timeout", "10"}, - {ScopeGlobal | ScopeSession, "collation_server", "latin1_swedish_ci"}, - {ScopeNone, "have_rtree_keys", "YES"}, - {ScopeGlobal, "innodb_old_blocks_pct", "37"}, - {ScopeGlobal, "innodb_file_format", "Antelope"}, - {ScopeGlobal, "innodb_compression_failure_threshold_pct", "5"}, - {ScopeNone, "performance_schema_events_waits_history_long_size", "10000"}, - {ScopeGlobal, "innodb_checksum_algorithm", "innodb"}, - {ScopeNone, "innodb_ft_sort_pll_degree", "2"}, - {ScopeNone, "thread_stack", "262144"}, - {ScopeGlobal, "relay_log_info_repository", "FILE"}, - {ScopeGlobal | ScopeSession, "sql_log_bin", "ON"}, - {ScopeGlobal, "super_read_only", "OFF"}, - {ScopeGlobal | ScopeSession, "max_delayed_threads", "20"}, - {ScopeNone, "protocol_version", "10"}, - {ScopeGlobal | ScopeSession, "new", "OFF"}, - {ScopeGlobal | ScopeSession, "myisam_sort_buffer_size", "8388608"}, - {ScopeGlobal | ScopeSession, "optimizer_trace_offset", "-1"}, - {ScopeGlobal, "innodb_buffer_pool_dump_at_shutdown", "OFF"}, - {ScopeGlobal | ScopeSession, "sql_notes", "ON"}, - {ScopeGlobal, "innodb_cmp_per_index_enabled", "OFF"}, - {ScopeGlobal, "innodb_ft_server_stopword_table", ""}, - {ScopeNone, "performance_schema_max_file_instances", "7693"}, - {ScopeNone, "log_output", "FILE"}, - {ScopeGlobal, "binlog_group_commit_sync_delay", ""}, - {ScopeGlobal, "binlog_group_commit_sync_no_delay_count", ""}, - {ScopeNone, "have_crypt", "YES"}, - {ScopeGlobal, "innodb_log_write_ahead_size", ""}, - {ScopeNone, "innodb_log_group_home_dir", "./"}, - {ScopeNone, "performance_schema_events_statements_history_size", "10"}, - {ScopeGlobal, "general_log", "OFF"}, - {ScopeGlobal, "validate_password_dictionary_file", ""}, - {ScopeGlobal, "binlog_order_commits", "ON"}, - {ScopeGlobal, "master_verify_checksum", "OFF"}, - {ScopeGlobal, "key_cache_division_limit", "100"}, - {ScopeGlobal, "rpl_semi_sync_master_trace_level", ""}, - {ScopeGlobal | ScopeSession, "max_insert_delayed_threads", "20"}, - {ScopeNone, "performance_schema_session_connect_attrs_size", "512"}, - {ScopeGlobal | ScopeSession, "time_zone", "SYSTEM"}, - {ScopeGlobal, "innodb_max_dirty_pages_pct", "75"}, - {ScopeGlobal, "innodb_file_per_table", "ON"}, - {ScopeGlobal, "innodb_log_compressed_pages", "ON"}, - {ScopeGlobal, "master_info_repository", "FILE"}, - {ScopeGlobal, "rpl_stop_slave_timeout", "31536000"}, - {ScopeNone, "skip_networking", "OFF"}, - {ScopeGlobal, "innodb_monitor_reset", ""}, - {ScopeNone, "have_ssl", "DISABLED"}, - {ScopeNone, "have_openssl", "DISABLED"}, - {ScopeNone, "ssl_ca", ""}, - {ScopeNone, "ssl_cert", ""}, - {ScopeNone, "ssl_key", ""}, - {ScopeNone, "ssl_cipher", ""}, - {ScopeNone, "tls_version", "TLSv1,TLSv1.1,TLSv1.2"}, - {ScopeNone, "system_time_zone", "CST"}, - {ScopeGlobal, "innodb_print_all_deadlocks", "OFF"}, - {ScopeNone, "innodb_autoinc_lock_mode", "1"}, - {ScopeGlobal, "slave_net_timeout", "3600"}, - {ScopeGlobal, "key_buffer_size", "8388608"}, - {ScopeGlobal | ScopeSession, "foreign_key_checks", "ON"}, - {ScopeGlobal, "host_cache_size", "279"}, - {ScopeGlobal, "delay_key_write", "ON"}, - {ScopeNone, "metadata_locks_cache_size", "1024"}, - {ScopeNone, "innodb_force_recovery", "0"}, - {ScopeGlobal, "innodb_file_format_max", "Antelope"}, - {ScopeGlobal | ScopeSession, "debug", ""}, - {ScopeGlobal, "log_warnings", "1"}, - {ScopeGlobal, "offline_mode", ""}, - {ScopeGlobal | ScopeSession, "innodb_strict_mode", "OFF"}, - {ScopeGlobal, "innodb_rollback_segments", "128"}, - {ScopeGlobal | ScopeSession, "join_buffer_size", "262144"}, - {ScopeNone, "innodb_mirrored_log_groups", "1"}, - {ScopeGlobal, "max_binlog_size", "1073741824"}, - {ScopeGlobal, "sync_master_info", "10000"}, - {ScopeGlobal, "concurrent_insert", "AUTO"}, - {ScopeGlobal, "innodb_adaptive_hash_index", "ON"}, - {ScopeGlobal, "innodb_ft_enable_stopword", "ON"}, - {ScopeGlobal, "general_log_file", "/usr/local/mysql/data/localhost.log"}, - {ScopeGlobal | ScopeSession, "innodb_support_xa", "ON"}, - {ScopeGlobal, "innodb_compression_level", "6"}, - {ScopeNone, "innodb_file_format_check", "ON"}, - {ScopeNone, "myisam_mmap_size", "18446744073709551615"}, - {ScopeGlobal, "init_slave", ""}, - {ScopeNone, "innodb_buffer_pool_instances", "8"}, - {ScopeGlobal | ScopeSession, "block_encryption_mode", "aes-128-ecb"}, - {ScopeGlobal | ScopeSession, "max_length_for_sort_data", "1024"}, - {ScopeNone, "character_set_system", "utf8"}, - {ScopeGlobal | ScopeSession, "interactive_timeout", "28800"}, - {ScopeGlobal, "innodb_optimize_fulltext_only", "OFF"}, - {ScopeNone, "character_sets_dir", "/usr/local/mysql-5.6.25-osx10.8-x86_64/share/charsets/"}, - {ScopeGlobal | ScopeSession, "query_cache_type", "OFF"}, - {ScopeNone, "innodb_rollback_on_timeout", "OFF"}, - {ScopeGlobal | ScopeSession, "query_alloc_block_size", "8192"}, - {ScopeGlobal, "slave_compressed_protocol", "OFF"}, - {ScopeGlobal, "init_connect", ""}, - {ScopeGlobal, "rpl_semi_sync_slave_trace_level", ""}, - {ScopeNone, "have_compress", "YES"}, - {ScopeNone, "thread_concurrency", "10"}, - {ScopeGlobal | ScopeSession, "query_prealloc_size", "8192"}, - {ScopeNone, "relay_log_space_limit", "0"}, - {ScopeGlobal | ScopeSession, "max_user_connections", "0"}, - {ScopeNone, "performance_schema_max_thread_classes", "50"}, - {ScopeGlobal, "innodb_api_trx_level", "0"}, - {ScopeNone, "disconnect_on_expired_password", "ON"}, - {ScopeNone, "performance_schema_max_file_classes", "50"}, - {ScopeGlobal, "expire_logs_days", "0"}, - {ScopeGlobal | ScopeSession, "binlog_rows_query_log_events", "OFF"}, - {ScopeGlobal, "validate_password_policy", "1"}, - {ScopeGlobal, "default_password_lifetime", ""}, - {ScopeNone, "pid_file", "/usr/local/mysql/data/localhost.pid"}, - {ScopeNone, "innodb_undo_tablespaces", "0"}, - {ScopeGlobal, "innodb_status_output_locks", "OFF"}, - {ScopeNone, "performance_schema_accounts_size", "100"}, - {ScopeGlobal | ScopeSession, "max_error_count", "64"}, - {ScopeGlobal, "max_write_lock_count", "18446744073709551615"}, - {ScopeNone, "performance_schema_max_socket_instances", "322"}, - {ScopeNone, "performance_schema_max_table_instances", "12500"}, - {ScopeGlobal, "innodb_stats_persistent_sample_pages", "20"}, - {ScopeGlobal, "show_compatibility_56", ""}, - {ScopeGlobal, "log_slow_slave_statements", "OFF"}, - {ScopeNone, "innodb_open_files", "2000"}, - {ScopeGlobal, "innodb_spin_wait_delay", "6"}, - {ScopeGlobal, "thread_cache_size", "9"}, - {ScopeGlobal, "log_slow_admin_statements", "OFF"}, - {ScopeNone, "innodb_checksums", "ON"}, - {ScopeNone, "hostname", "localhost"}, - {ScopeGlobal | ScopeSession, "auto_increment_offset", "1"}, - {ScopeNone, "ft_stopword_file", "(built-in)"}, - {ScopeGlobal, "innodb_max_dirty_pages_pct_lwm", "0"}, - {ScopeGlobal, "log_queries_not_using_indexes", "OFF"}, - {ScopeSession, "timestamp", ""}, - {ScopeGlobal | ScopeSession, "query_cache_wlock_invalidate", "OFF"}, - {ScopeGlobal | ScopeSession, "sql_buffer_result", "OFF"}, - {ScopeGlobal | ScopeSession, "character_set_filesystem", "binary"}, - {ScopeGlobal | ScopeSession, "collation_database", "latin1_swedish_ci"}, - {ScopeGlobal | ScopeSession, "auto_increment_increment", "1"}, - {ScopeGlobal | ScopeSession, "max_heap_table_size", "16777216"}, - {ScopeGlobal | ScopeSession, "div_precision_increment", "4"}, - {ScopeGlobal, "innodb_lru_scan_depth", "1024"}, - {ScopeGlobal, "innodb_purge_rseg_truncate_frequency", ""}, - {ScopeGlobal | ScopeSession, "sql_auto_is_null", "OFF"}, - {ScopeNone, "innodb_api_enable_binlog", "OFF"}, - {ScopeGlobal | ScopeSession, "innodb_ft_user_stopword_table", ""}, - {ScopeNone, "server_id_bits", "32"}, - {ScopeGlobal, "innodb_log_checksum_algorithm", ""}, - {ScopeNone, "innodb_buffer_pool_load_at_startup", "OFF"}, - {ScopeGlobal | ScopeSession, "sort_buffer_size", "262144"}, - {ScopeGlobal, "innodb_flush_neighbors", "1"}, - {ScopeNone, "innodb_use_sys_malloc", "ON"}, - {ScopeNone, "plugin_dir", "/usr/local/mysql/lib/plugin/"}, - {ScopeNone, "performance_schema_max_socket_classes", "10"}, - {ScopeNone, "performance_schema_max_stage_classes", "150"}, - {ScopeGlobal, "innodb_purge_batch_size", "300"}, - {ScopeNone, "have_profiling", "NO"}, - {ScopeGlobal, "slave_checkpoint_group", "512"}, - {ScopeGlobal | ScopeSession, "character_set_client", "latin1"}, - {ScopeNone, "slave_load_tmpdir", "/var/tmp/"}, - {ScopeGlobal, "innodb_buffer_pool_dump_now", "OFF"}, - {ScopeGlobal, "relay_log_purge", "ON"}, - {ScopeGlobal, "ndb_distribution", ""}, - {ScopeGlobal, "myisam_data_pointer_size", "6"}, - {ScopeGlobal, "ndb_optimization_delay", ""}, - {ScopeGlobal, "innodb_ft_num_word_optimize", "2000"}, - {ScopeGlobal | ScopeSession, "max_join_size", "18446744073709551615"}, - {ScopeNone, "core_file", "OFF"}, - {ScopeGlobal | ScopeSession, "max_seeks_for_key", "18446744073709551615"}, - {ScopeNone, "innodb_log_buffer_size", "8388608"}, - {ScopeGlobal, "delayed_insert_timeout", "300"}, - {ScopeGlobal, "max_relay_log_size", "0"}, - {ScopeGlobal | ScopeSession, "max_sort_length", "1024"}, - {ScopeNone, "metadata_locks_hash_instances", "8"}, - {ScopeGlobal, "ndb_eventbuffer_free_percent", ""}, - {ScopeNone, "large_files_support", "ON"}, - {ScopeGlobal, "binlog_max_flush_queue_time", "0"}, - {ScopeGlobal, "innodb_fill_factor", ""}, - {ScopeGlobal, "log_syslog_facility", ""}, - {ScopeNone, "innodb_ft_min_token_size", "3"}, - {ScopeGlobal | ScopeSession, "transaction_write_set_extraction", ""}, - {ScopeGlobal | ScopeSession, "ndb_blob_write_batch_bytes", ""}, - {ScopeGlobal, "automatic_sp_privileges", "ON"}, - {ScopeGlobal, "innodb_flush_sync", ""}, - {ScopeNone, "performance_schema_events_statements_history_long_size", "10000"}, - {ScopeGlobal, "innodb_monitor_disable", ""}, - {ScopeNone, "innodb_doublewrite", "ON"}, - {ScopeGlobal, "slave_parallel_type", ""}, - {ScopeNone, "log_bin_use_v1_row_events", "OFF"}, - {ScopeSession, "innodb_optimize_point_storage", ""}, - {ScopeNone, "innodb_api_disable_rowlock", "OFF"}, - {ScopeGlobal, "innodb_adaptive_flushing_lwm", "10"}, - {ScopeNone, "innodb_log_files_in_group", "2"}, - {ScopeGlobal, "innodb_buffer_pool_load_now", "OFF"}, - {ScopeNone, "performance_schema_max_rwlock_classes", "40"}, - {ScopeNone, "binlog_gtid_simple_recovery", "OFF"}, - {ScopeNone, "port", "3306"}, - {ScopeNone, "performance_schema_digests_size", "10000"}, - {ScopeGlobal | ScopeSession, "profiling", "OFF"}, - {ScopeNone, "lower_case_table_names", "2"}, - {ScopeSession, "rand_seed1", ""}, - {ScopeGlobal, "sha256_password_proxy_users", ""}, - {ScopeGlobal | ScopeSession, "sql_quote_show_create", "ON"}, - {ScopeGlobal | ScopeSession, "binlogging_impossible_mode", "IGNORE_ERROR"}, - {ScopeGlobal, "query_cache_size", "1048576"}, - {ScopeGlobal, "innodb_stats_transient_sample_pages", "8"}, - {ScopeGlobal, "innodb_stats_on_metadata", "OFF"}, - {ScopeNone, "server_uuid", "d530594e-1c86-11e5-878b-6b36ce6799ca"}, - {ScopeNone, "open_files_limit", "5000"}, - {ScopeGlobal | ScopeSession, "ndb_force_send", ""}, - {ScopeNone, "skip_show_database", "OFF"}, - {ScopeGlobal, "log_timestamps", ""}, - {ScopeNone, "version_compile_machine", "x86_64"}, - {ScopeGlobal, "slave_parallel_workers", "0"}, - {ScopeGlobal, "event_scheduler", "OFF"}, - {ScopeGlobal | ScopeSession, "ndb_deferred_constraints", ""}, - {ScopeGlobal, "log_syslog_include_pid", ""}, - {ScopeSession, "last_insert_id", ""}, - {ScopeNone, "innodb_ft_cache_size", "8000000"}, - {ScopeNone, "log_bin", "OFF"}, - {ScopeGlobal, "innodb_disable_sort_file_cache", "OFF"}, - {ScopeGlobal, "log_error_verbosity", ""}, - {ScopeNone, "performance_schema_hosts_size", "100"}, - {ScopeGlobal, "innodb_replication_delay", "0"}, - {ScopeGlobal, "slow_query_log", "OFF"}, - {ScopeSession, "debug_sync", ""}, - {ScopeGlobal, "innodb_stats_auto_recalc", "ON"}, - {ScopeGlobal, "timed_mutexes", "OFF"}, - {ScopeGlobal | ScopeSession, "lc_messages", "en_US"}, - {ScopeGlobal | ScopeSession, "bulk_insert_buffer_size", "8388608"}, - {ScopeGlobal | ScopeSession, "binlog_direct_non_transactional_updates", "OFF"}, - {ScopeGlobal, "innodb_change_buffering", "all"}, - {ScopeGlobal | ScopeSession, "sql_big_selects", "ON"}, - {ScopeGlobal | ScopeSession, CharacterSetResults, "latin1"}, - {ScopeGlobal, "innodb_max_purge_lag_delay", "0"}, - {ScopeGlobal | ScopeSession, "session_track_schema", ""}, - {ScopeGlobal, "innodb_io_capacity_max", "2000"}, - {ScopeGlobal, "innodb_autoextend_increment", "64"}, - {ScopeGlobal | ScopeSession, "binlog_format", "STATEMENT"}, - {ScopeGlobal | ScopeSession, "optimizer_trace", "enabled=off,one_line=off"}, - {ScopeGlobal | ScopeSession, "read_rnd_buffer_size", "262144"}, - {ScopeNone, "version_comment", "MySQL Community Server (Apache License 2.0)"}, - {ScopeGlobal | ScopeSession, "net_write_timeout", "60"}, - {ScopeGlobal, "innodb_buffer_pool_load_abort", "OFF"}, - {ScopeGlobal | ScopeSession, "tx_isolation", "REPEATABLE-READ"}, - {ScopeGlobal | ScopeSession, "transaction_isolation", "REPEATABLE-READ"}, - {ScopeGlobal | ScopeSession, "collation_connection", "latin1_swedish_ci"}, - {ScopeGlobal, "rpl_semi_sync_master_timeout", ""}, - {ScopeGlobal | ScopeSession, "transaction_prealloc_size", "4096"}, - {ScopeNone, "slave_skip_errors", "OFF"}, - {ScopeNone, "performance_schema_setup_objects_size", "100"}, - {ScopeGlobal, "sync_relay_log", "10000"}, - {ScopeGlobal, "innodb_ft_result_cache_limit", "2000000000"}, - {ScopeNone, "innodb_sort_buffer_size", "1048576"}, - {ScopeGlobal, "innodb_ft_enable_diag_print", "OFF"}, - {ScopeNone, "thread_handling", "one-thread-per-connection"}, - {ScopeGlobal, "stored_program_cache", "256"}, - {ScopeNone, "performance_schema_max_mutex_instances", "15906"}, - {ScopeGlobal, "innodb_adaptive_max_sleep_delay", "150000"}, - {ScopeNone, "large_pages", "OFF"}, - {ScopeGlobal | ScopeSession, "session_track_system_variables", ""}, - {ScopeGlobal, "innodb_change_buffer_max_size", "25"}, - {ScopeGlobal, "log_bin_trust_function_creators", "OFF"}, - {ScopeNone, "innodb_write_io_threads", "4"}, - {ScopeGlobal, "mysql_native_password_proxy_users", ""}, - {ScopeGlobal, "read_only", "OFF"}, - {ScopeNone, "large_page_size", "0"}, - {ScopeNone, "table_open_cache_instances", "1"}, - {ScopeGlobal, "innodb_stats_persistent", "ON"}, - {ScopeGlobal | ScopeSession, "session_track_state_change", ""}, - {ScopeNone, "optimizer_switch", "index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,mrr=on,mrr_cost_based=on,block_nested_loop=on,batched_key_access=off,materialization=on,semijoin=on,loosescan=on,firstmatch=on,subquery_materialization_cost_based=on,use_index_extensions=on"}, - {ScopeGlobal, "delayed_queue_size", "1000"}, - {ScopeNone, "innodb_read_only", "OFF"}, - {ScopeNone, "datetime_format", "%Y-%m-%d %H:%i:%s"}, - {ScopeGlobal, "log_syslog", ""}, - {ScopeNone, "version", mysql.ServerVersion}, - {ScopeGlobal | ScopeSession, "transaction_alloc_block_size", "8192"}, - {ScopeGlobal, "sql_slave_skip_counter", "0"}, - {ScopeGlobal, "innodb_large_prefix", "OFF"}, - {ScopeNone, "performance_schema_max_cond_classes", "80"}, - {ScopeGlobal, "innodb_io_capacity", "200"}, - {ScopeGlobal, "max_binlog_cache_size", "18446744073709547520"}, - {ScopeGlobal | ScopeSession, "ndb_index_stat_enable", ""}, - {ScopeGlobal, "executed_gtids_compression_period", ""}, - {ScopeNone, "time_format", "%H:%i:%s"}, - {ScopeGlobal | ScopeSession, "old_alter_table", "OFF"}, - {ScopeGlobal | ScopeSession, "long_query_time", "10.000000"}, - {ScopeNone, "innodb_use_native_aio", "OFF"}, - {ScopeGlobal, "log_throttle_queries_not_using_indexes", "0"}, - {ScopeNone, "locked_in_memory", "OFF"}, - {ScopeNone, "innodb_api_enable_mdl", "OFF"}, - {ScopeGlobal, "binlog_cache_size", "32768"}, - {ScopeGlobal, "innodb_compression_pad_pct_max", "50"}, - {ScopeGlobal, "innodb_commit_concurrency", "0"}, - {ScopeNone, "ft_min_word_len", "4"}, - {ScopeGlobal, "enforce_gtid_consistency", "OFF"}, - {ScopeGlobal, "secure_auth", "ON"}, - {ScopeNone, "max_tmp_tables", "32"}, - {ScopeGlobal, "innodb_random_read_ahead", "OFF"}, - {ScopeGlobal | ScopeSession, "unique_checks", "ON"}, - {ScopeGlobal, "internal_tmp_disk_storage_engine", ""}, - {ScopeGlobal | ScopeSession, "myisam_repair_threads", "1"}, - {ScopeGlobal, "ndb_eventbuffer_max_alloc", ""}, - {ScopeGlobal, "innodb_read_ahead_threshold", "56"}, - {ScopeGlobal, "key_cache_block_size", "1024"}, - {ScopeGlobal, "rpl_semi_sync_slave_enabled", ""}, - {ScopeNone, "ndb_recv_thread_cpu_mask", ""}, - {ScopeGlobal, "gtid_purged", ""}, - {ScopeGlobal, "max_binlog_stmt_cache_size", "18446744073709547520"}, - {ScopeGlobal | ScopeSession, "lock_wait_timeout", "31536000"}, - {ScopeGlobal | ScopeSession, "read_buffer_size", "131072"}, - {ScopeNone, "innodb_read_io_threads", "4"}, - {ScopeGlobal | ScopeSession, "max_sp_recursion_depth", "0"}, - {ScopeNone, "ignore_builtin_innodb", "OFF"}, - {ScopeGlobal, "rpl_semi_sync_master_enabled", ""}, - {ScopeGlobal, "slow_query_log_file", "/usr/local/mysql/data/localhost-slow.log"}, - {ScopeGlobal, "innodb_thread_sleep_delay", "10000"}, - {ScopeNone, "license", "Apache License 2.0"}, - {ScopeGlobal, "innodb_ft_aux_table", ""}, - {ScopeGlobal | ScopeSession, "sql_warnings", "OFF"}, - {ScopeGlobal | ScopeSession, "keep_files_on_create", "OFF"}, - {ScopeGlobal, "slave_preserve_commit_order", ""}, - {ScopeNone, "innodb_data_file_path", "ibdata1:12M:autoextend"}, - {ScopeNone, "performance_schema_setup_actors_size", "100"}, - {ScopeNone, "innodb_additional_mem_pool_size", "8388608"}, - {ScopeNone, "log_error", "/usr/local/mysql/data/localhost.err"}, - {ScopeGlobal, "slave_exec_mode", "STRICT"}, - {ScopeGlobal, "binlog_stmt_cache_size", "32768"}, - {ScopeNone, "relay_log_info_file", "relay-log.info"}, - {ScopeNone, "innodb_ft_total_cache_size", "640000000"}, - {ScopeNone, "performance_schema_max_rwlock_instances", "9102"}, - {ScopeGlobal, "table_open_cache", "2000"}, - {ScopeNone, "log_slave_updates", "OFF"}, - {ScopeNone, "performance_schema_events_stages_history_long_size", "10000"}, - {ScopeGlobal | ScopeSession, "autocommit", "ON"}, - {ScopeSession, "insert_id", ""}, - {ScopeGlobal | ScopeSession, "default_tmp_storage_engine", "InnoDB"}, - {ScopeGlobal | ScopeSession, "optimizer_search_depth", "62"}, - {ScopeGlobal, "max_points_in_geometry", ""}, - {ScopeGlobal, "innodb_stats_sample_pages", "8"}, - {ScopeGlobal | ScopeSession, "profiling_history_size", "15"}, - {ScopeGlobal | ScopeSession, "character_set_database", "latin1"}, - {ScopeNone, "have_symlink", "YES"}, - {ScopeGlobal | ScopeSession, "storage_engine", "InnoDB"}, - {ScopeGlobal | ScopeSession, "sql_log_off", "OFF"}, - {ScopeNone, "explicit_defaults_for_timestamp", "ON"}, - {ScopeNone, "performance_schema_events_waits_history_size", "10"}, - {ScopeGlobal, "log_syslog_tag", ""}, - {ScopeGlobal | ScopeSession, "tx_read_only", "0"}, - {ScopeGlobal | ScopeSession, "transaction_read_only", "0"}, - {ScopeGlobal, "rpl_semi_sync_master_wait_point", ""}, - {ScopeGlobal, "innodb_undo_log_truncate", ""}, - {ScopeNone, "simplified_binlog_gtid_recovery", "OFF"}, - {ScopeSession, "innodb_create_intrinsic", ""}, - {ScopeGlobal, "gtid_executed_compression_period", ""}, - {ScopeGlobal, "ndb_log_empty_epochs", ""}, - {ScopeGlobal, "max_prepared_stmt_count", "16382"}, - {ScopeNone, "have_geometry", "YES"}, - {ScopeGlobal | ScopeSession, "optimizer_trace_max_mem_size", "16384"}, - {ScopeGlobal | ScopeSession, "net_retry_count", "10"}, - {ScopeSession, "ndb_table_no_logging", ""}, - {ScopeGlobal | ScopeSession, "optimizer_trace_features", "greedy_search=on,range_optimizer=on,dynamic_range=on,repeated_subselect=on"}, - {ScopeGlobal, "innodb_flush_log_at_trx_commit", "1"}, - {ScopeGlobal, "rewriter_enabled", ""}, - {ScopeGlobal, "query_cache_min_res_unit", "4096"}, - {ScopeGlobal | ScopeSession, "updatable_views_with_limit", "YES"}, - {ScopeGlobal | ScopeSession, "optimizer_prune_level", "1"}, - {ScopeGlobal, "slave_sql_verify_checksum", "ON"}, - {ScopeGlobal | ScopeSession, "completion_type", "NO_CHAIN"}, - {ScopeGlobal, "binlog_checksum", "CRC32"}, - {ScopeNone, "report_port", "3306"}, - {ScopeGlobal | ScopeSession, "show_old_temporals", "OFF"}, - {ScopeGlobal, "query_cache_limit", "1048576"}, - {ScopeGlobal, "innodb_buffer_pool_size", "134217728"}, - {ScopeGlobal, "innodb_adaptive_flushing", "ON"}, - {ScopeNone, "datadir", "/usr/local/mysql/data/"}, - {ScopeGlobal | ScopeSession, "wait_timeout", "28800"}, - {ScopeGlobal, "innodb_monitor_enable", ""}, - {ScopeNone, "date_format", "%Y-%m-%d"}, - {ScopeGlobal, "innodb_buffer_pool_filename", "ib_buffer_pool"}, - {ScopeGlobal, "slow_launch_time", "2"}, - {ScopeGlobal, "slave_max_allowed_packet", "1073741824"}, - {ScopeGlobal | ScopeSession, "ndb_use_transactions", ""}, - {ScopeNone, "innodb_purge_threads", "1"}, - {ScopeGlobal, "innodb_concurrency_tickets", "5000"}, - {ScopeGlobal, "innodb_monitor_reset_all", ""}, - {ScopeNone, "performance_schema_users_size", "100"}, - {ScopeGlobal, "ndb_log_updated_only", ""}, - {ScopeNone, "basedir", "/usr/local/mysql"}, - {ScopeGlobal, "innodb_old_blocks_time", "1000"}, - {ScopeGlobal, "innodb_stats_method", "nulls_equal"}, - {ScopeGlobal | ScopeSession, "innodb_lock_wait_timeout", "50"}, - {ScopeGlobal, "local_infile", "ON"}, - {ScopeGlobal | ScopeSession, "myisam_stats_method", "nulls_unequal"}, - {ScopeNone, "version_compile_os", "osx10.8"}, - {ScopeNone, "relay_log_recovery", "OFF"}, - {ScopeNone, "old", "OFF"}, - {ScopeGlobal | ScopeSession, "innodb_table_locks", "ON"}, - {ScopeNone, "performance_schema", "ON"}, - {ScopeNone, "myisam_recover_options", "OFF"}, - {ScopeGlobal | ScopeSession, "net_buffer_length", "16384"}, - {ScopeGlobal, "rpl_semi_sync_master_wait_for_slave_count", ""}, - {ScopeGlobal | ScopeSession, "binlog_row_image", "FULL"}, - {ScopeNone, "innodb_locks_unsafe_for_binlog", "OFF"}, - {ScopeSession, "rbr_exec_mode", ""}, - {ScopeGlobal, "myisam_max_sort_file_size", "9223372036853727232"}, - {ScopeNone, "back_log", "80"}, - {ScopeNone, "lower_case_file_system", "ON"}, - {ScopeGlobal, "rpl_semi_sync_master_wait_no_slave", ""}, - {ScopeGlobal | ScopeSession, "group_concat_max_len", "1024"}, - {ScopeSession, "pseudo_thread_id", ""}, - {ScopeNone, "socket", "/tmp/myssock"}, - {ScopeNone, "have_dynamic_loading", "YES"}, - {ScopeGlobal, "rewriter_verbose", ""}, - {ScopeGlobal, "innodb_undo_logs", "128"}, - {ScopeNone, "performance_schema_max_cond_instances", "3504"}, - {ScopeGlobal, "delayed_insert_limit", "100"}, - {ScopeGlobal, "flush", "OFF"}, - {ScopeGlobal | ScopeSession, "eq_range_index_dive_limit", "10"}, - {ScopeNone, "performance_schema_events_stages_history_size", "10"}, - {ScopeGlobal | ScopeSession, "character_set_connection", "latin1"}, - {ScopeGlobal, "myisam_use_mmap", "OFF"}, - {ScopeGlobal | ScopeSession, "ndb_join_pushdown", ""}, - {ScopeGlobal | ScopeSession, "character_set_server", "latin1"}, - {ScopeGlobal, "validate_password_special_char_count", "1"}, - {ScopeNone, "performance_schema_max_thread_instances", "402"}, - {ScopeGlobal, "slave_rows_search_algorithms", "TABLE_SCAN,INDEX_SCAN"}, - {ScopeGlobal | ScopeSession, "ndbinfo_show_hidden", ""}, - {ScopeGlobal | ScopeSession, "net_read_timeout", "30"}, - {ScopeNone, "innodb_page_size", "16384"}, - {ScopeGlobal, MaxAllowedPacket, "67108864"}, - {ScopeNone, "innodb_log_file_size", "50331648"}, - {ScopeGlobal, "sync_relay_log_info", "10000"}, - {ScopeGlobal | ScopeSession, "optimizer_trace_limit", "1"}, - {ScopeNone, "innodb_ft_max_token_size", "84"}, - {ScopeGlobal, "validate_password_length", "8"}, - {ScopeGlobal, "ndb_log_binlog_index", ""}, - {ScopeGlobal, "validate_password_mixed_case_count", "1"}, - {ScopeGlobal, "innodb_api_bk_commit_interval", "5"}, - {ScopeNone, "innodb_undo_directory", "."}, - {ScopeNone, "bind_address", "*"}, - {ScopeGlobal, "innodb_sync_spin_loops", "30"}, - {ScopeGlobal | ScopeSession, "sql_safe_updates", "OFF"}, - {ScopeNone, "tmpdir", "/var/tmp/"}, - {ScopeGlobal, "innodb_thread_concurrency", "0"}, - {ScopeGlobal, "slave_allow_batching", "OFF"}, - {ScopeGlobal, "innodb_buffer_pool_dump_pct", ""}, - {ScopeGlobal | ScopeSession, "lc_time_names", "en_US"}, - {ScopeGlobal | ScopeSession, "max_statement_time", ""}, - {ScopeGlobal | ScopeSession, "end_markers_in_json", "OFF"}, - {ScopeGlobal, "avoid_temporal_upgrade", "OFF"}, - {ScopeGlobal, "key_cache_age_threshold", "300"}, - {ScopeGlobal, "innodb_status_output", "OFF"}, - {ScopeSession, "identity", ""}, - {ScopeGlobal | ScopeSession, "min_examined_row_limit", "0"}, - {ScopeGlobal, "sync_frm", "ON"}, - {ScopeGlobal, "innodb_online_alter_log_max_size", "134217728"}, - /* TiDB specific variables */ - {ScopeSession, TiDBSnapshot, ""}, - {ScopeSession, TiDBImportingData, "0"}, - {ScopeSession, TiDBOptAggPushDown, boolToIntStr(DefOptAggPushDown)}, - {ScopeGlobal | ScopeSession, TiDBBuildStatsConcurrency, strconv.Itoa(DefBuildStatsConcurrency)}, - {ScopeGlobal, TiDBAutoAnalyzeRatio, strconv.FormatFloat(DefAutoAnalyzeRatio, 'f', -1, 64)}, - {ScopeSession, TiDBChecksumTableConcurrency, strconv.Itoa(DefChecksumTableConcurrency)}, - {ScopeGlobal | ScopeSession, TiDBDistSQLScanConcurrency, strconv.Itoa(DefDistSQLScanConcurrency)}, - {ScopeGlobal | ScopeSession, TiDBOptInSubqUnFolding, boolToIntStr(DefOptInSubqUnfolding)}, - {ScopeGlobal | ScopeSession, TiDBIndexJoinBatchSize, strconv.Itoa(DefIndexJoinBatchSize)}, - {ScopeGlobal | ScopeSession, TiDBIndexLookupSize, strconv.Itoa(DefIndexLookupSize)}, - {ScopeGlobal | ScopeSession, TiDBIndexLookupConcurrency, strconv.Itoa(DefIndexLookupConcurrency)}, - {ScopeGlobal | ScopeSession, TiDBIndexLookupJoinConcurrency, strconv.Itoa(DefIndexLookupJoinConcurrency)}, - {ScopeGlobal | ScopeSession, TiDBIndexSerialScanConcurrency, strconv.Itoa(DefIndexSerialScanConcurrency)}, - {ScopeGlobal | ScopeSession, TiDBSkipUTF8Check, boolToIntStr(DefSkipUTF8Check)}, - {ScopeSession, TiDBBatchInsert, boolToIntStr(DefBatchInsert)}, - {ScopeSession, TiDBBatchDelete, boolToIntStr(DefBatchDelete)}, - {ScopeSession, TiDBDMLBatchSize, strconv.Itoa(DefDMLBatchSize)}, - {ScopeSession, TiDBCurrentTS, strconv.Itoa(DefCurretTS)}, - {ScopeGlobal | ScopeSession, TiDBMaxChunkSize, strconv.Itoa(DefMaxChunkSize)}, - {ScopeSession, TIDBMemQuotaQuery, strconv.FormatInt(config.GetGlobalConfig().MemQuotaQuery, 10)}, - {ScopeSession, TIDBMemQuotaHashJoin, strconv.FormatInt(DefTiDBMemQuotaHashJoin, 10)}, - {ScopeSession, TIDBMemQuotaMergeJoin, strconv.FormatInt(DefTiDBMemQuotaMergeJoin, 10)}, - {ScopeSession, TIDBMemQuotaSort, strconv.FormatInt(DefTiDBMemQuotaSort, 10)}, - {ScopeSession, TIDBMemQuotaTopn, strconv.FormatInt(DefTiDBMemQuotaTopn, 10)}, - {ScopeSession, TIDBMemQuotaIndexLookupReader, strconv.FormatInt(DefTiDBMemQuotaIndexLookupReader, 10)}, - {ScopeSession, TIDBMemQuotaIndexLookupJoin, strconv.FormatInt(DefTiDBMemQuotaIndexLookupJoin, 10)}, - {ScopeSession, TIDBMemQuotaNestedLoopApply, strconv.FormatInt(DefTiDBMemQuotaNestedLoopApply, 10)}, - {ScopeSession, TiDBEnableStreaming, "0"}, - {ScopeSession, TxnIsolationOneShot, ""}, - {ScopeSession, TiDBEnableTablePartition, "0"}, - {ScopeGlobal | ScopeSession, TiDBHashJoinConcurrency, strconv.Itoa(DefTiDBHashJoinConcurrency)}, - {ScopeGlobal | ScopeSession, TiDBProjectionConcurrency, strconv.Itoa(DefTiDBProjectionConcurrency)}, - {ScopeGlobal | ScopeSession, TiDBHashAggPartialConcurrency, strconv.Itoa(DefTiDBHashAggPartialConcurrency)}, - {ScopeGlobal | ScopeSession, TiDBHashAggFinalConcurrency, strconv.Itoa(DefTiDBHashAggFinalConcurrency)}, - {ScopeGlobal | ScopeSession, TiDBBackoffLockFast, strconv.Itoa(kv.DefBackoffLockFast)}, - {ScopeGlobal | ScopeSession, TiDBRetryLimit, strconv.Itoa(DefTiDBRetryLimit)}, - {ScopeGlobal | ScopeSession, TiDBDisableTxnAutoRetry, boolToIntStr(DefTiDBDisableTxnAutoRetry)}, - {ScopeSession, TiDBOptimizerSelectivityLevel, strconv.Itoa(DefTiDBOptimizerSelectivityLevel)}, - /* The following variable is defined as session scope but is actually server scope. */ - {ScopeSession, TiDBGeneralLog, strconv.Itoa(DefTiDBGeneralLog)}, - {ScopeSession, TiDBConfig, ""}, - {ScopeGlobal | ScopeSession, TiDBDDLReorgWorkerCount, strconv.Itoa(DefTiDBDDLReorgWorkerCount)}, -} - -// SynonymsSysVariables is synonyms of system variables. -var SynonymsSysVariables = map[string][]string{} - -func addSynonymsSysVariables(synonyms ...string) { - for _, s := range synonyms { - SynonymsSysVariables[s] = synonyms - } -} - -func initSynonymsSysVariables() { - addSynonymsSysVariables("tx_isolation", "transaction_isolation") - addSynonymsSysVariables("tx_read_only", "transaction_read_only") -} - -// SetNamesVariables is the system variable names related to set names statements. -var SetNamesVariables = []string{ - "character_set_client", - "character_set_connection", - "character_set_results", -} - -const ( - // CharacterSetConnection is the name for character_set_connection system variable. - CharacterSetConnection = "character_set_connection" - // CollationConnection is the name for collation_connection system variable. - CollationConnection = "collation_connection" - // CharsetDatabase is the name for character_set_database system variable. - CharsetDatabase = "character_set_database" - // CollationDatabase is the name for collation_database system variable. - CollationDatabase = "collation_database" -) - -// GlobalVarAccessor is the interface for accessing global scope system and status variables. -type GlobalVarAccessor interface { - // GetAllSysVars gets all the global system variable values. - GetAllSysVars() (map[string]string, error) - // GetGlobalSysVar gets the global system variable value for name. - GetGlobalSysVar(name string) (string, error) - // SetGlobalSysVar sets the global system variable name to value. - SetGlobalSysVar(name string, value string) error -} diff --git a/vendor/github.com/pingcap/tidb/sessionctx/variable/tidb_vars.go b/vendor/github.com/pingcap/tidb/sessionctx/variable/tidb_vars.go deleted file mode 100644 index ee366c9..0000000 --- a/vendor/github.com/pingcap/tidb/sessionctx/variable/tidb_vars.go +++ /dev/null @@ -1,224 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package variable - -/* - Steps to add a new TiDB specific system variable: - - 1. Add a new variable name with comment in this file. - 2. Add the default value of the new variable in this file. - 3. Add SysVar instance in 'defaultSysVars' slice with the default value. - 4. Add a field in `SessionVars`. - 5. Update the `NewSessionVars` function to set the field to its default value. - 6. Update the `variable.SetSessionSystemVar` function to use the new value when SET statement is executed. - 7. If it is a global variable, add it in `session.loadCommonGlobalVarsSQL`. - 8. Use this variable to control the behavior in code. -*/ - -// TiDB system variable names that only in session scope. -const ( - // tidb_snapshot is used for reading history data, the default value is empty string. - // The value can be a datetime string like '2017-11-11 20:20:20' or a tso string. When this variable is set, the session reads history data of that time. - TiDBSnapshot = "tidb_snapshot" - - // tidb_import_data is used for loading data from a dump file, to speed up the loading process. - // When the value is set to true, unique index constraint is not checked. - TiDBImportingData = "tidb_import_data" - - // tidb_opt_agg_push_down is used to enable/disable the optimizer rule of aggregation push down. - TiDBOptAggPushDown = "tidb_opt_agg_push_down" - - // Auto analyze will run if (table modify count)/(table row count) is greater than this value. - TiDBAutoAnalyzeRatio = "tidb_auto_analyze_ratio" - - // tidb_checksum_table_concurrency is used to speed up the ADMIN CHECKSUM TABLE - // statement, when a table has multiple indices, those indices can be - // scanned concurrently, with the cost of higher system performance impact. - TiDBChecksumTableConcurrency = "tidb_checksum_table_concurrency" - - // TiDBCurrentTS is used to get the current transaction timestamp. - // It is read-only. - TiDBCurrentTS = "tidb_current_ts" - - // tidb_config is a read-only variable that shows the config of the current server. - TiDBConfig = "tidb_config" - - // tidb_batch_insert is used to enable/disable auto-split insert data. If set this option on, insert executor will automatically - // insert data into multiple batches and use a single txn for each batch. This will be helpful when inserting large data. - TiDBBatchInsert = "tidb_batch_insert" - - // tidb_batch_delete is used to enable/disable auto-split delete data. If set this option on, delete executor will automatically - // split data into multiple batches and use a single txn for each batch. This will be helpful when deleting large data. - TiDBBatchDelete = "tidb_batch_delete" - - // tidb_dml_batch_size is used to split the insert/delete data into small batches. - // It only takes effort when tidb_batch_insert/tidb_batch_delete is on. - // Its default value is 20000. When the row size is large, 20k rows could be larger than 100MB. - // User could change it to a smaller one to avoid breaking the transaction size limitation. - TiDBDMLBatchSize = "tidb_dml_batch_size" - - // The following session variables controls the memory quota during query execution. - // "tidb_mem_quota_query": control the memory quota of a query. - // "tidb_mem_quota_hashjoin": control the memory quota of "HashJoinExec". - // "tidb_mem_quota_mergejoin": control the memory quota of "MergeJoinExec". - // "tidb_mem_quota_sort": control the memory quota of "SortExec". - // "tidb_mem_quota_topn": control the memory quota of "TopNExec". - // "tidb_mem_quota_indexlookupreader": control the memory quota of "IndexLookUpExecutor". - // "tidb_mem_quota_indexlookupjoin": control the memory quota of "IndexLookUpJoin". - // "tidb_mem_quota_nestedloopapply": control the memory quota of "NestedLoopApplyExec". - TIDBMemQuotaQuery = "tidb_mem_quota_query" // Bytes. - TIDBMemQuotaHashJoin = "tidb_mem_quota_hashjoin" // Bytes. - TIDBMemQuotaMergeJoin = "tidb_mem_quota_mergejoin" // Bytes. - TIDBMemQuotaSort = "tidb_mem_quota_sort" // Bytes. - TIDBMemQuotaTopn = "tidb_mem_quota_topn" // Bytes. - TIDBMemQuotaIndexLookupReader = "tidb_mem_quota_indexlookupreader" // Bytes. - TIDBMemQuotaIndexLookupJoin = "tidb_mem_quota_indexlookupjoin" // Bytes. - TIDBMemQuotaNestedLoopApply = "tidb_mem_quota_nestedloopapply" // Bytes. - - // tidb_general_log is used to log every query in the server in info level. - TiDBGeneralLog = "tidb_general_log" - - // tidb_retry_limit is the maximun number of retries when committing a transaction. - TiDBRetryLimit = "tidb_retry_limit" - - // tidb_disable_txn_auto_retry disables transaction auto retry. - TiDBDisableTxnAutoRetry = "tidb_disable_txn_auto_retry" - - // tidb_enable_streaming enables TiDB to use streaming API for coprocessor requests. - TiDBEnableStreaming = "tidb_enable_streaming" - - // tidb_optimizer_selectivity_level is used to control the selectivity estimation level. - TiDBOptimizerSelectivityLevel = "tidb_optimizer_selectivity_level" - - // tidb_enable_table_partition is used to enable table partition feature. - TiDBEnableTablePartition = "tidb_enable_table_partition" -) - -// TiDB system variable names that both in session and global scope. -const ( - // tidb_build_stats_concurrency is used to speed up the ANALYZE statement, when a table has multiple indices, - // those indices can be scanned concurrently, with the cost of higher system performance impact. - TiDBBuildStatsConcurrency = "tidb_build_stats_concurrency" - - // tidb_distsql_scan_concurrency is used to set the concurrency of a distsql scan task. - // A distsql scan task can be a table scan or a index scan, which may be distributed to many TiKV nodes. - // Higher concurrency may reduce latency, but with the cost of higher memory usage and system performance impact. - // If the query has a LIMIT clause, high concurrency makes the system do much more work than needed. - TiDBDistSQLScanConcurrency = "tidb_distsql_scan_concurrency" - - // tidb_opt_insubquery_unfold is used to enable/disable the optimizer rule of in subquery unfold. - TiDBOptInSubqUnFolding = "tidb_opt_insubquery_unfold" - - // tidb_index_join_batch_size is used to set the batch size of a index lookup join. - // The index lookup join fetches batches of data from outer executor and constructs ranges for inner executor. - // This value controls how much of data in a batch to do the index join. - // Large value may reduce the latency but consumes more system resource. - TiDBIndexJoinBatchSize = "tidb_index_join_batch_size" - - // tidb_index_lookup_size is used for index lookup executor. - // The index lookup executor first scan a batch of handles from a index, then use those handles to lookup the table - // rows, this value controls how much of handles in a batch to do a lookup task. - // Small value sends more RPCs to TiKV, consume more system resource. - // Large value may do more work than needed if the query has a limit. - TiDBIndexLookupSize = "tidb_index_lookup_size" - - // tidb_index_lookup_concurrency is used for index lookup executor. - // A lookup task may have 'tidb_index_lookup_size' of handles at maximun, the handles may be distributed - // in many TiKV nodes, we executes multiple concurrent index lookup tasks concurrently to reduce the time - // waiting for a task to finish. - // Set this value higher may reduce the latency but consumes more system resource. - TiDBIndexLookupConcurrency = "tidb_index_lookup_concurrency" - - // tidb_index_lookup_join_concurrency is used for index lookup join executor. - // IndexLookUpJoin starts "tidb_index_lookup_join_concurrency" inner workers - // to fetch inner rows and join the matched (outer, inner) row pairs. - TiDBIndexLookupJoinConcurrency = "tidb_index_lookup_join_concurrency" - - // tidb_index_serial_scan_concurrency is used for controlling the concurrency of index scan operation - // when we need to keep the data output order the same as the order of index data. - TiDBIndexSerialScanConcurrency = "tidb_index_serial_scan_concurrency" - - // tidb_max_chunk_capacity is used to control the max chunk size during query execution. - TiDBMaxChunkSize = "tidb_max_chunk_size" - - // tidb_skip_utf8_check skips the UTF8 validate process, validate UTF8 has performance cost, if we can make sure - // the input string values are valid, we can skip the check. - TiDBSkipUTF8Check = "tidb_skip_utf8_check" - - // tidb_hash_join_concurrency is used for hash join executor. - // The hash join outer executor starts multiple concurrent join workers to probe the hash table. - TiDBHashJoinConcurrency = "tidb_hash_join_concurrency" - - // tidb_projection_concurrency is used for projection operator. - // This variable controls the worker number of projection operator. - TiDBProjectionConcurrency = "tidb_projection_concurrency" - - // tidb_hashagg_partial_concurrency is used for hash agg executor. - // The hash agg executor starts multiple concurrent partial workers to do partial aggregate works. - TiDBHashAggPartialConcurrency = "tidb_hashagg_partial_concurrency" - - // tidb_hashagg_final_concurrency is used for hash agg executor. - // The hash agg executor starts multiple concurrent final workers to do final aggregate works. - TiDBHashAggFinalConcurrency = "tidb_hashagg_final_concurrency" - - // tidb_backoff_lock_fast is used for tikv backoff base time in milliseconds. - TiDBBackoffLockFast = "tidb_backoff_lock_fast" - - // tidb_ddl_reorg_worker_cnt defines the count of ddl reorg workers. - TiDBDDLReorgWorkerCount = "tidb_ddl_reorg_worker_cnt" -) - -// Default TiDB system variable values. -const ( - DefIndexLookupConcurrency = 4 - DefIndexLookupJoinConcurrency = 4 - DefIndexSerialScanConcurrency = 1 - DefIndexJoinBatchSize = 25000 - DefIndexLookupSize = 20000 - DefDistSQLScanConcurrency = 15 - DefBuildStatsConcurrency = 4 - DefAutoAnalyzeRatio = 0.5 - DefChecksumTableConcurrency = 4 - DefSkipUTF8Check = false - DefOptAggPushDown = false - DefOptInSubqUnfolding = false - DefBatchInsert = false - DefBatchDelete = false - DefCurretTS = 0 - DefMaxChunkSize = 1024 - DefDMLBatchSize = 20000 - DefTiDBMemQuotaHashJoin = 32 << 30 // 32GB. - DefTiDBMemQuotaMergeJoin = 32 << 30 // 32GB. - DefTiDBMemQuotaSort = 32 << 30 // 32GB. - DefTiDBMemQuotaTopn = 32 << 30 // 32GB. - DefTiDBMemQuotaIndexLookupReader = 32 << 30 // 32GB. - DefTiDBMemQuotaIndexLookupJoin = 32 << 30 // 32GB. - DefTiDBMemQuotaNestedLoopApply = 32 << 30 // 32GB. - DefTiDBGeneralLog = 0 - DefTiDBRetryLimit = 10 - DefTiDBDisableTxnAutoRetry = false - DefTiDBHashJoinConcurrency = 5 - DefTiDBProjectionConcurrency = 4 - DefTiDBOptimizerSelectivityLevel = 0 - DefTiDBDDLReorgWorkerCount = 16 - DefTiDBHashAggPartialConcurrency = 4 - DefTiDBHashAggFinalConcurrency = 4 -) - -// Process global variables. -var ( - ProcessGeneralLog uint32 - ddlReorgWorkerCounter int32 = DefTiDBDDLReorgWorkerCount - maxDDLReorgWorkerCount int32 = 128 -) diff --git a/vendor/github.com/pingcap/tidb/sessionctx/variable/varsutil.go b/vendor/github.com/pingcap/tidb/sessionctx/variable/varsutil.go deleted file mode 100644 index c94b093..0000000 --- a/vendor/github.com/pingcap/tidb/sessionctx/variable/varsutil.go +++ /dev/null @@ -1,213 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package variable - -import ( - "encoding/json" - "fmt" - "strconv" - "strings" - "sync/atomic" - "time" - - "github.com/juju/errors" - "github.com/pingcap/tidb/config" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/types" -) - -// SetDDLReorgWorkerCounter sets ddlReorgWorkerCounter count. -// Max worker count is maxDDLReorgWorkerCount. -func SetDDLReorgWorkerCounter(cnt int32) { - if cnt > maxDDLReorgWorkerCount { - cnt = maxDDLReorgWorkerCount - } - atomic.StoreInt32(&ddlReorgWorkerCounter, cnt) -} - -// GetDDLReorgWorkerCounter gets ddlReorgWorkerCounter. -func GetDDLReorgWorkerCounter() int32 { - return atomic.LoadInt32(&ddlReorgWorkerCounter) -} - -// GetSessionSystemVar gets a system variable. -// If it is a session only variable, use the default value defined in code. -// Returns error if there is no such variable. -func GetSessionSystemVar(s *SessionVars, key string) (string, error) { - key = strings.ToLower(key) - gVal, ok, err := GetSessionOnlySysVars(s, key) - if err != nil || ok { - return gVal, errors.Trace(err) - } - gVal, err = s.GlobalVarsAccessor.GetGlobalSysVar(key) - if err != nil { - return "", errors.Trace(err) - } - s.systems[key] = gVal - return gVal, nil -} - -// GetSessionOnlySysVars get the default value defined in code for session only variable. -// The return bool value indicates whether it's a session only variable. -func GetSessionOnlySysVars(s *SessionVars, key string) (string, bool, error) { - sysVar := SysVars[key] - if sysVar == nil { - return "", false, UnknownSystemVar.GenByArgs(key) - } - // For virtual system variables: - switch sysVar.Name { - case TiDBCurrentTS: - return fmt.Sprintf("%d", s.TxnCtx.StartTS), true, nil - case TiDBGeneralLog: - return fmt.Sprintf("%d", atomic.LoadUint32(&ProcessGeneralLog)), true, nil - case TiDBConfig: - conf := config.GetGlobalConfig() - j, err := json.MarshalIndent(conf, "", "\t") - if err != nil { - return "", false, errors.Trace(err) - } - return string(j), true, nil - } - sVal, ok := s.systems[key] - if ok { - return sVal, true, nil - } - if sysVar.Scope&ScopeGlobal == 0 { - // None-Global variable can use pre-defined default value. - return sysVar.Value, true, nil - } - return "", false, nil -} - -// GetGlobalSystemVar gets a global system variable. -func GetGlobalSystemVar(s *SessionVars, key string) (string, error) { - key = strings.ToLower(key) - gVal, ok, err := GetScopeNoneSystemVar(key) - if err != nil || ok { - return gVal, errors.Trace(err) - } - gVal, err = s.GlobalVarsAccessor.GetGlobalSysVar(key) - if err != nil { - return "", errors.Trace(err) - } - return gVal, nil -} - -// GetScopeNoneSystemVar checks the validation of `key`, -// and return the default value if its scope is `ScopeNone`. -func GetScopeNoneSystemVar(key string) (string, bool, error) { - sysVar := SysVars[key] - if sysVar == nil { - return "", false, UnknownSystemVar.GenByArgs(key) - } - if sysVar.Scope == ScopeNone { - return sysVar.Value, true, nil - } - return "", false, nil -} - -// epochShiftBits is used to reserve logical part of the timestamp. -const epochShiftBits = 18 - -// SetSessionSystemVar sets system variable and updates SessionVars states. -func SetSessionSystemVar(vars *SessionVars, name string, value types.Datum) error { - name = strings.ToLower(name) - sysVar := SysVars[name] - if sysVar == nil { - return UnknownSystemVar - } - if value.IsNull() { - return vars.deleteSystemVar(name) - } - sVal, err := value.ToString() - if err != nil { - return errors.Trace(err) - } - return vars.SetSystemVar(name, sVal) -} - -// TiDBOptOn could be used for all tidb session variable options, we use "ON"/1 to turn on those options. -func TiDBOptOn(opt string) bool { - return strings.EqualFold(opt, "ON") || opt == "1" -} - -func tidbOptPositiveInt32(opt string, defaultVal int) int { - val, err := strconv.Atoi(opt) - if err != nil || val <= 0 { - return defaultVal - } - return val -} - -func tidbOptInt64(opt string, defaultVal int64) int64 { - val, err := strconv.ParseInt(opt, 10, 64) - if err != nil { - return defaultVal - } - return val -} - -func parseTimeZone(s string) (*time.Location, error) { - if s == "SYSTEM" { - // TODO: Support global time_zone variable, it should be set to global time_zone value. - return time.Local, nil - } - - loc, err := time.LoadLocation(s) - if err == nil { - return loc, nil - } - - // The value can be given as a string indicating an offset from UTC, such as '+10:00' or '-6:00'. - if strings.HasPrefix(s, "+") || strings.HasPrefix(s, "-") { - d, err := types.ParseDuration(s[1:], 0) - if err == nil { - ofst := int(d.Duration / time.Second) - if s[0] == '-' { - ofst = -ofst - } - return time.FixedZone("UTC", ofst), nil - } - } - - return nil, ErrUnknownTimeZone.GenByArgs(s) -} - -func setSnapshotTS(s *SessionVars, sVal string) error { - if sVal == "" { - s.SnapshotTS = 0 - return nil - } - - if tso, err := strconv.ParseUint(sVal, 10, 64); err == nil { - s.SnapshotTS = tso - return nil - } - - t, err := types.ParseTime(s.StmtCtx, sVal, mysql.TypeTimestamp, types.MaxFsp) - if err != nil { - return errors.Trace(err) - } - - // TODO: Consider time_zone variable. - t1, err := t.Time.GoTime(time.Local) - s.SnapshotTS = GoTimeToTS(t1) - return errors.Trace(err) -} - -// GoTimeToTS converts a Go time to uint64 timestamp. -func GoTimeToTS(t time.Time) uint64 { - ts := (t.UnixNano() / int64(time.Millisecond)) << epochShiftBits - return uint64(ts) -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/2pc.go b/vendor/github.com/pingcap/tidb/store/tikv/2pc.go deleted file mode 100644 index 3d73694..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/2pc.go +++ /dev/null @@ -1,730 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package tikv - -import ( - "bytes" - "math" - "sync" - "sync/atomic" - "time" - - "github.com/juju/errors" - "github.com/opentracing/opentracing-go" - pb "github.com/pingcap/kvproto/pkg/kvrpcpb" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/sessionctx/binloginfo" - "github.com/pingcap/tidb/store/tikv/tikvrpc" - "github.com/pingcap/tidb/tablecodec" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/util/goroutine_pool" - binlog "github.com/pingcap/tipb/go-binlog" - log "github.com/sirupsen/logrus" - "golang.org/x/net/context" -) - -type twoPhaseCommitAction int - -const ( - actionPrewrite twoPhaseCommitAction = 1 - actionCommit twoPhaseCommitAction = 2 - actionCleanup twoPhaseCommitAction = 3 -) - -var twoPhaseCommitGP = gp.New(3 * time.Minute) - -func (ca twoPhaseCommitAction) String() string { - switch ca { - case actionPrewrite: - return "prewrite" - case actionCommit: - return "commit" - case actionCleanup: - return "cleanup" - } - return "unknown" -} - -// MetricsTag returns detail tag for metrics. -func (ca twoPhaseCommitAction) MetricsTag() string { - return "2pc_" + ca.String() -} - -// twoPhaseCommitter executes a two-phase commit protocol. -type twoPhaseCommitter struct { - store *tikvStore - txn *tikvTxn - startTS uint64 - keys [][]byte - mutations map[string]*pb.Mutation - lockTTL uint64 - commitTS uint64 - mu struct { - sync.RWMutex - committed bool - undeterminedErr error // undeterminedErr saves the rpc error we encounter when commit primary key. - } - priority pb.CommandPri - syncLog bool - connID uint64 // connID is used for log. - cleanWg sync.WaitGroup -} - -// newTwoPhaseCommitter creates a twoPhaseCommitter. -func newTwoPhaseCommitter(txn *tikvTxn, connID uint64) (*twoPhaseCommitter, error) { - var ( - keys [][]byte - size int - putCnt int - delCnt int - lockCnt int - ) - mutations := make(map[string]*pb.Mutation) - err := txn.us.WalkBuffer(func(k kv.Key, v []byte) error { - if len(v) > 0 { - mutations[string(k)] = &pb.Mutation{ - Op: pb.Op_Put, - Key: k, - Value: v, - } - putCnt++ - } else { - mutations[string(k)] = &pb.Mutation{ - Op: pb.Op_Del, - Key: k, - } - delCnt++ - } - keys = append(keys, k) - entrySize := len(k) + len(v) - if entrySize > kv.TxnEntrySizeLimit { - return kv.ErrEntryTooLarge - } - size += entrySize - return nil - }) - if err != nil { - return nil, errors.Trace(err) - } - for _, lockKey := range txn.lockKeys { - if _, ok := mutations[string(lockKey)]; !ok { - mutations[string(lockKey)] = &pb.Mutation{ - Op: pb.Op_Lock, - Key: lockKey, - } - lockCnt++ - keys = append(keys, lockKey) - size += len(lockKey) - } - } - if len(keys) == 0 { - return nil, nil - } - entrylimit := atomic.LoadUint64(&kv.TxnEntryCountLimit) - if len(keys) > int(entrylimit) || size > kv.TxnTotalSizeLimit { - return nil, kv.ErrTxnTooLarge - } - const logEntryCount = 10000 - const logSize = 4 * 1024 * 1024 // 4MB - if len(keys) > logEntryCount || size > logSize { - tableID := tablecodec.DecodeTableID(keys[0]) - log.Infof("[BIG_TXN] [con:%d] table id:%d size:%d, keys:%d, puts:%d, dels:%d, locks:%d, startTS:%d", - connID, tableID, size, len(keys), putCnt, delCnt, lockCnt, txn.startTS) - } - - metrics.TiKVTxnWriteKVCountHistogram.Observe(float64(len(keys))) - metrics.TiKVTxnWriteSizeHistogram.Observe(float64(size)) - return &twoPhaseCommitter{ - store: txn.store, - txn: txn, - startTS: txn.StartTS(), - keys: keys, - mutations: mutations, - lockTTL: txnLockTTL(txn.startTime, size), - priority: getTxnPriority(txn), - syncLog: getTxnSyncLog(txn), - connID: connID, - }, nil -} - -func (c *twoPhaseCommitter) primary() []byte { - return c.keys[0] -} - -const bytesPerMiB = 1024 * 1024 - -func txnLockTTL(startTime time.Time, txnSize int) uint64 { - // Increase lockTTL for large transactions. - // The formula is `ttl = ttlFactor * sqrt(sizeInMiB)`. - // When writeSize is less than 256KB, the base ttl is defaultTTL (3s); - // When writeSize is 1MiB, 100MiB, or 400MiB, ttl is 6s, 60s, 120s correspondingly; - lockTTL := defaultLockTTL - if txnSize >= txnCommitBatchSize { - sizeMiB := float64(txnSize) / bytesPerMiB - lockTTL = uint64(float64(ttlFactor) * math.Sqrt(sizeMiB)) - if lockTTL < defaultLockTTL { - lockTTL = defaultLockTTL - } - if lockTTL > maxLockTTL { - lockTTL = maxLockTTL - } - } - - // Increase lockTTL by the transaction's read time. - // When resolving a lock, we compare current ts and startTS+lockTTL to decide whether to clean up. If a txn - // takes a long time to read, increasing its TTL will help to prevent it from been aborted soon after prewrite. - elapsed := time.Since(startTime) / time.Millisecond - return lockTTL + uint64(elapsed) -} - -// doActionOnKeys groups keys into primary batch and secondary batches, if primary batch exists in the key, -// it does action on primary batch first, then on secondary batches. If action is commit, secondary batches -// is done in background goroutine. -func (c *twoPhaseCommitter) doActionOnKeys(bo *Backoffer, action twoPhaseCommitAction, keys [][]byte) error { - if len(keys) == 0 { - return nil - } - groups, firstRegion, err := c.store.regionCache.GroupKeysByRegion(bo, keys) - if err != nil { - return errors.Trace(err) - } - - metrics.TiKVTxnRegionsNumHistogram.WithLabelValues(action.MetricsTag()).Observe(float64(len(groups))) - - var batches []batchKeys - var sizeFunc = c.keySize - if action == actionPrewrite { - sizeFunc = c.keyValueSize - } - // Make sure the group that contains primary key goes first. - batches = appendBatchBySize(batches, firstRegion, groups[firstRegion], sizeFunc, txnCommitBatchSize) - delete(groups, firstRegion) - for id, g := range groups { - batches = appendBatchBySize(batches, id, g, sizeFunc, txnCommitBatchSize) - } - - firstIsPrimary := bytes.Equal(keys[0], c.primary()) - if firstIsPrimary && (action == actionCommit || action == actionCleanup) { - // primary should be committed/cleanup first - err = c.doActionOnBatches(bo, action, batches[:1]) - if err != nil { - return errors.Trace(err) - } - batches = batches[1:] - } - if action == actionCommit { - // Commit secondary batches in background goroutine to reduce latency. - twoPhaseCommitGP.Go(func() { - e := c.doActionOnBatches(bo, action, batches) - if e != nil { - log.Debugf("[con:%d] 2PC async doActionOnBatches %s err: %v", c.connID, action, e) - metrics.TiKVSecondaryLockCleanupFailureCounter.WithLabelValues("commit").Inc() - } - }) - } else { - err = c.doActionOnBatches(bo, action, batches) - } - return errors.Trace(err) -} - -// doActionOnBatches does action to batches in parallel. -func (c *twoPhaseCommitter) doActionOnBatches(bo *Backoffer, action twoPhaseCommitAction, batches []batchKeys) error { - if len(batches) == 0 { - return nil - } - var singleBatchActionFunc func(bo *Backoffer, batch batchKeys) error - switch action { - case actionPrewrite: - singleBatchActionFunc = c.prewriteSingleBatch - case actionCommit: - singleBatchActionFunc = c.commitSingleBatch - case actionCleanup: - singleBatchActionFunc = c.cleanupSingleBatch - } - if len(batches) == 1 { - e := singleBatchActionFunc(bo, batches[0]) - if e != nil { - log.Debugf("[con:%d] 2PC doActionOnBatches %s failed: %v, tid: %d", c.connID, action, e, c.startTS) - } - return errors.Trace(e) - } - - // For prewrite, stop sending other requests after receiving first error. - backoffer := bo - var cancel context.CancelFunc - if action == actionPrewrite { - backoffer, cancel = bo.Fork() - } - - // Concurrently do the work for each batch. - ch := make(chan error, len(batches)) - for _, batch1 := range batches { - - batch := batch1 - twoPhaseCommitGP.Go(func() { - if action == actionCommit { - // Because the secondary batches of the commit actions are implemented to be - // committed asynchronously in background goroutines, we should not - // fork a child context and call cancel() while the foreground goroutine exits. - // Otherwise the background goroutines will be canceled execeptionally. - // Here we makes a new clone of the original backoffer for this goroutine - // exclusively to avoid the data race when using the same backoffer - // in concurrent goroutines. - singleBatchBackoffer := backoffer.Clone() - ch <- singleBatchActionFunc(singleBatchBackoffer, batch) - } else { - singleBatchBackoffer, singleBatchCancel := backoffer.Fork() - defer singleBatchCancel() - ch <- singleBatchActionFunc(singleBatchBackoffer, batch) - } - }) - } - var err error - for i := 0; i < len(batches); i++ { - if e := <-ch; e != nil { - log.Debugf("[con:%d] 2PC doActionOnBatches %s failed: %v, tid: %d", c.connID, action, e, c.startTS) - // Cancel other requests and return the first error. - if cancel != nil { - log.Debugf("[con:%d] 2PC doActionOnBatches %s to cancel other actions, tid: %d", c.connID, action, c.startTS) - cancel() - } - if err == nil { - err = e - } - } - } - return errors.Trace(err) -} - -func (c *twoPhaseCommitter) keyValueSize(key []byte) int { - size := len(key) - if mutation := c.mutations[string(key)]; mutation != nil { - size += len(mutation.Value) - } - return size -} - -func (c *twoPhaseCommitter) keySize(key []byte) int { - return len(key) -} - -func (c *twoPhaseCommitter) prewriteSingleBatch(bo *Backoffer, batch batchKeys) error { - mutations := make([]*pb.Mutation, len(batch.keys)) - for i, k := range batch.keys { - mutations[i] = c.mutations[string(k)] - } - - req := &tikvrpc.Request{ - Type: tikvrpc.CmdPrewrite, - Prewrite: &pb.PrewriteRequest{ - Mutations: mutations, - PrimaryLock: c.primary(), - StartVersion: c.startTS, - LockTtl: c.lockTTL, - }, - Context: pb.Context{ - Priority: c.priority, - SyncLog: c.syncLog, - }, - } - for { - resp, err := c.store.SendReq(bo, req, batch.region, readTimeoutShort) - if err != nil { - return errors.Trace(err) - } - regionErr, err := resp.GetRegionError() - if err != nil { - return errors.Trace(err) - } - if regionErr != nil { - err = bo.Backoff(BoRegionMiss, errors.New(regionErr.String())) - if err != nil { - return errors.Trace(err) - } - err = c.prewriteKeys(bo, batch.keys) - return errors.Trace(err) - } - prewriteResp := resp.Prewrite - if prewriteResp == nil { - return errors.Trace(ErrBodyMissing) - } - keyErrs := prewriteResp.GetErrors() - if len(keyErrs) == 0 { - return nil - } - var locks []*Lock - for _, keyErr := range keyErrs { - lock, err1 := extractLockFromKeyErr(keyErr) - if err1 != nil { - return errors.Trace(err1) - } - log.Debugf("[con:%d] 2PC prewrite encounters lock: %v", c.connID, lock) - locks = append(locks, lock) - } - ok, err := c.store.lockResolver.ResolveLocks(bo, locks) - if err != nil { - return errors.Trace(err) - } - if !ok { - err = bo.Backoff(BoTxnLock, errors.Errorf("2PC prewrite lockedKeys: %d", len(locks))) - if err != nil { - return errors.Trace(err) - } - } - } -} - -func getTxnPriority(txn *tikvTxn) pb.CommandPri { - if pri := txn.us.GetOption(kv.Priority); pri != nil { - return kvPriorityToCommandPri(pri.(int)) - } - return pb.CommandPri_Normal -} - -func getTxnSyncLog(txn *tikvTxn) bool { - if syncOption := txn.us.GetOption(kv.SyncLog); syncOption != nil { - return syncOption.(bool) - } - return false -} - -func kvPriorityToCommandPri(pri int) pb.CommandPri { - switch pri { - case kv.PriorityLow: - return pb.CommandPri_Low - case kv.PriorityHigh: - return pb.CommandPri_High - } - return pb.CommandPri_Normal -} - -func (c *twoPhaseCommitter) setUndeterminedErr(err error) { - c.mu.Lock() - defer c.mu.Unlock() - c.mu.undeterminedErr = err -} - -func (c *twoPhaseCommitter) getUndeterminedErr() error { - c.mu.RLock() - defer c.mu.RUnlock() - return c.mu.undeterminedErr -} - -func (c *twoPhaseCommitter) commitSingleBatch(bo *Backoffer, batch batchKeys) error { - req := &tikvrpc.Request{ - Type: tikvrpc.CmdCommit, - Commit: &pb.CommitRequest{ - StartVersion: c.startTS, - Keys: batch.keys, - CommitVersion: c.commitTS, - }, - Context: pb.Context{ - Priority: c.priority, - SyncLog: c.syncLog, - }, - } - req.Context.Priority = c.priority - - sender := NewRegionRequestSender(c.store.regionCache, c.store.client) - resp, err := sender.SendReq(bo, req, batch.region, readTimeoutShort) - - // If we fail to receive response for the request that commits primary key, it will be undetermined whether this - // transaction has been successfully committed. - // Under this circumstance, we can not declare the commit is complete (may lead to data lost), nor can we throw - // an error (may lead to the duplicated key error when upper level restarts the transaction). Currently the best - // solution is to populate this error and let upper layer drop the connection to the corresponding mysql client. - isPrimary := bytes.Equal(batch.keys[0], c.primary()) - if isPrimary && sender.rpcError != nil { - c.setUndeterminedErr(errors.Trace(sender.rpcError)) - } - - if err != nil { - return errors.Trace(err) - } - regionErr, err := resp.GetRegionError() - if err != nil { - return errors.Trace(err) - } - if regionErr != nil { - err = bo.Backoff(BoRegionMiss, errors.New(regionErr.String())) - if err != nil { - return errors.Trace(err) - } - // re-split keys and commit again. - err = c.commitKeys(bo, batch.keys) - return errors.Trace(err) - } - commitResp := resp.Commit - if commitResp == nil { - return errors.Trace(ErrBodyMissing) - } - // Here we can make sure tikv has processed the commit primary key request. So - // we can clean undetermined error. - if isPrimary { - c.setUndeterminedErr(nil) - } - if keyErr := commitResp.GetError(); keyErr != nil { - c.mu.RLock() - defer c.mu.RUnlock() - err = errors.Errorf("[con:%d] 2PC commit failed: %v", c.connID, keyErr.String()) - if c.mu.committed { - // No secondary key could be rolled back after it's primary key is committed. - // There must be a serious bug somewhere. - log.Errorf("2PC failed commit key after primary key committed: %v, tid: %d", err, c.startTS) - return errors.Trace(err) - } - // The transaction maybe rolled back by concurrent transactions. - log.Debugf("2PC failed commit primary key: %v, retry later, tid: %d", err, c.startTS) - return errors.Annotate(err, txnRetryableMark) - } - - c.mu.Lock() - defer c.mu.Unlock() - // Group that contains primary key is always the first. - // We mark transaction's status committed when we receive the first success response. - c.mu.committed = true - return nil -} - -func (c *twoPhaseCommitter) cleanupSingleBatch(bo *Backoffer, batch batchKeys) error { - req := &tikvrpc.Request{ - Type: tikvrpc.CmdBatchRollback, - BatchRollback: &pb.BatchRollbackRequest{ - Keys: batch.keys, - StartVersion: c.startTS, - }, - Context: pb.Context{ - Priority: c.priority, - SyncLog: c.syncLog, - }, - } - resp, err := c.store.SendReq(bo, req, batch.region, readTimeoutShort) - if err != nil { - return errors.Trace(err) - } - regionErr, err := resp.GetRegionError() - if err != nil { - return errors.Trace(err) - } - if regionErr != nil { - err = bo.Backoff(BoRegionMiss, errors.New(regionErr.String())) - if err != nil { - return errors.Trace(err) - } - err = c.cleanupKeys(bo, batch.keys) - return errors.Trace(err) - } - if keyErr := resp.BatchRollback.GetError(); keyErr != nil { - err = errors.Errorf("[con:%d] 2PC cleanup failed: %s", c.connID, keyErr) - log.Debugf("2PC failed cleanup key: %v, tid: %d", err, c.startTS) - return errors.Trace(err) - } - return nil -} - -func (c *twoPhaseCommitter) prewriteKeys(bo *Backoffer, keys [][]byte) error { - return c.doActionOnKeys(bo, actionPrewrite, keys) -} - -func (c *twoPhaseCommitter) commitKeys(bo *Backoffer, keys [][]byte) error { - return c.doActionOnKeys(bo, actionCommit, keys) -} - -func (c *twoPhaseCommitter) cleanupKeys(bo *Backoffer, keys [][]byte) error { - return c.doActionOnKeys(bo, actionCleanup, keys) -} - -// The max time a Txn may use (in ms) from its startTS to commitTS. -// We use it to guarantee GC worker will not influence any active txn. The value -// should be less than `gcRunInterval`. -const maxTxnTimeUse = 590000 - -func (c *twoPhaseCommitter) executeAndWriteFinishBinlog(ctx context.Context) error { - err := c.execute(ctx) - if err != nil { - c.writeFinishBinlog(binlog.BinlogType_Rollback, 0) - } else { - c.txn.commitTS = c.commitTS - c.writeFinishBinlog(binlog.BinlogType_Commit, int64(c.commitTS)) - } - return errors.Trace(err) -} - -// execute executes the two-phase commit protocol. -func (c *twoPhaseCommitter) execute(ctx context.Context) error { - defer func() { - // Always clean up all written keys if the txn does not commit. - c.mu.RLock() - committed := c.mu.committed - undetermined := c.mu.undeterminedErr != nil - c.mu.RUnlock() - if !committed && !undetermined { - c.cleanWg.Add(1) - twoPhaseCommitGP.Go(func() { - err := c.cleanupKeys(NewBackoffer(context.Background(), cleanupMaxBackoff).WithVars(c.txn.vars), c.keys) - if err != nil { - metrics.TiKVSecondaryLockCleanupFailureCounter.WithLabelValues("rollback").Inc() - log.Infof("[con:%d] 2PC cleanup err: %v, tid: %d", c.connID, err, c.startTS) - } else { - log.Infof("[con:%d] 2PC clean up done, tid: %d", c.connID, c.startTS) - } - c.cleanWg.Done() - }) - } - }() - - span := opentracing.SpanFromContext(ctx) - if span != nil { - span = opentracing.StartSpan("twoPhaseCommit.execute", opentracing.ChildOf(span.Context())) - } else { - // If we lost the trace information, make a new one for 2PC commit. - span = opentracing.StartSpan("twoPhaseCommit.execute") - } - defer span.Finish() - - // I'm not sure is it safe to cancel 2pc commit process at any time, - // So use a new Background() context instead of inherit the ctx, this is by design, - // to avoid the cancel signal from parent context. - ctx = opentracing.ContextWithSpan(context.Background(), span) - - binlogChan := c.prewriteBinlog() - err := c.prewriteKeys(NewBackoffer(ctx, prewriteMaxBackoff).WithVars(c.txn.vars), c.keys) - if binlogChan != nil { - binlogErr := <-binlogChan - if binlogErr != nil { - return errors.Trace(binlogErr) - } - } - if err != nil { - log.Debugf("[con:%d] 2PC failed on prewrite: %v, tid: %d", c.connID, err, c.startTS) - return errors.Trace(err) - } - - commitTS, err := c.store.getTimestampWithRetry(NewBackoffer(ctx, tsoMaxBackoff).WithVars(c.txn.vars)) - if err != nil { - log.Warnf("[con:%d] 2PC get commitTS failed: %v, tid: %d", c.connID, err, c.startTS) - return errors.Trace(err) - } - - // check commitTS - if commitTS <= c.startTS { - err = errors.Errorf("[con:%d] Invalid transaction tso with start_ts=%v while commit_ts=%v", - c.connID, c.startTS, commitTS) - log.Error(err) - return errors.Trace(err) - } - c.commitTS = commitTS - if err = c.checkSchemaValid(); err != nil { - return errors.Trace(err) - } - - if c.store.oracle.IsExpired(c.startTS, maxTxnTimeUse) { - err = errors.Errorf("[con:%d] txn takes too much time, start: %d, commit: %d", c.connID, c.startTS, c.commitTS) - return errors.Annotate(err, txnRetryableMark) - } - - err = c.commitKeys(NewBackoffer(ctx, CommitMaxBackoff).WithVars(c.txn.vars), c.keys) - if err != nil { - if undeterminedErr := c.getUndeterminedErr(); undeterminedErr != nil { - log.Warnf("[con:%d] 2PC commit result undetermined, err: %v, rpcErr: %v, tid: %v", c.connID, err, undeterminedErr, c.startTS) - err = errors.Wrap(err, terror.ErrResultUndetermined) - } - if !c.mu.committed { - log.Debugf("[con:%d] 2PC failed on commit: %v, tid: %d", c.connID, err, c.startTS) - return errors.Trace(err) - } - log.Debugf("[con:%d] 2PC succeed with error: %v, tid: %d", c.connID, err, c.startTS) - } - return nil -} - -type schemaLeaseChecker interface { - Check(txnTS uint64) error -} - -func (c *twoPhaseCommitter) checkSchemaValid() error { - checker, ok := c.txn.us.GetOption(kv.SchemaLeaseChecker).(schemaLeaseChecker) - if ok { - err := checker.Check(c.commitTS) - if err != nil { - return errors.Trace(err) - } - } - return nil -} - -func (c *twoPhaseCommitter) prewriteBinlog() chan error { - if !c.shouldWriteBinlog() { - return nil - } - ch := make(chan error, 1) - go func() { - binInfo := c.txn.us.GetOption(kv.BinlogInfo).(*binloginfo.BinlogInfo) - bin := binInfo.Data - bin.StartTs = int64(c.startTS) - if bin.Tp == binlog.BinlogType_Prewrite { - bin.PrewriteKey = c.keys[0] - } - err := binInfo.WriteBinlog(c.store.clusterID) - ch <- errors.Trace(err) - }() - return ch -} - -func (c *twoPhaseCommitter) writeFinishBinlog(tp binlog.BinlogType, commitTS int64) { - if !c.shouldWriteBinlog() { - return - } - binInfo := c.txn.us.GetOption(kv.BinlogInfo).(*binloginfo.BinlogInfo) - binInfo.Data.Tp = tp - binInfo.Data.CommitTs = commitTS - go func() { - err := binInfo.WriteBinlog(c.store.clusterID) - if err != nil { - log.Errorf("failed to write binlog: %v", err) - } - }() -} - -func (c *twoPhaseCommitter) shouldWriteBinlog() bool { - return c.txn.us.GetOption(kv.BinlogInfo) != nil -} - -// TiKV recommends each RPC packet should be less than ~1MB. We keep each packet's -// Key+Value size below 16KB. -const txnCommitBatchSize = 16 * 1024 - -// batchKeys is a batch of keys in the same region. -type batchKeys struct { - region RegionVerID - keys [][]byte -} - -// appendBatchBySize appends keys to []batchKeys. It may split the keys to make -// sure each batch's size does not exceed the limit. -func appendBatchBySize(b []batchKeys, region RegionVerID, keys [][]byte, sizeFn func([]byte) int, limit int) []batchKeys { - var start, end int - for start = 0; start < len(keys); start = end { - var size int - for end = start; end < len(keys) && size < limit; end++ { - size += sizeFn(keys[end]) - } - b = append(b, batchKeys{ - region: region, - keys: keys[start:end], - }) - } - return b -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/backoff.go b/vendor/github.com/pingcap/tidb/store/tikv/backoff.go deleted file mode 100644 index b9e70af..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/backoff.go +++ /dev/null @@ -1,272 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package tikv - -import ( - "fmt" - "math" - "math/rand" - "time" - - "github.com/juju/errors" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" - log "github.com/sirupsen/logrus" - "golang.org/x/net/context" -) - -const ( - // NoJitter makes the backoff sequence strict exponential. - NoJitter = 1 + iota - // FullJitter applies random factors to strict exponential. - FullJitter - // EqualJitter is also randomized, but prevents very short sleeps. - EqualJitter - // DecorrJitter increases the maximum jitter based on the last random value. - DecorrJitter -) - -// NewBackoffFn creates a backoff func which implements exponential backoff with -// optional jitters. -// See http://www.awsarchitectureblog.com/2015/03/backoff.html -func NewBackoffFn(base, cap, jitter int) func(ctx context.Context) int { - if base < 2 { - // Top prevent panic in 'rand.Intn'. - base = 2 - } - attempts := 0 - lastSleep := base - return func(ctx context.Context) int { - var sleep int - switch jitter { - case NoJitter: - sleep = expo(base, cap, attempts) - case FullJitter: - v := expo(base, cap, attempts) - sleep = rand.Intn(v) - case EqualJitter: - v := expo(base, cap, attempts) - sleep = v/2 + rand.Intn(v/2) - case DecorrJitter: - sleep = int(math.Min(float64(cap), float64(base+rand.Intn(lastSleep*3-base)))) - } - log.Debugf("backoff base %d, sleep %d", base, sleep) - select { - case <-time.After(time.Duration(sleep) * time.Millisecond): - case <-ctx.Done(): - } - - attempts++ - lastSleep = sleep - return lastSleep - } -} - -func expo(base, cap, n int) int { - return int(math.Min(float64(cap), float64(base)*math.Pow(2.0, float64(n)))) -} - -type backoffType int - -// Back off types. -const ( - boTiKVRPC backoffType = iota - BoTxnLock - boTxnLockFast - boPDRPC - BoRegionMiss - BoUpdateLeader - boServerBusy -) - -func (t backoffType) createFn(vars *kv.Variables) func(context.Context) int { - if vars.Hook != nil { - vars.Hook(t.String(), vars) - } - switch t { - case boTiKVRPC: - return NewBackoffFn(100, 2000, EqualJitter) - case BoTxnLock: - return NewBackoffFn(200, 3000, EqualJitter) - case boTxnLockFast: - return NewBackoffFn(vars.BackoffLockFast, 3000, EqualJitter) - case boPDRPC: - return NewBackoffFn(500, 3000, EqualJitter) - case BoRegionMiss: - return NewBackoffFn(100, 500, NoJitter) - case BoUpdateLeader: - return NewBackoffFn(1, 10, NoJitter) - case boServerBusy: - return NewBackoffFn(2000, 10000, EqualJitter) - } - return nil -} - -func (t backoffType) String() string { - switch t { - case boTiKVRPC: - return "tikvRPC" - case BoTxnLock: - return "txnLock" - case boTxnLockFast: - return "txnLockFast" - case boPDRPC: - return "pdRPC" - case BoRegionMiss: - return "regionMiss" - case BoUpdateLeader: - return "updateLeader" - case boServerBusy: - return "serverBusy" - } - return "" -} - -func (t backoffType) TError() *terror.Error { - switch t { - case boTiKVRPC: - return ErrTiKVServerTimeout - case BoTxnLock, boTxnLockFast: - return ErrResolveLockTimeout - case boPDRPC: - return ErrPDServerTimeout.GenByArgs(txnRetryableMark) - case BoRegionMiss, BoUpdateLeader: - return ErrRegionUnavailable - case boServerBusy: - return ErrTiKVServerBusy - } - return terror.ClassTiKV.New(mysql.ErrUnknown, mysql.MySQLErrName[mysql.ErrUnknown]) -} - -// Maximum total sleep time(in ms) for kv/cop commands. -const ( - copBuildTaskMaxBackoff = 5000 - tsoMaxBackoff = 5000 - scannerNextMaxBackoff = 20000 - batchGetMaxBackoff = 20000 - copNextMaxBackoff = 20000 - getMaxBackoff = 20000 - prewriteMaxBackoff = 20000 - cleanupMaxBackoff = 20000 - GcOneRegionMaxBackoff = 20000 - GcResolveLockMaxBackoff = 100000 - deleteRangeOneRegionMaxBackoff = 100000 - rawkvMaxBackoff = 20000 - splitRegionBackoff = 20000 -) - -// CommitMaxBackoff is max sleep time of the 'commit' command -var CommitMaxBackoff = 41000 - -// Backoffer is a utility for retrying queries. -type Backoffer struct { - ctx context.Context - - fn map[backoffType]func(context.Context) int - maxSleep int - totalSleep int - errors []error - types []backoffType - vars *kv.Variables -} - -// NewBackoffer creates a Backoffer with maximum sleep time(in ms). -func NewBackoffer(ctx context.Context, maxSleep int) *Backoffer { - return &Backoffer{ - ctx: ctx, - maxSleep: maxSleep, - vars: kv.DefaultVars, - } -} - -// WithVars sets the kv.Variables to the Backoffer and return it. -func (b *Backoffer) WithVars(vars *kv.Variables) *Backoffer { - b.vars = vars - return b -} - -// Backoff sleeps a while base on the backoffType and records the error message. -// It returns a retryable error if total sleep time exceeds maxSleep. -func (b *Backoffer) Backoff(typ backoffType, err error) error { - select { - case <-b.ctx.Done(): - return errors.Trace(err) - default: - } - - metrics.TiKVBackoffCounter.WithLabelValues(typ.String()).Inc() - // Lazy initialize. - if b.fn == nil { - b.fn = make(map[backoffType]func(context.Context) int) - } - f, ok := b.fn[typ] - if !ok { - f = typ.createFn(b.vars) - b.fn[typ] = f - } - - b.totalSleep += f(b.ctx) - b.types = append(b.types, typ) - - log.Debugf("%v, retry later(totalSleep %dms, maxSleep %dms)", err, b.totalSleep, b.maxSleep) - - b.errors = append(b.errors, errors.Errorf("%s at %s", err.Error(), time.Now().Format(time.RFC3339Nano))) - if b.maxSleep > 0 && b.totalSleep >= b.maxSleep { - errMsg := fmt.Sprintf("backoffer.maxSleep %dms is exceeded, errors:", b.maxSleep) - for i, err := range b.errors { - // Print only last 3 errors for non-DEBUG log levels. - if log.GetLevel() == log.DebugLevel || i >= len(b.errors)-3 { - errMsg += "\n" + err.Error() - } - } - log.Warn(errMsg) - // Use the first backoff type to generate a MySQL error. - return b.types[0].TError() - } - return nil -} - -func (b *Backoffer) String() string { - if b.totalSleep == 0 { - return "" - } - return fmt.Sprintf(" backoff(%dms %s)", b.totalSleep, b.types) -} - -// Clone creates a new Backoffer which keeps current Backoffer's sleep time and errors, and shares -// current Backoffer's context. -func (b *Backoffer) Clone() *Backoffer { - return &Backoffer{ - ctx: b.ctx, - maxSleep: b.maxSleep, - totalSleep: b.totalSleep, - errors: b.errors, - vars: b.vars, - } -} - -// Fork creates a new Backoffer which keeps current Backoffer's sleep time and errors, and holds -// a child context of current Backoffer's context. -func (b *Backoffer) Fork() (*Backoffer, context.CancelFunc) { - ctx, cancel := context.WithCancel(b.ctx) - return &Backoffer{ - ctx: ctx, - maxSleep: b.maxSleep, - totalSleep: b.totalSleep, - errors: b.errors, - vars: b.vars, - }, cancel -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/client.go b/vendor/github.com/pingcap/tidb/store/tikv/client.go deleted file mode 100644 index a4a1886..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/client.go +++ /dev/null @@ -1,277 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package tikv provides tcp connection to kvserver. -package tikv - -import ( - "io" - "strconv" - "sync" - "sync/atomic" - "time" - - "github.com/grpc-ecosystem/go-grpc-middleware" - "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing" - "github.com/grpc-ecosystem/go-grpc-prometheus" - "github.com/juju/errors" - "github.com/pingcap/kvproto/pkg/coprocessor" - "github.com/pingcap/kvproto/pkg/tikvpb" - "github.com/pingcap/tidb/config" - "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/store/tikv/tikvrpc" - "github.com/pingcap/tidb/terror" - log "github.com/sirupsen/logrus" - "golang.org/x/net/context" - "google.golang.org/grpc" - "google.golang.org/grpc/credentials" -) - -// MaxConnectionCount is the max gRPC connections that will be established with -// each tikv-server. -var MaxConnectionCount uint = 16 - -// MaxSendMsgSize set max gRPC request message size sent to server. If any request message size is larger than -// current value, an error will be reported from gRPC. -var MaxSendMsgSize = 1<<31 - 1 - -// MaxCallMsgSize set max gRPC receive message size received from server. If any message size is larger than -// current value, an error will be reported from gRPC. -var MaxCallMsgSize = 1<<31 - 1 - -// Timeout durations. -const ( - dialTimeout = 5 * time.Second - readTimeoutShort = 20 * time.Second // For requests that read/write several key-values. - ReadTimeoutMedium = 60 * time.Second // For requests that may need scan region. - ReadTimeoutLong = 150 * time.Second // For requests that may need scan region multiple times. - GCTimeout = 5 * time.Minute - - grpcInitialWindowSize = 1 << 30 - grpcInitialConnWindowSize = 1 << 30 -) - -// Client is a client that sends RPC. -// It should not be used after calling Close(). -type Client interface { - // Close should release all data. - Close() error - // SendRequest sends Request. - SendRequest(ctx context.Context, addr string, req *tikvrpc.Request, timeout time.Duration) (*tikvrpc.Response, error) -} - -type connArray struct { - index uint32 - v []*grpc.ClientConn - // Bind with a background goroutine to process coprocessor streaming timeout. - streamTimeout chan *tikvrpc.Lease -} - -func newConnArray(maxSize uint, addr string, security config.Security) (*connArray, error) { - a := &connArray{ - index: 0, - v: make([]*grpc.ClientConn, maxSize), - streamTimeout: make(chan *tikvrpc.Lease, 1024), - } - if err := a.Init(addr, security); err != nil { - return nil, err - } - return a, nil -} - -func (a *connArray) Init(addr string, security config.Security) error { - opt := grpc.WithInsecure() - if len(security.ClusterSSLCA) != 0 { - tlsConfig, err := security.ToTLSConfig() - if err != nil { - return errors.Trace(err) - } - opt = grpc.WithTransportCredentials(credentials.NewTLS(tlsConfig)) - } - - unaryInterceptor := grpc_prometheus.UnaryClientInterceptor - streamInterceptor := grpc_prometheus.StreamClientInterceptor - cfg := config.GetGlobalConfig() - if cfg.OpenTracing.Enable { - unaryInterceptor = grpc_middleware.ChainUnaryClient( - unaryInterceptor, - grpc_opentracing.UnaryClientInterceptor(), - ) - streamInterceptor = grpc_middleware.ChainStreamClient( - streamInterceptor, - grpc_opentracing.StreamClientInterceptor(), - ) - } - - for i := range a.v { - ctx, cancel := context.WithTimeout(context.Background(), dialTimeout) - conn, err := grpc.DialContext( - ctx, - addr, - opt, - grpc.WithInitialWindowSize(grpcInitialWindowSize), - grpc.WithInitialConnWindowSize(grpcInitialConnWindowSize), - grpc.WithUnaryInterceptor(unaryInterceptor), - grpc.WithStreamInterceptor(streamInterceptor), - grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(MaxCallMsgSize)), - grpc.WithDefaultCallOptions(grpc.MaxCallSendMsgSize(MaxSendMsgSize)), - grpc.WithBackoffMaxDelay(time.Second*3), - ) - cancel() - if err != nil { - // Cleanup if the initialization fails. - a.Close() - return errors.Trace(err) - } - a.v[i] = conn - } - go tikvrpc.CheckStreamTimeoutLoop(a.streamTimeout) - - return nil -} - -func (a *connArray) Get() *grpc.ClientConn { - next := atomic.AddUint32(&a.index, 1) % uint32(len(a.v)) - return a.v[next] -} - -func (a *connArray) Close() { - for i, c := range a.v { - if c != nil { - err := c.Close() - terror.Log(errors.Trace(err)) - a.v[i] = nil - } - } - close(a.streamTimeout) -} - -// rpcClient is RPC client struct. -// TODO: Add flow control between RPC clients in TiDB ond RPC servers in TiKV. -// Since we use shared client connection to communicate to the same TiKV, it's possible -// that there are too many concurrent requests which overload the service of TiKV. -// TODO: Implement background cleanup. It adds a background goroutine to periodically check -// whether there is any connection is idle and then close and remove these idle connections. -type rpcClient struct { - sync.RWMutex - isClosed bool - conns map[string]*connArray - security config.Security -} - -func newRPCClient(security config.Security) *rpcClient { - return &rpcClient{ - conns: make(map[string]*connArray), - security: security, - } -} - -func (c *rpcClient) getConnArray(addr string) (*connArray, error) { - c.RLock() - if c.isClosed { - c.RUnlock() - return nil, errors.Errorf("rpcClient is closed") - } - array, ok := c.conns[addr] - c.RUnlock() - if !ok { - var err error - array, err = c.createConnArray(addr) - if err != nil { - return nil, err - } - } - return array, nil -} - -func (c *rpcClient) createConnArray(addr string) (*connArray, error) { - c.Lock() - defer c.Unlock() - array, ok := c.conns[addr] - if !ok { - var err error - array, err = newConnArray(MaxConnectionCount, addr, c.security) - if err != nil { - return nil, err - } - c.conns[addr] = array - } - return array, nil -} - -func (c *rpcClient) closeConns() { - c.Lock() - if !c.isClosed { - c.isClosed = true - // close all connections - for _, array := range c.conns { - array.Close() - } - } - c.Unlock() -} - -// SendRequest sends a Request to server and receives Response. -func (c *rpcClient) SendRequest(ctx context.Context, addr string, req *tikvrpc.Request, timeout time.Duration) (*tikvrpc.Response, error) { - start := time.Now() - reqType := req.Type.String() - storeID := strconv.FormatUint(req.Context.GetPeer().GetStoreId(), 10) - defer func() { - metrics.TiKVSendReqHistogram.WithLabelValues(reqType, storeID).Observe(time.Since(start).Seconds()) - }() - - connArray, err := c.getConnArray(addr) - if err != nil { - return nil, errors.Trace(err) - } - client := tikvpb.NewTikvClient(connArray.Get()) - - if req.Type != tikvrpc.CmdCopStream { - ctx1, cancel := context.WithTimeout(ctx, timeout) - defer cancel() - return tikvrpc.CallRPC(ctx1, client, req) - } - - // Coprocessor streaming request. - // Use context to support timeout for grpc streaming client. - ctx1, cancel := context.WithCancel(ctx) - resp, err := tikvrpc.CallRPC(ctx1, client, req) - if err != nil { - return nil, errors.Trace(err) - } - - // Put the lease object to the timeout channel, so it would be checked periodically. - copStream := resp.CopStream - copStream.Timeout = timeout - copStream.Lease.Cancel = cancel - connArray.streamTimeout <- &copStream.Lease - - // Read the first streaming response to get CopStreamResponse. - // This can make error handling much easier, because SendReq() retry on - // region error automatically. - var first *coprocessor.Response - first, err = copStream.Recv() - if err != nil { - if errors.Cause(err) != io.EOF { - return nil, errors.Trace(err) - } - log.Debug("copstream returns nothing for the request.") - } - copStream.Response = first - return resp, nil -} - -func (c *rpcClient) Close() error { - c.closeConns() - return nil -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/coprocessor.go b/vendor/github.com/pingcap/tidb/store/tikv/coprocessor.go deleted file mode 100644 index 224f3c6..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/coprocessor.go +++ /dev/null @@ -1,791 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package tikv - -import ( - "bytes" - "fmt" - "io" - "sort" - "strings" - "sync" - "sync/atomic" - "time" - - "github.com/juju/errors" - "github.com/opentracing/opentracing-go" - "github.com/pingcap/kvproto/pkg/coprocessor" - "github.com/pingcap/kvproto/pkg/kvrpcpb" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/store/tikv/tikvrpc" - "github.com/pingcap/tidb/util/goroutine_pool" - "github.com/pingcap/tipb/go-tipb" - log "github.com/sirupsen/logrus" - "golang.org/x/net/context" -) - -var copIteratorGP = gp.New(time.Minute) - -// CopClient is coprocessor client. -type CopClient struct { - store *tikvStore -} - -// IsRequestTypeSupported checks whether reqType is supported. -func (c *CopClient) IsRequestTypeSupported(reqType, subType int64) bool { - switch reqType { - case kv.ReqTypeSelect, kv.ReqTypeIndex: - switch subType { - case kv.ReqSubTypeGroupBy, kv.ReqSubTypeBasic, kv.ReqSubTypeTopN: - return true - default: - return c.supportExpr(tipb.ExprType(subType)) - } - case kv.ReqTypeDAG: - return c.supportExpr(tipb.ExprType(subType)) - case kv.ReqTypeAnalyze: - return true - } - return false -} - -func (c *CopClient) supportExpr(exprType tipb.ExprType) bool { - switch exprType { - case tipb.ExprType_Null, tipb.ExprType_Int64, tipb.ExprType_Uint64, tipb.ExprType_String, tipb.ExprType_Bytes, - tipb.ExprType_MysqlDuration, tipb.ExprType_MysqlTime, tipb.ExprType_MysqlDecimal, - tipb.ExprType_Float32, tipb.ExprType_Float64, tipb.ExprType_ColumnRef: - return true - // aggregate functions. - case tipb.ExprType_Count, tipb.ExprType_First, tipb.ExprType_Max, tipb.ExprType_Min, tipb.ExprType_Sum, tipb.ExprType_Avg, - tipb.ExprType_Agg_BitXor, tipb.ExprType_Agg_BitAnd, tipb.ExprType_Agg_BitOr: - return true - case kv.ReqSubTypeDesc: - return true - case kv.ReqSubTypeSignature: - return true - default: - return false - } -} - -// Send builds the request and gets the coprocessor iterator response. -func (c *CopClient) Send(ctx context.Context, req *kv.Request, vars *kv.Variables) kv.Response { - bo := NewBackoffer(ctx, copBuildTaskMaxBackoff).WithVars(vars) - tasks, err := buildCopTasks(bo, c.store.regionCache, &copRanges{mid: req.KeyRanges}, req.Desc, req.Streaming) - if err != nil { - return copErrorResponse{err} - } - it := &copIterator{ - store: c.store, - req: req, - concurrency: req.Concurrency, - finishCh: make(chan struct{}), - vars: vars, - } - it.tasks = tasks - if it.concurrency > len(tasks) { - it.concurrency = len(tasks) - } - if it.concurrency < 1 { - // Make sure that there is at least one worker. - it.concurrency = 1 - } - if !it.req.KeepOrder { - it.respChan = make(chan copResponse, it.concurrency) - } - it.open(ctx) - return it -} - -// copTask contains a related Region and KeyRange for a kv.Request. -type copTask struct { - region RegionVerID - ranges *copRanges - - respChan chan copResponse - storeAddr string - cmdType tikvrpc.CmdType -} - -func (r *copTask) String() string { - return fmt.Sprintf("region(%d %d %d) ranges(%d) store(%s)", - r.region.id, r.region.confVer, r.region.ver, r.ranges.len(), r.storeAddr) -} - -// copRanges is like []kv.KeyRange, but may has extra elements at head/tail. -// It's for avoiding alloc big slice during build copTask. -type copRanges struct { - first *kv.KeyRange - mid []kv.KeyRange - last *kv.KeyRange -} - -func (r *copRanges) String() string { - var s string - r.do(func(ran *kv.KeyRange) { - s += fmt.Sprintf("[%q, %q]", ran.StartKey, ran.EndKey) - }) - return s -} - -func (r *copRanges) len() int { - var l int - if r.first != nil { - l++ - } - l += len(r.mid) - if r.last != nil { - l++ - } - return l -} - -func (r *copRanges) at(i int) kv.KeyRange { - if r.first != nil { - if i == 0 { - return *r.first - } - i-- - } - if i < len(r.mid) { - return r.mid[i] - } - return *r.last -} - -func (r *copRanges) slice(from, to int) *copRanges { - var ran copRanges - if r.first != nil { - if from == 0 && to > 0 { - ran.first = r.first - } - if from > 0 { - from-- - } - if to > 0 { - to-- - } - } - if to <= len(r.mid) { - ran.mid = r.mid[from:to] - } else { - if from <= len(r.mid) { - ran.mid = r.mid[from:] - } - if from < to { - ran.last = r.last - } - } - return &ran -} - -func (r *copRanges) do(f func(ran *kv.KeyRange)) { - if r.first != nil { - f(r.first) - } - for _, ran := range r.mid { - f(&ran) - } - if r.last != nil { - f(r.last) - } -} - -func (r *copRanges) toPBRanges() []*coprocessor.KeyRange { - ranges := make([]*coprocessor.KeyRange, 0, r.len()) - r.do(func(ran *kv.KeyRange) { - ranges = append(ranges, &coprocessor.KeyRange{ - Start: ran.StartKey, - End: ran.EndKey, - }) - }) - return ranges -} - -// Split ranges into (left, right) by key. -func (r *copRanges) split(key []byte) (*copRanges, *copRanges) { - n := sort.Search(r.len(), func(i int) bool { - cur := r.at(i) - return len(cur.EndKey) == 0 || bytes.Compare(cur.EndKey, key) > 0 - }) - // If a range p contains the key, it will split to 2 parts. - if n < r.len() { - p := r.at(n) - if bytes.Compare(key, p.StartKey) > 0 { - left := r.slice(0, n) - left.last = &kv.KeyRange{StartKey: p.StartKey, EndKey: key} - right := r.slice(n+1, r.len()) - right.first = &kv.KeyRange{StartKey: key, EndKey: p.EndKey} - return left, right - } - } - return r.slice(0, n), r.slice(n, r.len()) -} - -func buildCopTasks(bo *Backoffer, cache *RegionCache, ranges *copRanges, desc bool, streaming bool) ([]*copTask, error) { - start := time.Now() - rangesLen := ranges.len() - cmdType := tikvrpc.CmdCop - if streaming { - cmdType = tikvrpc.CmdCopStream - } - - var tasks []*copTask - appendTask := func(region RegionVerID, ranges *copRanges) { - tasks = append(tasks, &copTask{ - region: region, - ranges: ranges, - respChan: make(chan copResponse, 1), - cmdType: cmdType, - }) - } - - err := splitRanges(bo, cache, ranges, appendTask) - if err != nil { - return nil, errors.Trace(err) - } - - if desc { - reverseTasks(tasks) - } - if elapsed := time.Since(start); elapsed > time.Millisecond*500 { - log.Warnf("buildCopTasks takes too much time (%v), range len %v, task len %v", elapsed, rangesLen, len(tasks)) - } - metrics.TiKVTxnRegionsNumHistogram.WithLabelValues("coprocessor").Observe(float64(len(tasks))) - return tasks, nil -} - -func splitRanges(bo *Backoffer, cache *RegionCache, ranges *copRanges, fn func(region RegionVerID, ranges *copRanges)) error { - for ranges.len() > 0 { - loc, err := cache.LocateKey(bo, ranges.at(0).StartKey) - if err != nil { - return errors.Trace(err) - } - - // Iterate to the first range that is not complete in the region. - var i int - for ; i < ranges.len(); i++ { - r := ranges.at(i) - if !(loc.Contains(r.EndKey) || bytes.Equal(loc.EndKey, r.EndKey)) { - break - } - } - // All rest ranges belong to the same region. - if i == ranges.len() { - fn(loc.Region, ranges) - break - } - - r := ranges.at(i) - if loc.Contains(r.StartKey) { - // Part of r is not in the region. We need to split it. - taskRanges := ranges.slice(0, i) - taskRanges.last = &kv.KeyRange{ - StartKey: r.StartKey, - EndKey: loc.EndKey, - } - fn(loc.Region, taskRanges) - - ranges = ranges.slice(i+1, ranges.len()) - ranges.first = &kv.KeyRange{ - StartKey: loc.EndKey, - EndKey: r.EndKey, - } - } else { - // rs[i] is not in the region. - taskRanges := ranges.slice(0, i) - fn(loc.Region, taskRanges) - ranges = ranges.slice(i, ranges.len()) - } - } - - return nil -} - -// SplitRegionRanges get the split ranges from pd region. -func SplitRegionRanges(bo *Backoffer, cache *RegionCache, keyRanges []kv.KeyRange) ([]kv.KeyRange, error) { - ranges := copRanges{mid: keyRanges} - - var ret []kv.KeyRange - appendRange := func(region RegionVerID, ranges *copRanges) { - for i := 0; i < ranges.len(); i++ { - ret = append(ret, ranges.at(i)) - } - } - - err := splitRanges(bo, cache, &ranges, appendRange) - if err != nil { - return nil, errors.Trace(err) - } - return ret, nil -} - -func reverseTasks(tasks []*copTask) { - for i := 0; i < len(tasks)/2; i++ { - j := len(tasks) - i - 1 - tasks[i], tasks[j] = tasks[j], tasks[i] - } -} - -type copIterator struct { - store *tikvStore - req *kv.Request - concurrency int - finishCh chan struct{} - // There are two cases we need to close the `finishCh` channel, one is when context is done, the other one is - // when the Close is called. we use atomic.CompareAndSwap `closed` to to make sure the channel is not closed twice. - closed uint32 - - // If keepOrder, results are stored in copTask.respChan, read them out one by one. - tasks []*copTask - curr int - - // Otherwise, results are stored in respChan. - respChan chan copResponse - wg sync.WaitGroup - - vars *kv.Variables -} - -// copIteratorWorker receives tasks from copIteratorTaskSender, handles tasks and sends the copResponse to respChan. -type copIteratorWorker struct { - taskCh <-chan *copTask - wg *sync.WaitGroup - store *tikvStore - req *kv.Request - respChan chan<- copResponse - finishCh <-chan struct{} - vars *kv.Variables -} - -// copIteratorTaskSender sends tasks to taskCh then wait for the workers to exit. -type copIteratorTaskSender struct { - taskCh chan<- *copTask - wg *sync.WaitGroup - tasks []*copTask - finishCh <-chan struct{} - respChan chan<- copResponse -} - -type copResponse struct { - *coprocessor.Response - startKey kv.Key - err error -} - -const minLogCopTaskTime = 300 * time.Millisecond - -// run is a worker function that get a copTask from channel, handle it and -// send the result back. -func (worker *copIteratorWorker) run(ctx context.Context) { - if span := opentracing.SpanFromContext(ctx); span != nil { - span, ctx = opentracing.StartSpanFromContext(ctx, "copIteratorWorker.run") - defer span.Finish() - } - - defer worker.wg.Done() - for task := range worker.taskCh { - respCh := worker.respChan - if respCh == nil { - respCh = task.respChan - } - - bo := NewBackoffer(ctx, copNextMaxBackoff).WithVars(worker.vars) - worker.handleTask(bo, task, respCh) - if bo.totalSleep > 0 { - metrics.TiKVBackoffHistogram.Observe(float64(bo.totalSleep) / 1000) - } - close(task.respChan) - select { - case <-worker.finishCh: - return - default: - } - } -} - -// open starts workers and sender goroutines. -func (it *copIterator) open(ctx context.Context) { - taskCh := make(chan *copTask, 1) - it.wg.Add(it.concurrency) - // Start it.concurrency number of workers to handle cop requests. - for i := 0; i < it.concurrency; i++ { - worker := &copIteratorWorker{ - taskCh: taskCh, - wg: &it.wg, - store: it.store, - req: it.req, - respChan: it.respChan, - finishCh: it.finishCh, - vars: it.vars, - } - copIteratorGP.Go(func() { - worker.run(ctx) - }) - } - taskSender := &copIteratorTaskSender{ - taskCh: taskCh, - wg: &it.wg, - tasks: it.tasks, - finishCh: it.finishCh, - } - taskSender.respChan = it.respChan - copIteratorGP.Go(taskSender.run) -} - -func (sender *copIteratorTaskSender) run() { - // Send tasks to feed the worker goroutines. - for _, t := range sender.tasks { - exit := sender.sendToTaskCh(t) - if exit { - break - } - } - close(sender.taskCh) - - // Wait for worker goroutines to exit. - sender.wg.Wait() - if sender.respChan != nil { - close(sender.respChan) - } -} - -func (it *copIterator) recvFromRespCh(ctx context.Context, respCh <-chan copResponse) (resp copResponse, ok bool, exit bool) { - select { - case resp, ok = <-respCh: - case <-it.finishCh: - exit = true - case <-ctx.Done(): - // We select the ctx.Done() in the thread of `Next` instead of in the worker to avoid the cost of `WithCancel`. - if atomic.CompareAndSwapUint32(&it.closed, 0, 1) { - close(it.finishCh) - } - exit = true - } - return -} - -func (sender *copIteratorTaskSender) sendToTaskCh(t *copTask) (exit bool) { - select { - case sender.taskCh <- t: - case <-sender.finishCh: - exit = true - } - return -} - -func (worker *copIteratorWorker) sendToRespCh(resp copResponse, respCh chan<- copResponse) (exit bool) { - select { - case respCh <- resp: - case <-worker.finishCh: - exit = true - } - return -} - -// copResultSubset implements the kv.ResultSubset interface. -type copResultSubset struct { - data []byte - startKey kv.Key -} - -// GetData implements the kv.ResultSubset GetData interface. -func (rs *copResultSubset) GetData() []byte { - return rs.data -} - -// GetStartKey implements the kv.ResultSubset GetStartKey interface. -func (rs *copResultSubset) GetStartKey() kv.Key { - return rs.startKey -} - -// Next returns next coprocessor result. -// NOTE: Use nil to indicate finish, so if the returned ResultSubset is not nil, reader should continue to call Next(). -func (it *copIterator) Next(ctx context.Context) (kv.ResultSubset, error) { - var ( - resp copResponse - ok bool - closed bool - ) - // If data order matters, response should be returned in the same order as copTask slice. - // Otherwise all responses are returned from a single channel. - if it.respChan != nil { - // Get next fetched resp from chan - resp, ok, closed = it.recvFromRespCh(ctx, it.respChan) - if !ok || closed { - return nil, nil - } - } else { - for { - if it.curr >= len(it.tasks) { - // Resp will be nil if iterator is finishCh. - return nil, nil - } - task := it.tasks[it.curr] - resp, ok, closed = it.recvFromRespCh(ctx, task.respChan) - if closed { - // Close() is already called, so Next() is invalid. - return nil, nil - } - if ok { - break - } - // Switch to next task. - it.tasks[it.curr] = nil - it.curr++ - } - } - - if resp.err != nil { - return nil, errors.Trace(resp.err) - } - - err := it.store.CheckVisibility(it.req.StartTs) - if err != nil { - return nil, errors.Trace(err) - } - - if resp.Data == nil { - return &copResultSubset{}, nil - } - return &copResultSubset{data: resp.Data, startKey: resp.startKey}, nil -} - -// handleTask handles single copTask, sends the result to channel, retry automatically on error. -func (worker *copIteratorWorker) handleTask(bo *Backoffer, task *copTask, respCh chan<- copResponse) { - remainTasks := []*copTask{task} - for len(remainTasks) > 0 { - tasks, err := worker.handleTaskOnce(bo, remainTasks[0], respCh) - if err != nil { - resp := copResponse{err: errors.Trace(err)} - worker.sendToRespCh(resp, respCh) - return - } - if len(tasks) > 0 { - remainTasks = append(tasks, remainTasks[1:]...) - } else { - remainTasks = remainTasks[1:] - } - } -} - -// handleTaskOnce handles single copTask, successful results are send to channel. -// If error happened, returns error. If region split or meet lock, returns the remain tasks. -func (worker *copIteratorWorker) handleTaskOnce(bo *Backoffer, task *copTask, ch chan<- copResponse) ([]*copTask, error) { - - // gofail: var handleTaskOnceError bool - // if handleTaskOnceError { - // return nil, errors.New("mock handleTaskOnce error") - // } - - sender := NewRegionRequestSender(worker.store.regionCache, worker.store.client) - req := &tikvrpc.Request{ - Type: task.cmdType, - Cop: &coprocessor.Request{ - Tp: worker.req.Tp, - Data: worker.req.Data, - Ranges: task.ranges.toPBRanges(), - }, - Context: kvrpcpb.Context{ - IsolationLevel: pbIsolationLevel(worker.req.IsolationLevel), - Priority: kvPriorityToCommandPri(worker.req.Priority), - NotFillCache: worker.req.NotFillCache, - HandleTime: true, - }, - } - startTime := time.Now() - resp, err := sender.SendReq(bo, req, task.region, ReadTimeoutMedium) - if err != nil { - return nil, errors.Trace(err) - } - // Set task.storeAddr field so its task.String() method have the store address information. - task.storeAddr = sender.storeAddr - costTime := time.Since(startTime) - if costTime > minLogCopTaskTime { - worker.logTimeCopTask(costTime, task, bo, resp) - } - metrics.TiKVCoprocessorHistogram.Observe(costTime.Seconds()) - - if task.cmdType == tikvrpc.CmdCopStream { - return worker.handleCopStreamResult(bo, resp.CopStream, task, ch) - } - - // Handles the response for non-streaming copTask. - return worker.handleCopResponse(bo, resp.Cop, task, ch, nil) -} - -const ( - minLogBackoffTime = 100 - minLogKVProcessTime = 100 - minLogKVWaitTime = 200 -) - -func (worker *copIteratorWorker) logTimeCopTask(costTime time.Duration, task *copTask, bo *Backoffer, resp *tikvrpc.Response) { - logStr := fmt.Sprintf("[TIME_COP_PROCESS] resp_time:%s txn_start_ts:%d region_id:%d store_addr:%s", costTime, worker.req.StartTs, task.region.id, task.storeAddr) - if bo.totalSleep > minLogBackoffTime { - backoffTypes := strings.Replace(fmt.Sprintf("%v", bo.types), " ", ",", -1) - logStr += fmt.Sprintf(" backoff_ms:%d backoff_types:%s", bo.totalSleep, backoffTypes) - } - var detail *kvrpcpb.ExecDetails - if resp.Cop != nil { - detail = resp.Cop.ExecDetails - } else if resp.CopStream != nil { - detail = resp.CopStream.ExecDetails - } - - if detail != nil && detail.HandleTime != nil { - processMs := detail.HandleTime.ProcessMs - waitMs := detail.HandleTime.WaitMs - if processMs > minLogKVProcessTime { - logStr += fmt.Sprintf(" kv_process_ms:%d", processMs) - if detail.ScanDetail != nil { - logStr = appendScanDetail(logStr, "write", detail.ScanDetail.Write) - logStr = appendScanDetail(logStr, "data", detail.ScanDetail.Data) - logStr = appendScanDetail(logStr, "lock", detail.ScanDetail.Lock) - } - } - if waitMs > minLogKVWaitTime { - logStr += fmt.Sprintf(" kv_wait_ms:%d", waitMs) - if processMs <= minLogKVProcessTime { - logStr = strings.Replace(logStr, "TIME_COP_PROCESS", "TIME_COP_WAIT", 1) - } - } - } - log.Info(logStr) -} - -func appendScanDetail(logStr string, columnFamily string, scanInfo *kvrpcpb.ScanInfo) string { - if scanInfo != nil { - logStr += fmt.Sprintf(" scan_total_%s:%d", columnFamily, scanInfo.Total) - logStr += fmt.Sprintf(" scan_processed_%s:%d", columnFamily, scanInfo.Processed) - } - return logStr -} - -func (worker *copIteratorWorker) handleCopStreamResult(bo *Backoffer, stream *tikvrpc.CopStreamResponse, task *copTask, ch chan<- copResponse) ([]*copTask, error) { - defer stream.Close() - var resp *coprocessor.Response - var lastRange *coprocessor.KeyRange - resp = stream.Response - if resp == nil { - // streaming request returns io.EOF, so the first Response is nil. - return nil, nil - } - for { - remainedTasks, err := worker.handleCopResponse(bo, resp, task, ch, lastRange) - if err != nil || len(remainedTasks) != 0 { - return remainedTasks, errors.Trace(err) - } - resp, err = stream.Recv() - if err != nil { - if errors.Cause(err) == io.EOF { - return nil, nil - } - - if err1 := bo.Backoff(boTiKVRPC, errors.Errorf("recv stream response error: %v, task: %s", err, task)); err1 != nil { - return nil, errors.Trace(err) - } - - // No coprocessor.Response for network error, rebuild task based on the last success one. - log.Info("stream recv timeout:", err) - return worker.buildCopTasksFromRemain(bo, lastRange, task) - } - lastRange = resp.Range - } -} - -// handleCopResponse checks coprocessor Response for region split and lock, -// returns more tasks when that happens, or handles the response if no error. -// if we're handling streaming coprocessor response, lastRange is the range of last -// successful response, otherwise it's nil. -func (worker *copIteratorWorker) handleCopResponse(bo *Backoffer, resp *coprocessor.Response, task *copTask, ch chan<- copResponse, lastRange *coprocessor.KeyRange) ([]*copTask, error) { - if regionErr := resp.GetRegionError(); regionErr != nil { - if err := bo.Backoff(BoRegionMiss, errors.New(regionErr.String())); err != nil { - return nil, errors.Trace(err) - } - // We may meet RegionError at the first packet, but not during visiting the stream. - return buildCopTasks(bo, worker.store.regionCache, task.ranges, worker.req.Desc, worker.req.Streaming) - } - if lockErr := resp.GetLocked(); lockErr != nil { - log.Debugf("coprocessor encounters lock: %v", lockErr) - ok, err1 := worker.store.lockResolver.ResolveLocks(bo, []*Lock{NewLock(lockErr)}) - if err1 != nil { - return nil, errors.Trace(err1) - } - if !ok { - if err := bo.Backoff(boTxnLockFast, errors.New(lockErr.String())); err != nil { - return nil, errors.Trace(err) - } - } - return worker.buildCopTasksFromRemain(bo, lastRange, task) - } - if otherErr := resp.GetOtherError(); otherErr != "" { - err := errors.Errorf("other error: %s", otherErr) - log.Warnf("coprocessor err: %v", err) - return nil, errors.Trace(err) - } - var startKey kv.Key - // When the request is using streaming API, the `Range` is not nil. - if resp.Range != nil { - startKey = resp.Range.Start - } else { - startKey = task.ranges.at(0).StartKey - } - worker.sendToRespCh(copResponse{resp, startKey, nil}, ch) - return nil, nil -} - -func (worker *copIteratorWorker) buildCopTasksFromRemain(bo *Backoffer, lastRange *coprocessor.KeyRange, task *copTask) ([]*copTask, error) { - remainedRanges := task.ranges - if worker.req.Streaming && lastRange != nil { - remainedRanges = worker.calculateRemain(task.ranges, lastRange, worker.req.Desc) - } - return buildCopTasks(bo, worker.store.regionCache, remainedRanges, worker.req.Desc, worker.req.Streaming) -} - -// calculateRemain splits the input ranges into two, and take one of them according to desc flag. -// It's used in streaming API, to calculate which range is consumed and what needs to be retry. -// For example: -// ranges: [r1 --> r2) [r3 --> r4) -// split: [s1 --> s2) -// In normal scan order, all data before s1 is consumed, so the remain ranges should be [s1 --> r2) [r3 --> r4) -// In reverse scan order, all data after s2 is consumed, so the remain ranges should be [r1 --> r2) [r3 --> s2) -func (worker *copIteratorWorker) calculateRemain(ranges *copRanges, split *coprocessor.KeyRange, desc bool) *copRanges { - if desc { - left, _ := ranges.split(split.End) - return left - } - _, right := ranges.split(split.Start) - return right -} - -func (it *copIterator) Close() error { - if atomic.CompareAndSwapUint32(&it.closed, 0, 1) { - close(it.finishCh) - } - it.wg.Wait() - return nil -} - -// copErrorResponse returns error when calling Next() -type copErrorResponse struct{ error } - -func (it copErrorResponse) Next(ctx context.Context) (kv.ResultSubset, error) { - return nil, it.error -} - -func (it copErrorResponse) Close() error { - return nil -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/delete_range.go b/vendor/github.com/pingcap/tidb/store/tikv/delete_range.go deleted file mode 100644 index 8db1dd3..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/delete_range.go +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2018 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package tikv - -import ( - "bytes" - "context" - - "github.com/juju/errors" - "github.com/pingcap/kvproto/pkg/kvrpcpb" - "github.com/pingcap/tidb/store/tikv/tikvrpc" -) - -// DeleteRangeTask is used to delete all keys in a range. After -// performing DeleteRange, it keeps how many ranges it affects and -// if the task was canceled or not. -type DeleteRangeTask struct { - completedRegions int - canceled bool - store Storage - ctx context.Context - startKey []byte - endKey []byte -} - -// NewDeleteRangeTask creates a DeleteRangeTask. Deleting will not be performed right away. -// WARNING: Currently, this API may leave some waste key-value pairs uncleaned in TiKV. Be careful while using it. -func NewDeleteRangeTask(ctx context.Context, store Storage, startKey []byte, endKey []byte) *DeleteRangeTask { - return &DeleteRangeTask{ - completedRegions: 0, - canceled: false, - store: store, - ctx: ctx, - startKey: startKey, - endKey: endKey, - } -} - -// Execute performs the delete range operation. -func (t *DeleteRangeTask) Execute() error { - startKey, rangeEndKey := t.startKey, t.endKey - for { - select { - case <-t.ctx.Done(): - t.canceled = true - return nil - default: - } - bo := NewBackoffer(t.ctx, deleteRangeOneRegionMaxBackoff) - loc, err := t.store.GetRegionCache().LocateKey(bo, startKey) - if err != nil { - return errors.Trace(err) - } - - // Delete to the end of the region, except if it's the last region overlapping the range - endKey := loc.EndKey - // If it is the last region - if loc.Contains(rangeEndKey) { - endKey = rangeEndKey - } - - req := &tikvrpc.Request{ - Type: tikvrpc.CmdDeleteRange, - DeleteRange: &kvrpcpb.DeleteRangeRequest{ - StartKey: startKey, - EndKey: endKey, - }, - } - - resp, err := t.store.SendReq(bo, req, loc.Region, ReadTimeoutMedium) - if err != nil { - return errors.Trace(err) - } - regionErr, err := resp.GetRegionError() - if err != nil { - return errors.Trace(err) - } - if regionErr != nil { - err = bo.Backoff(BoRegionMiss, errors.New(regionErr.String())) - if err != nil { - return errors.Trace(err) - } - continue - } - deleteRangeResp := resp.DeleteRange - if deleteRangeResp == nil { - return errors.Trace(ErrBodyMissing) - } - if err := deleteRangeResp.GetError(); err != "" { - return errors.Errorf("unexpected delete range err: %v", err) - } - t.completedRegions++ - if bytes.Equal(endKey, rangeEndKey) { - break - } - startKey = endKey - } - - return nil -} - -// CompletedRegions returns the number of regions that are affected by this delete range task -func (t *DeleteRangeTask) CompletedRegions() int { - return t.completedRegions -} - -// IsCanceled returns true if the delete range operation was canceled on the half way -func (t *DeleteRangeTask) IsCanceled() bool { - return t.canceled -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/error.go b/vendor/github.com/pingcap/tidb/store/tikv/error.go deleted file mode 100644 index 54c48bf..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/error.go +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package tikv - -import ( - "github.com/juju/errors" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" -) - -var ( - // ErrBodyMissing response body is missing error - ErrBodyMissing = errors.New("response body is missing") -) - -// TiDB decides whether to retry transaction by checking if error message contains -// string "try again later" literally. -// In TiClient we use `errors.Annotate(err, txnRetryableMark)` to direct TiDB to -// restart a transaction. -// Note that it should be only used if i) the error occurs inside a transaction -// and ii) the error is not totally unexpected and hopefully will recover soon. -const txnRetryableMark = "[try again later]" - -// MySQL error instances. -var ( - ErrTiKVServerTimeout = terror.ClassTiKV.New(mysql.ErrTiKVServerTimeout, mysql.MySQLErrName[mysql.ErrTiKVServerTimeout]+txnRetryableMark) - ErrResolveLockTimeout = terror.ClassTiKV.New(mysql.ErrResolveLockTimeout, mysql.MySQLErrName[mysql.ErrResolveLockTimeout]+txnRetryableMark) - ErrPDServerTimeout = terror.ClassTiKV.New(mysql.ErrPDServerTimeout, mysql.MySQLErrName[mysql.ErrPDServerTimeout]+"%v") - ErrRegionUnavailable = terror.ClassTiKV.New(mysql.ErrRegionUnavailable, mysql.MySQLErrName[mysql.ErrRegionUnavailable]+txnRetryableMark) - ErrTiKVServerBusy = terror.ClassTiKV.New(mysql.ErrTiKVServerBusy, mysql.MySQLErrName[mysql.ErrTiKVServerBusy]+txnRetryableMark) - ErrGCTooEarly = terror.ClassTiKV.New(mysql.ErrGCTooEarly, mysql.MySQLErrName[mysql.ErrGCTooEarly]) -) - -func init() { - tikvMySQLErrCodes := map[terror.ErrCode]uint16{ - mysql.ErrTiKVServerTimeout: mysql.ErrTiKVServerTimeout, - mysql.ErrResolveLockTimeout: mysql.ErrResolveLockTimeout, - mysql.ErrPDServerTimeout: mysql.ErrPDServerTimeout, - mysql.ErrRegionUnavailable: mysql.ErrRegionUnavailable, - mysql.ErrTiKVServerBusy: mysql.ErrTiKVServerBusy, - mysql.ErrGCTooEarly: mysql.ErrGCTooEarly, - mysql.ErrTruncatedWrongValue: mysql.ErrTruncatedWrongValue, - } - terror.ErrClassToMySQLCodes[terror.ClassTiKV] = tikvMySQLErrCodes -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/interface.go b/vendor/github.com/pingcap/tidb/store/tikv/interface.go deleted file mode 100644 index 70005e1..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/interface.go +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package tikv - -import ( - "time" - - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/store/tikv/oracle" - "github.com/pingcap/tidb/store/tikv/tikvrpc" -) - -// Storage represent the kv.Storage runs on TiKV. -type Storage interface { - kv.Storage - - // GetRegionCache gets the RegionCache. - GetRegionCache() *RegionCache - - // SendReq sends a request to TiKV. - SendReq(bo *Backoffer, req *tikvrpc.Request, regionID RegionVerID, timeout time.Duration) (*tikvrpc.Response, error) - - // GetLockResolver gets the LockResolver. - GetLockResolver() *LockResolver - - // GetSafePointKV gets the SafePointKV. - GetSafePointKV() SafePointKV - - // UpdateSPCache updates the cache of safe point. - UpdateSPCache(cachedSP uint64, cachedTime time.Time) - - // GetGCHandler gets the GCHandler. - GetGCHandler() GCHandler - - // SetOracle sets the Oracle. - SetOracle(oracle oracle.Oracle) - - // SetTiKVClient sets the TiKV client. - SetTiKVClient(client Client) - - // GetTiKVClient gets the TiKV client. - GetTiKVClient() Client - - // Closed returns the closed channel. - Closed() <-chan struct{} -} - -// GCHandler runs garbage collection job. -type GCHandler interface { - // Start starts the GCHandler. - Start() - - // Close closes the GCHandler. - Close() -} - -// NewGCHandlerFunc creates a new GCHandler. -// To enable real GC, we should assign the function to `gcworker.NewGCWorker`. -var NewGCHandlerFunc func(storage Storage) (GCHandler, error) diff --git a/vendor/github.com/pingcap/tidb/store/tikv/kv.go b/vendor/github.com/pingcap/tidb/store/tikv/kv.go deleted file mode 100644 index 12633b2..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/kv.go +++ /dev/null @@ -1,406 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package tikv - -import ( - "crypto/tls" - "fmt" - "math/rand" - "net/url" - "strings" - "sync" - "time" - - "github.com/coreos/etcd/clientv3" - "github.com/grpc-ecosystem/go-grpc-prometheus" - "github.com/juju/errors" - "github.com/pingcap/pd/pd-client" - "github.com/pingcap/tidb/config" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/store/tikv/latch" - "github.com/pingcap/tidb/store/tikv/oracle" - "github.com/pingcap/tidb/store/tikv/oracle/oracles" - "github.com/pingcap/tidb/store/tikv/tikvrpc" - log "github.com/sirupsen/logrus" - "golang.org/x/net/context" - "google.golang.org/grpc" -) - -type storeCache struct { - sync.Mutex - cache map[string]*tikvStore -} - -var mc storeCache - -// Driver implements engine Driver. -type Driver struct { -} - -func createEtcdKV(addrs []string, tlsConfig *tls.Config) (*clientv3.Client, error) { - cli, err := clientv3.New(clientv3.Config{ - Endpoints: addrs, - DialTimeout: 5 * time.Second, - DialOptions: []grpc.DialOption{ - grpc.WithUnaryInterceptor(grpc_prometheus.UnaryClientInterceptor), - grpc.WithStreamInterceptor(grpc_prometheus.StreamClientInterceptor), - }, - TLS: tlsConfig, - }) - if err != nil { - return nil, errors.Trace(err) - } - return cli, nil -} - -// Open opens or creates an TiKV storage with given path. -// Path example: tikv://etcd-node1:port,etcd-node2:port?cluster=1&disableGC=false -func (d Driver) Open(path string) (kv.Storage, error) { - mc.Lock() - defer mc.Unlock() - - security := config.GetGlobalConfig().Security - txnLocalLatches := config.GetGlobalConfig().TxnLocalLatches - etcdAddrs, disableGC, err := parsePath(path) - if err != nil { - return nil, errors.Trace(err) - } - - pdCli, err := pd.NewClient(etcdAddrs, pd.SecurityOption{ - CAPath: security.ClusterSSLCA, - CertPath: security.ClusterSSLCert, - KeyPath: security.ClusterSSLKey, - }) - - if err != nil { - if strings.Contains(err.Error(), "i/o timeout") { - return nil, errors.Annotate(err, txnRetryableMark) - } - return nil, errors.Trace(err) - } - - // FIXME: uuid will be a very long and ugly string, simplify it. - uuid := fmt.Sprintf("tikv-%v", pdCli.GetClusterID(context.TODO())) - if store, ok := mc.cache[uuid]; ok { - return store, nil - } - - tlsConfig, err := security.ToTLSConfig() - if err != nil { - return nil, errors.Trace(err) - } - - spkv, err := NewEtcdSafePointKV(etcdAddrs, tlsConfig) - if err != nil { - return nil, errors.Trace(err) - } - - s, err := newTikvStore(uuid, &codecPDClient{pdCli}, spkv, newRPCClient(security), !disableGC) - if err != nil { - return nil, errors.Trace(err) - } - if txnLocalLatches.Enabled { - s.EnableTxnLocalLatches(txnLocalLatches.Capacity) - } - s.etcdAddrs = etcdAddrs - s.tlsConfig = tlsConfig - - mc.cache[uuid] = s - return s, nil -} - -// update oracle's lastTS every 2000ms. -var oracleUpdateInterval = 2000 - -type tikvStore struct { - clusterID uint64 - uuid string - oracle oracle.Oracle - client Client - pdClient pd.Client - regionCache *RegionCache - lockResolver *LockResolver - txnLatches *latch.LatchesScheduler - gcWorker GCHandler - etcdAddrs []string - tlsConfig *tls.Config - mock bool - enableGC bool - - kv SafePointKV - safePoint uint64 - spTime time.Time - spMutex sync.RWMutex // this is used to update safePoint and spTime - closed chan struct{} // this is used to nofity when the store is closed -} - -func (s *tikvStore) UpdateSPCache(cachedSP uint64, cachedTime time.Time) { - s.spMutex.Lock() - s.safePoint = cachedSP - s.spTime = cachedTime - s.spMutex.Unlock() -} - -func (s *tikvStore) CheckVisibility(startTime uint64) error { - s.spMutex.RLock() - cachedSafePoint := s.safePoint - cachedTime := s.spTime - s.spMutex.RUnlock() - diff := time.Since(cachedTime) - - if diff > (GcSafePointCacheInterval - gcCPUTimeInaccuracyBound) { - return ErrPDServerTimeout.GenByArgs("start timestamp may fall behind safe point") - } - - if startTime < cachedSafePoint { - return ErrGCTooEarly - } - - return nil -} - -func newTikvStore(uuid string, pdClient pd.Client, spkv SafePointKV, client Client, enableGC bool) (*tikvStore, error) { - o, err := oracles.NewPdOracle(pdClient, time.Duration(oracleUpdateInterval)*time.Millisecond) - if err != nil { - return nil, errors.Trace(err) - } - store := &tikvStore{ - clusterID: pdClient.GetClusterID(context.TODO()), - uuid: uuid, - oracle: o, - client: client, - pdClient: pdClient, - regionCache: NewRegionCache(pdClient), - kv: spkv, - safePoint: 0, - spTime: time.Now(), - closed: make(chan struct{}), - } - store.lockResolver = newLockResolver(store) - store.enableGC = enableGC - - go store.runSafePointChecker() - - return store, nil -} - -func (s *tikvStore) EnableTxnLocalLatches(size uint) { - s.txnLatches = latch.NewScheduler(size) -} - -// IsLatchEnabled is used by mockstore.TestConfig. -func (s *tikvStore) IsLatchEnabled() bool { - return s.txnLatches != nil -} - -func (s *tikvStore) EtcdAddrs() []string { - return s.etcdAddrs -} - -func (s *tikvStore) TLSConfig() *tls.Config { - return s.tlsConfig -} - -// StartGCWorker starts GC worker, it's called in BootstrapSession, don't call this function more than once. -func (s *tikvStore) StartGCWorker() error { - if !s.enableGC || NewGCHandlerFunc == nil { - return nil - } - - gcWorker, err := NewGCHandlerFunc(s) - if err != nil { - return errors.Trace(err) - } - gcWorker.Start() - s.gcWorker = gcWorker - return nil -} - -func (s *tikvStore) runSafePointChecker() { - d := gcSafePointUpdateInterval - for { - select { - case spCachedTime := <-time.After(d): - cachedSafePoint, err := loadSafePoint(s.GetSafePointKV(), GcSavedSafePoint) - if err == nil { - metrics.TiKVLoadSafepointCounter.WithLabelValues("ok").Inc() - s.UpdateSPCache(cachedSafePoint, spCachedTime) - d = gcSafePointUpdateInterval - } else { - metrics.TiKVLoadSafepointCounter.WithLabelValues("fail").Inc() - log.Errorf("fail to load safepoint from pd: %v", err) - d = gcSafePointQuickRepeatInterval - } - case <-s.Closed(): - return - } - } -} - -func (s *tikvStore) Begin() (kv.Transaction, error) { - txn, err := newTiKVTxn(s) - if err != nil { - return nil, errors.Trace(err) - } - metrics.TiKVTxnCounter.Inc() - return txn, nil -} - -// BeginWithStartTS begins a transaction with startTS. -func (s *tikvStore) BeginWithStartTS(startTS uint64) (kv.Transaction, error) { - txn, err := newTikvTxnWithStartTS(s, startTS) - if err != nil { - return nil, errors.Trace(err) - } - metrics.TiKVTxnCounter.Inc() - return txn, nil -} - -func (s *tikvStore) GetSnapshot(ver kv.Version) (kv.Snapshot, error) { - snapshot := newTiKVSnapshot(s, ver) - metrics.TiKVSnapshotCounter.Inc() - return snapshot, nil -} - -func (s *tikvStore) Close() error { - mc.Lock() - defer mc.Unlock() - - delete(mc.cache, s.uuid) - s.oracle.Close() - s.pdClient.Close() - if s.gcWorker != nil { - s.gcWorker.Close() - } - - close(s.closed) - if err := s.client.Close(); err != nil { - return errors.Trace(err) - } - - if s.txnLatches != nil { - s.txnLatches.Close() - } - return nil -} - -func (s *tikvStore) UUID() string { - return s.uuid -} - -func (s *tikvStore) CurrentVersion() (kv.Version, error) { - bo := NewBackoffer(context.Background(), tsoMaxBackoff) - startTS, err := s.getTimestampWithRetry(bo) - if err != nil { - return kv.NewVersion(0), errors.Trace(err) - } - return kv.NewVersion(startTS), nil -} - -func (s *tikvStore) getTimestampWithRetry(bo *Backoffer) (uint64, error) { - for { - startTS, err := s.oracle.GetTimestamp(bo.ctx) - if err == nil { - return startTS, nil - } - err = bo.Backoff(boPDRPC, errors.Errorf("get timestamp failed: %v", err)) - if err != nil { - return 0, errors.Trace(err) - } - } -} - -func (s *tikvStore) GetClient() kv.Client { - return &CopClient{ - store: s, - } -} - -func (s *tikvStore) GetOracle() oracle.Oracle { - return s.oracle -} - -func (s *tikvStore) SupportDeleteRange() (supported bool) { - if s.mock { - return false - } - return true -} - -func (s *tikvStore) SendReq(bo *Backoffer, req *tikvrpc.Request, regionID RegionVerID, timeout time.Duration) (*tikvrpc.Response, error) { - sender := NewRegionRequestSender(s.regionCache, s.client) - return sender.SendReq(bo, req, regionID, timeout) -} - -func (s *tikvStore) GetRegionCache() *RegionCache { - return s.regionCache -} - -func (s *tikvStore) GetLockResolver() *LockResolver { - return s.lockResolver -} - -func (s *tikvStore) GetGCHandler() GCHandler { - return s.gcWorker -} - -func (s *tikvStore) Closed() <-chan struct{} { - return s.closed -} - -func (s *tikvStore) GetSafePointKV() SafePointKV { - return s.kv -} - -func (s *tikvStore) SetOracle(oracle oracle.Oracle) { - s.oracle = oracle -} - -func (s *tikvStore) SetTiKVClient(client Client) { - s.client = client -} - -func (s *tikvStore) GetTiKVClient() (client Client) { - return s.client -} - -func parsePath(path string) (etcdAddrs []string, disableGC bool, err error) { - var u *url.URL - u, err = url.Parse(path) - if err != nil { - err = errors.Trace(err) - return - } - if strings.ToLower(u.Scheme) != "tikv" { - err = errors.Errorf("Uri scheme expected[tikv] but found [%s]", u.Scheme) - log.Error(err) - return - } - switch strings.ToLower(u.Query().Get("disableGC")) { - case "true": - disableGC = true - case "false", "": - default: - err = errors.New("disableGC flag should be true/false") - return - } - etcdAddrs = strings.Split(u.Host, ",") - return -} - -func init() { - mc.cache = make(map[string]*tikvStore) - rand.Seed(time.Now().UnixNano()) -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/latch/latch.go b/vendor/github.com/pingcap/tidb/store/tikv/latch/latch.go deleted file mode 100644 index a8ca718..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/latch/latch.go +++ /dev/null @@ -1,235 +0,0 @@ -// Copyright 2018 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package latch - -import ( - "math/bits" - "sort" - "sync" - - "github.com/cznic/mathutil" - "github.com/spaolacci/murmur3" -) - -// latch stores a key's waiting transactions information. -type latch struct { - // Whether there is any transaction in waitingQueue except head. - hasMoreWaiting bool - // The startTS of the transaction which is the head of waiting transactions. - waitingQueueHead uint64 - maxCommitTS uint64 - sync.Mutex -} - -func (l *latch) isEmpty() bool { - return l.waitingQueueHead == 0 && !l.hasMoreWaiting -} - -func (l *latch) free() { - l.waitingQueueHead = 0 -} - -func (l *latch) refreshCommitTS(commitTS uint64) { - l.Lock() - defer l.Unlock() - l.maxCommitTS = mathutil.MaxUint64(commitTS, l.maxCommitTS) -} - -// Lock is the locks' information required for a transaction. -type Lock struct { - // The slot IDs of the latches(keys) that a startTS must acquire before being able to processed. - requiredSlots []int - // The number of latches that the transaction has acquired. For status is stale, it include the - // latch whose front is current lock already. - acquiredCount int - // Current transaction's startTS. - startTS uint64 - // Current transaction's commitTS. - commitTS uint64 - - wg sync.WaitGroup - isStale bool -} - -// acquireResult is the result type for acquire() -type acquireResult int32 - -const ( - // acquireSuccess is a type constant for acquireResult. - // which means acquired success - acquireSuccess acquireResult = iota - // acquireLocked is a type constant for acquireResult - // which means still locked by other Lock. - acquireLocked - // acquireStale is a type constant for acquireResult - // which means current Lock's startTS is stale. - acquireStale -) - -// IsStale returns whether the status is stale. -func (l *Lock) IsStale() bool { - return l.isStale -} - -func (l *Lock) isLocked() bool { - return !l.isStale && l.acquiredCount != len(l.requiredSlots) -} - -// SetCommitTS sets the lock's commitTS. -func (l *Lock) SetCommitTS(commitTS uint64) { - l.commitTS = commitTS -} - -// Latches which are used for concurrency control. -// Each latch is indexed by a slot's ID, hence the term latch and slot are used in interchangeable, -// but conceptually a latch is a queue, and a slot is an index to the queue -type Latches struct { - slots []latch - // The waiting queue for each slot(slotID => slice of Lock). - waitingQueues map[int][]*Lock - sync.RWMutex -} - -// NewLatches create a Latches with fixed length, -// the size will be rounded up to the power of 2. -func NewLatches(size uint) *Latches { - powerOfTwoSize := 1 << uint32(bits.Len32(uint32(size-1))) - slots := make([]latch, powerOfTwoSize) - return &Latches{ - slots: slots, - waitingQueues: make(map[int][]*Lock), - } -} - -// genLock generates Lock for the transaction with startTS and keys. -func (latches *Latches) genLock(startTS uint64, keys [][]byte) *Lock { - return &Lock{ - requiredSlots: latches.genSlotIDs(keys), - acquiredCount: 0, - startTS: startTS, - } -} - -func (latches *Latches) genSlotIDs(keys [][]byte) []int { - slots := make([]int, 0, len(keys)) - for _, key := range keys { - slots = append(slots, latches.slotID(key)) - } - sort.Ints(slots) - if len(slots) <= 1 { - return slots - } - dedup := slots[:1] - for i := 1; i < len(slots); i++ { - if slots[i] != slots[i-1] { - dedup = append(dedup, slots[i]) - } - } - return dedup -} - -// slotID return slotID for current key. -func (latches *Latches) slotID(key []byte) int { - return int(murmur3.Sum32(key)) & (len(latches.slots) - 1) -} - -// acquire tries to acquire the lock for a transaction. -func (latches *Latches) acquire(lock *Lock) acquireResult { - if lock.IsStale() { - return acquireStale - } - for lock.acquiredCount < len(lock.requiredSlots) { - slotID := lock.requiredSlots[lock.acquiredCount] - status := latches.acquireSlot(slotID, lock) - if status != acquireSuccess { - return status - } - } - return acquireSuccess -} - -// release releases all latches owned by the `lock` and returns the wakeup list. -// Preconditions: the caller must ensure the transaction's status is not locked. -func (latches *Latches) release(lock *Lock, commitTS uint64, wakeupList []*Lock) []*Lock { - wakeupList = wakeupList[:0] - for i := 0; i < lock.acquiredCount; i++ { - slotID := lock.requiredSlots[i] - if nextLock := latches.releaseSlot(slotID, commitTS); nextLock != nil { - wakeupList = append(wakeupList, nextLock) - } - } - return wakeupList -} - -// refreshCommitTS refreshes commitTS for keys. -func (latches *Latches) refreshCommitTS(keys [][]byte, commitTS uint64) { - slotIDs := latches.genSlotIDs(keys) - for _, slotID := range slotIDs { - latches.slots[slotID].refreshCommitTS(commitTS) - } -} - -func (latches *Latches) releaseSlot(slotID int, commitTS uint64) (nextLock *Lock) { - latch := &latches.slots[slotID] - latch.Lock() - defer latch.Unlock() - latch.maxCommitTS = mathutil.MaxUint64(latch.maxCommitTS, commitTS) - if !latch.hasMoreWaiting { - latch.free() - return nil - } - nextLock, latch.hasMoreWaiting = latches.popFromWaitingQueue(slotID) - latch.waitingQueueHead = nextLock.startTS - nextLock.acquiredCount++ - if latch.maxCommitTS > nextLock.startTS { - nextLock.isStale = true - } - return nextLock -} - -func (latches *Latches) popFromWaitingQueue(slotID int) (front *Lock, hasMoreWaiting bool) { - latches.Lock() - defer latches.Unlock() - waiting := latches.waitingQueues[slotID] - front = waiting[0] - if len(waiting) == 1 { - delete(latches.waitingQueues, slotID) - } else { - latches.waitingQueues[slotID] = waiting[1:] - hasMoreWaiting = true - } - return -} - -func (latches *Latches) acquireSlot(slotID int, lock *Lock) acquireResult { - latch := &latches.slots[slotID] - latch.Lock() - defer latch.Unlock() - if latch.maxCommitTS > lock.startTS { - lock.isStale = true - return acquireStale - } - - if latch.isEmpty() { - latch.waitingQueueHead = lock.startTS - lock.acquiredCount++ - return acquireSuccess - } - // Push the current transaction into waitingQueue. - latch.hasMoreWaiting = true - latches.Lock() - defer latches.Unlock() - latches.waitingQueues[slotID] = append(latches.waitingQueues[slotID], lock) - return acquireLocked -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/latch/scheduler.go b/vendor/github.com/pingcap/tidb/store/tikv/latch/scheduler.go deleted file mode 100644 index f3ffad7..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/latch/scheduler.go +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2018 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package latch - -import ( - "sync" -) - -const lockChanSize = 100 - -// LatchesScheduler is used to schedule latches for transactions. -type LatchesScheduler struct { - latches *Latches - unlockCh chan *Lock - closed bool - sync.RWMutex -} - -// NewScheduler create the LatchesScheduler. -func NewScheduler(size uint) *LatchesScheduler { - latches := NewLatches(size) - unlockCh := make(chan *Lock, lockChanSize) - scheduler := &LatchesScheduler{ - latches: latches, - unlockCh: unlockCh, - closed: false, - } - go scheduler.run() - return scheduler -} - -func (scheduler *LatchesScheduler) run() { - wakeupList := make([]*Lock, 0) - for lock := range scheduler.unlockCh { - wakeupList = scheduler.latches.release(lock, lock.commitTS, wakeupList) - if len(wakeupList) > 0 { - scheduler.wakeup(wakeupList) - } - } -} - -func (scheduler *LatchesScheduler) wakeup(wakeupList []*Lock) { - for _, lock := range wakeupList { - if scheduler.latches.acquire(lock) != acquireLocked { - lock.wg.Done() - } - } -} - -// Close closes LatchesScheduler. -func (scheduler *LatchesScheduler) Close() { - scheduler.RWMutex.Lock() - defer scheduler.RWMutex.Unlock() - if !scheduler.closed { - close(scheduler.unlockCh) - scheduler.closed = true - } -} - -// Lock acquire the lock for transaction with startTS and keys. The caller goroutine -// would be blocked if the lock can't be obtained now. When this function returns, -// the lock state would be either success or stale(call lock.IsStale) -func (scheduler *LatchesScheduler) Lock(startTS uint64, keys [][]byte) *Lock { - lock := scheduler.latches.genLock(startTS, keys) - lock.wg.Add(1) - if scheduler.latches.acquire(lock) == acquireLocked { - lock.wg.Wait() - } - if lock.isLocked() { - panic("should never run here") - } - return lock -} - -// UnLock unlocks a lock. -func (scheduler *LatchesScheduler) UnLock(lock *Lock) { - scheduler.RLock() - defer scheduler.RUnlock() - if !scheduler.closed { - scheduler.unlockCh <- lock - } -} - -// RefreshCommitTS refreshes commitTS for keys. It could be used for the transaction not retryable, -// which would do 2PC directly and wouldn't get a lock. -func (scheduler *LatchesScheduler) RefreshCommitTS(keys [][]byte, commitTS uint64) { - scheduler.latches.refreshCommitTS(keys, commitTS) -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/lock_resolver.go b/vendor/github.com/pingcap/tidb/store/tikv/lock_resolver.go deleted file mode 100644 index 62710fd..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/lock_resolver.go +++ /dev/null @@ -1,397 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package tikv - -import ( - "container/list" - "fmt" - "sync" - "time" - - "github.com/juju/errors" - "github.com/pingcap/kvproto/pkg/kvrpcpb" - "github.com/pingcap/pd/pd-client" - "github.com/pingcap/tidb/config" - "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/store/tikv/tikvrpc" - log "github.com/sirupsen/logrus" - "golang.org/x/net/context" -) - -// ResolvedCacheSize is max number of cached txn status. -const ResolvedCacheSize = 2048 - -// LockResolver resolves locks and also caches resolved txn status. -type LockResolver struct { - store Storage - mu struct { - sync.RWMutex - // resolved caches resolved txns (FIFO, txn id -> txnStatus). - resolved map[uint64]TxnStatus - recentResolved *list.List - } -} - -func newLockResolver(store Storage) *LockResolver { - r := &LockResolver{ - store: store, - } - r.mu.resolved = make(map[uint64]TxnStatus) - r.mu.recentResolved = list.New() - return r -} - -// NewLockResolver creates a LockResolver. -// It is exported for other services to use. For instance, binlog service needs -// to determine a transaction's commit state. -func NewLockResolver(etcdAddrs []string, security config.Security) (*LockResolver, error) { - pdCli, err := pd.NewClient(etcdAddrs, pd.SecurityOption{ - CAPath: security.ClusterSSLCA, - CertPath: security.ClusterSSLCert, - KeyPath: security.ClusterSSLKey, - }) - if err != nil { - return nil, errors.Trace(err) - } - uuid := fmt.Sprintf("tikv-%v", pdCli.GetClusterID(context.TODO())) - - tlsConfig, err := security.ToTLSConfig() - if err != nil { - return nil, errors.Trace(err) - } - - spkv, err := NewEtcdSafePointKV(etcdAddrs, tlsConfig) - if err != nil { - return nil, errors.Trace(err) - } - - s, err := newTikvStore(uuid, &codecPDClient{pdCli}, spkv, newRPCClient(security), false) - if err != nil { - return nil, errors.Trace(err) - } - return s.lockResolver, nil -} - -// TxnStatus represents a txn's final status. It should be Commit or Rollback. -type TxnStatus uint64 - -// IsCommitted returns true if the txn's final status is Commit. -func (s TxnStatus) IsCommitted() bool { return s > 0 } - -// CommitTS returns the txn's commitTS. It is valid iff `IsCommitted` is true. -func (s TxnStatus) CommitTS() uint64 { return uint64(s) } - -// By default, locks after 3000ms is considered unusual (the client created the -// lock might be dead). Other client may cleanup this kind of lock. -// For locks created recently, we will do backoff and retry. -var defaultLockTTL uint64 = 3000 - -// TODO: Consider if it's appropriate. -var maxLockTTL uint64 = 120000 - -// ttl = ttlFactor * sqrt(writeSizeInMiB) -var ttlFactor = 6000 - -// Lock represents a lock from tikv server. -type Lock struct { - Key []byte - Primary []byte - TxnID uint64 - TTL uint64 -} - -// NewLock creates a new *Lock. -func NewLock(l *kvrpcpb.LockInfo) *Lock { - ttl := l.GetLockTtl() - if ttl == 0 { - ttl = defaultLockTTL - } - return &Lock{ - Key: l.GetKey(), - Primary: l.GetPrimaryLock(), - TxnID: l.GetLockVersion(), - TTL: ttl, - } -} - -func (lr *LockResolver) saveResolved(txnID uint64, status TxnStatus) { - lr.mu.Lock() - defer lr.mu.Unlock() - - if _, ok := lr.mu.resolved[txnID]; ok { - return - } - lr.mu.resolved[txnID] = status - lr.mu.recentResolved.PushBack(txnID) - if len(lr.mu.resolved) > ResolvedCacheSize { - front := lr.mu.recentResolved.Front() - delete(lr.mu.resolved, front.Value.(uint64)) - lr.mu.recentResolved.Remove(front) - } -} - -func (lr *LockResolver) getResolved(txnID uint64) (TxnStatus, bool) { - lr.mu.RLock() - defer lr.mu.RUnlock() - - s, ok := lr.mu.resolved[txnID] - return s, ok -} - -// BatchResolveLocks resolve locks in a batch -func (lr *LockResolver) BatchResolveLocks(bo *Backoffer, locks []*Lock, loc RegionVerID) (bool, error) { - if len(locks) == 0 { - return true, nil - } - - metrics.TiKVLockResolverCounter.WithLabelValues("batch_resolve").Inc() - - var expiredLocks []*Lock - for _, l := range locks { - if lr.store.GetOracle().IsExpired(l.TxnID, l.TTL) { - metrics.TiKVLockResolverCounter.WithLabelValues("expired").Inc() - expiredLocks = append(expiredLocks, l) - } else { - metrics.TiKVLockResolverCounter.WithLabelValues("not_expired").Inc() - } - } - if len(expiredLocks) != len(locks) { - log.Errorf("BatchResolveLocks: get %d Locks, but only %d are expired, maybe safe point is wrong!", len(locks), len(expiredLocks)) - return false, nil - } - - startTime := time.Now() - txnInfos := make(map[uint64]uint64) - for _, l := range expiredLocks { - if _, ok := txnInfos[l.TxnID]; ok { - continue - } - - status, err := lr.getTxnStatus(bo, l.TxnID, l.Primary) - if err != nil { - return false, errors.Trace(err) - } - txnInfos[l.TxnID] = uint64(status) - } - log.Infof("BatchResolveLocks: it took %v to lookup %v txn status", time.Since(startTime), len(txnInfos)) - - var listTxnInfos []*kvrpcpb.TxnInfo - for txnID, status := range txnInfos { - listTxnInfos = append(listTxnInfos, &kvrpcpb.TxnInfo{ - Txn: txnID, - Status: status, - }) - } - - req := &tikvrpc.Request{ - Type: tikvrpc.CmdResolveLock, - ResolveLock: &kvrpcpb.ResolveLockRequest{ - TxnInfos: listTxnInfos, - }, - } - startTime = time.Now() - resp, err := lr.store.SendReq(bo, req, loc, readTimeoutShort) - if err != nil { - return false, errors.Trace(err) - } - - regionErr, err := resp.GetRegionError() - if err != nil { - return false, errors.Trace(err) - } - - if regionErr != nil { - err = bo.Backoff(BoRegionMiss, errors.New(regionErr.String())) - if err != nil { - return false, errors.Trace(err) - } - return false, nil - } - - cmdResp := resp.ResolveLock - if cmdResp == nil { - return false, errors.Trace(ErrBodyMissing) - } - if keyErr := cmdResp.GetError(); keyErr != nil { - return false, errors.Errorf("unexpected resolve err: %s", keyErr) - } - - log.Infof("BatchResolveLocks: it took %v to resolve %v locks in a batch.", time.Since(startTime), len(expiredLocks)) - return true, nil -} - -// ResolveLocks tries to resolve Locks. The resolving process is in 3 steps: -// 1) Use the `lockTTL` to pick up all expired locks. Only locks that are too -// old are considered orphan locks and will be handled later. If all locks -// are expired then all locks will be resolved so the returned `ok` will be -// true, otherwise caller should sleep a while before retry. -// 2) For each lock, query the primary key to get txn(which left the lock)'s -// commit status. -// 3) Send `ResolveLock` cmd to the lock's region to resolve all locks belong to -// the same transaction. -func (lr *LockResolver) ResolveLocks(bo *Backoffer, locks []*Lock) (ok bool, err error) { - if len(locks) == 0 { - return true, nil - } - - metrics.TiKVLockResolverCounter.WithLabelValues("resolve").Inc() - - var expiredLocks []*Lock - for _, l := range locks { - if lr.store.GetOracle().IsExpired(l.TxnID, l.TTL) { - metrics.TiKVLockResolverCounter.WithLabelValues("expired").Inc() - expiredLocks = append(expiredLocks, l) - } else { - metrics.TiKVLockResolverCounter.WithLabelValues("not_expired").Inc() - } - } - if len(expiredLocks) == 0 { - return false, nil - } - - // TxnID -> []Region, record resolved Regions. - // TODO: Maybe put it in LockResolver and share by all txns. - cleanTxns := make(map[uint64]map[RegionVerID]struct{}) - for _, l := range expiredLocks { - status, err := lr.getTxnStatus(bo, l.TxnID, l.Primary) - if err != nil { - return false, errors.Trace(err) - } - - cleanRegions := cleanTxns[l.TxnID] - if cleanRegions == nil { - cleanRegions = make(map[RegionVerID]struct{}) - cleanTxns[l.TxnID] = cleanRegions - } - - err = lr.resolveLock(bo, l, status, cleanRegions) - if err != nil { - return false, errors.Trace(err) - } - } - return len(expiredLocks) == len(locks), nil -} - -// GetTxnStatus queries tikv-server for a txn's status (commit/rollback). -// If the primary key is still locked, it will launch a Rollback to abort it. -// To avoid unnecessarily aborting too many txns, it is wiser to wait a few -// seconds before calling it after Prewrite. -func (lr *LockResolver) GetTxnStatus(txnID uint64, primary []byte) (TxnStatus, error) { - bo := NewBackoffer(context.Background(), cleanupMaxBackoff) - status, err := lr.getTxnStatus(bo, txnID, primary) - return status, errors.Trace(err) -} - -func (lr *LockResolver) getTxnStatus(bo *Backoffer, txnID uint64, primary []byte) (TxnStatus, error) { - if s, ok := lr.getResolved(txnID); ok { - return s, nil - } - - metrics.TiKVLockResolverCounter.WithLabelValues("query_txn_status").Inc() - - var status TxnStatus - req := &tikvrpc.Request{ - Type: tikvrpc.CmdCleanup, - Cleanup: &kvrpcpb.CleanupRequest{ - Key: primary, - StartVersion: txnID, - }, - } - for { - loc, err := lr.store.GetRegionCache().LocateKey(bo, primary) - if err != nil { - return status, errors.Trace(err) - } - resp, err := lr.store.SendReq(bo, req, loc.Region, readTimeoutShort) - if err != nil { - return status, errors.Trace(err) - } - regionErr, err := resp.GetRegionError() - if err != nil { - return status, errors.Trace(err) - } - if regionErr != nil { - err = bo.Backoff(BoRegionMiss, errors.New(regionErr.String())) - if err != nil { - return status, errors.Trace(err) - } - continue - } - cmdResp := resp.Cleanup - if cmdResp == nil { - return status, errors.Trace(ErrBodyMissing) - } - if keyErr := cmdResp.GetError(); keyErr != nil { - err = errors.Errorf("unexpected cleanup err: %s, tid: %v", keyErr, txnID) - log.Error(err) - return status, err - } - if cmdResp.CommitVersion != 0 { - status = TxnStatus(cmdResp.GetCommitVersion()) - metrics.TiKVLockResolverCounter.WithLabelValues("query_txn_status_committed").Inc() - } else { - metrics.TiKVLockResolverCounter.WithLabelValues("query_txn_status_rolled_back").Inc() - } - lr.saveResolved(txnID, status) - return status, nil - } -} - -func (lr *LockResolver) resolveLock(bo *Backoffer, l *Lock, status TxnStatus, cleanRegions map[RegionVerID]struct{}) error { - metrics.TiKVLockResolverCounter.WithLabelValues("query_resolve_locks").Inc() - for { - loc, err := lr.store.GetRegionCache().LocateKey(bo, l.Key) - if err != nil { - return errors.Trace(err) - } - if _, ok := cleanRegions[loc.Region]; ok { - return nil - } - req := &tikvrpc.Request{ - Type: tikvrpc.CmdResolveLock, - ResolveLock: &kvrpcpb.ResolveLockRequest{ - StartVersion: l.TxnID, - }, - } - if status.IsCommitted() { - req.ResolveLock.CommitVersion = status.CommitTS() - } - resp, err := lr.store.SendReq(bo, req, loc.Region, readTimeoutShort) - if err != nil { - return errors.Trace(err) - } - regionErr, err := resp.GetRegionError() - if err != nil { - return errors.Trace(err) - } - if regionErr != nil { - err = bo.Backoff(BoRegionMiss, errors.New(regionErr.String())) - if err != nil { - return errors.Trace(err) - } - continue - } - cmdResp := resp.ResolveLock - if cmdResp == nil { - return errors.Trace(ErrBodyMissing) - } - if keyErr := cmdResp.GetError(); keyErr != nil { - err = errors.Errorf("unexpected resolve err: %s, lock: %v", keyErr, l) - log.Error(err) - return err - } - cleanRegions[loc.Region] = struct{}{} - return nil - } -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/oracle/oracle.go b/vendor/github.com/pingcap/tidb/store/tikv/oracle/oracle.go deleted file mode 100644 index b002d92..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/oracle/oracle.go +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package oracle - -import ( - "time" - - "golang.org/x/net/context" -) - -// Oracle is the interface that provides strictly ascending timestamps. -type Oracle interface { - GetTimestamp(ctx context.Context) (uint64, error) - GetTimestampAsync(ctx context.Context) Future - IsExpired(lockTimestamp uint64, TTL uint64) bool - Close() -} - -// Future is a future which promises to return a timestamp. -type Future interface { - Wait() (uint64, error) -} - -const physicalShiftBits = 18 - -// ComposeTS creates a ts from physical and logical parts. -func ComposeTS(physical, logical int64) uint64 { - return uint64((physical << physicalShiftBits) + logical) -} - -// ExtractPhysical returns a ts's physical part. -func ExtractPhysical(ts uint64) int64 { - return int64(ts >> physicalShiftBits) -} - -// GetPhysical returns physical from an instant time with millisecond precision. -func GetPhysical(t time.Time) int64 { - return t.UnixNano() / int64(time.Millisecond) -} - -// EncodeTSO encodes a millisecond into tso. -func EncodeTSO(ts int64) uint64 { - return uint64(ts) << physicalShiftBits -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/oracle/oracles/local.go b/vendor/github.com/pingcap/tidb/store/tikv/oracle/oracles/local.go deleted file mode 100644 index 6f9db40..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/oracle/oracles/local.go +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package oracles - -import ( - "sync" - "time" - - "github.com/pingcap/tidb/store/tikv/oracle" - "golang.org/x/net/context" -) - -var _ oracle.Oracle = &localOracle{} - -type localOracle struct { - sync.Mutex - lastTimeStampTS uint64 - n uint64 -} - -// NewLocalOracle creates an Oracle that uses local time as data source. -func NewLocalOracle() oracle.Oracle { - return &localOracle{} -} - -func (l *localOracle) IsExpired(lockTS uint64, TTL uint64) bool { - return oracle.GetPhysical(time.Now()) >= oracle.ExtractPhysical(lockTS)+int64(TTL) -} - -func (l *localOracle) GetTimestamp(context.Context) (uint64, error) { - l.Lock() - defer l.Unlock() - physical := oracle.GetPhysical(time.Now()) - ts := oracle.ComposeTS(physical, 0) - if l.lastTimeStampTS == ts { - l.n++ - return ts + l.n, nil - } - l.lastTimeStampTS = ts - l.n = 0 - return ts, nil -} - -func (l *localOracle) GetTimestampAsync(ctx context.Context) oracle.Future { - return &future{ - ctx: ctx, - l: l, - } -} - -type future struct { - ctx context.Context - l *localOracle -} - -func (f *future) Wait() (uint64, error) { - return f.l.GetTimestamp(f.ctx) -} - -func (l *localOracle) Close() { -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/oracle/oracles/metrics.go b/vendor/github.com/pingcap/tidb/store/tikv/oracle/oracles/metrics.go deleted file mode 100644 index ed4d21b..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/oracle/oracles/metrics.go +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package oracles - -import ( - "github.com/prometheus/client_golang/prometheus" -) - -var ( - tsFutureWaitDuration = prometheus.NewHistogram( - prometheus.HistogramOpts{ - Namespace: "tidb", - Subsystem: "pdclient", - Name: "ts_future_wait_seconds", - Help: "Bucketed histogram of seconds cost for waiting timestamp future.", - Buckets: prometheus.ExponentialBuckets(0.000005, 2, 18), // 5us ~ 128 ms - }) -) - -func init() { - prometheus.MustRegister(tsFutureWaitDuration) -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/oracle/oracles/pd.go b/vendor/github.com/pingcap/tidb/store/tikv/oracle/oracles/pd.go deleted file mode 100644 index 897b9ce..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/oracle/oracles/pd.go +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package oracles - -import ( - "sync/atomic" - "time" - - "github.com/juju/errors" - "github.com/pingcap/pd/pd-client" - "github.com/pingcap/tidb/store/tikv/oracle" - log "github.com/sirupsen/logrus" - "golang.org/x/net/context" -) - -var _ oracle.Oracle = &pdOracle{} - -const slowDist = 30 * time.Millisecond - -// pdOracle is an Oracle that uses a placement driver client as source. -type pdOracle struct { - c pd.Client - lastTS uint64 - quit chan struct{} -} - -// NewPdOracle create an Oracle that uses a pd client source. -// Refer https://github.com/pingcap/pd/blob/master/pd-client/client.go for more details. -// PdOracle mantains `lastTS` to store the last timestamp got from PD server. If -// `GetTimestamp()` is not called after `updateInterval`, it will be called by -// itself to keep up with the timestamp on PD server. -func NewPdOracle(pdClient pd.Client, updateInterval time.Duration) (oracle.Oracle, error) { - o := &pdOracle{ - c: pdClient, - quit: make(chan struct{}), - } - ctx := context.TODO() - go o.updateTS(ctx, updateInterval) - // Initialize lastTS by Get. - _, err := o.GetTimestamp(ctx) - if err != nil { - o.Close() - return nil, errors.Trace(err) - } - return o, nil -} - -// IsExpired returns whether lockTS+TTL is expired, both are ms. It uses `lastTS` -// to compare, may return false negative result temporarily. -func (o *pdOracle) IsExpired(lockTS, TTL uint64) bool { - lastTS := atomic.LoadUint64(&o.lastTS) - return oracle.ExtractPhysical(lastTS) >= oracle.ExtractPhysical(lockTS)+int64(TTL) -} - -// GetTimestamp gets a new increasing time. -func (o *pdOracle) GetTimestamp(ctx context.Context) (uint64, error) { - ts, err := o.getTimestamp(ctx) - if err != nil { - return 0, errors.Trace(err) - } - o.setLastTS(ts) - return ts, nil -} - -type tsFuture struct { - pd.TSFuture - o *pdOracle -} - -// Wait implements the oracle.Future interface. -func (f *tsFuture) Wait() (uint64, error) { - now := time.Now() - physical, logical, err := f.TSFuture.Wait() - tsFutureWaitDuration.Observe(time.Since(now).Seconds()) - if err != nil { - return 0, errors.Trace(err) - } - ts := oracle.ComposeTS(physical, logical) - f.o.setLastTS(ts) - return ts, nil -} - -func (o *pdOracle) GetTimestampAsync(ctx context.Context) oracle.Future { - ts := o.c.GetTSAsync(ctx) - return &tsFuture{ts, o} -} - -func (o *pdOracle) getTimestamp(ctx context.Context) (uint64, error) { - now := time.Now() - physical, logical, err := o.c.GetTS(ctx) - if err != nil { - return 0, errors.Trace(err) - } - dist := time.Since(now) - if dist > slowDist { - log.Warnf("get timestamp too slow: %s", dist) - } - return oracle.ComposeTS(physical, logical), nil -} - -func (o *pdOracle) setLastTS(ts uint64) { - lastTS := atomic.LoadUint64(&o.lastTS) - if ts > lastTS { - atomic.CompareAndSwapUint64(&o.lastTS, lastTS, ts) - } -} - -func (o *pdOracle) updateTS(ctx context.Context, interval time.Duration) { - ticker := time.NewTicker(interval) - for { - select { - case <-ticker.C: - ts, err := o.getTimestamp(ctx) - if err != nil { - log.Errorf("updateTS error: %v", err) - break - } - o.setLastTS(ts) - case <-o.quit: - ticker.Stop() - return - } - } -} - -func (o *pdOracle) Close() { - close(o.quit) -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/pd_codec.go b/vendor/github.com/pingcap/tidb/store/tikv/pd_codec.go deleted file mode 100644 index 173678d..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/pd_codec.go +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package tikv - -import ( - "github.com/juju/errors" - "github.com/pingcap/kvproto/pkg/metapb" - "github.com/pingcap/pd/pd-client" - "github.com/pingcap/tidb/util/codec" - "golang.org/x/net/context" -) - -type codecPDClient struct { - pd.Client -} - -// GetRegion encodes the key before send requests to pd-server and decodes the -// returned StartKey && EndKey from pd-server. -func (c *codecPDClient) GetRegion(ctx context.Context, key []byte) (*metapb.Region, *metapb.Peer, error) { - encodedKey := codec.EncodeBytes([]byte(nil), key) - region, peer, err := c.Client.GetRegion(ctx, encodedKey) - return processRegionResult(region, peer, err) -} - -// GetRegion encodes the key before send requests to pd-server and decodes the -// returned StartKey && EndKey from pd-server. -func (c *codecPDClient) GetRegionByID(ctx context.Context, regionID uint64) (*metapb.Region, *metapb.Peer, error) { - region, peer, err := c.Client.GetRegionByID(ctx, regionID) - return processRegionResult(region, peer, err) -} - -func processRegionResult(region *metapb.Region, peer *metapb.Peer, err error) (*metapb.Region, *metapb.Peer, error) { - if err != nil { - return nil, nil, errors.Trace(err) - } - if region == nil { - return nil, nil, nil - } - err = decodeRegionMetaKey(region) - if err != nil { - return nil, nil, errors.Trace(err) - } - return region, peer, nil -} - -func decodeRegionMetaKey(r *metapb.Region) error { - if len(r.StartKey) != 0 { - _, decoded, err := codec.DecodeBytes(r.StartKey, nil) - if err != nil { - return errors.Trace(err) - } - r.StartKey = decoded - } - if len(r.EndKey) != 0 { - _, decoded, err := codec.DecodeBytes(r.EndKey, nil) - if err != nil { - return errors.Trace(err) - } - r.EndKey = decoded - } - return nil -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/rawkv.go b/vendor/github.com/pingcap/tidb/store/tikv/rawkv.go deleted file mode 100644 index dad5426..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/rawkv.go +++ /dev/null @@ -1,300 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package tikv - -import ( - "bytes" - "time" - - "github.com/juju/errors" - "github.com/pingcap/kvproto/pkg/kvrpcpb" - "github.com/pingcap/pd/pd-client" - "github.com/pingcap/tidb/config" - "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/store/tikv/tikvrpc" - "golang.org/x/net/context" -) - -var ( - // MaxRawKVScanLimit is the maximum scan limit for rawkv Scan. - MaxRawKVScanLimit = 10240 - // ErrMaxScanLimitExceeded is returned when the limit for rawkv Scan is to large. - ErrMaxScanLimitExceeded = errors.New("limit should be less than MaxRawKVScanLimit") -) - -// RawKVClient is a client of TiKV server which is used as a key-value storage, -// only GET/PUT/DELETE commands are supported. -type RawKVClient struct { - clusterID uint64 - regionCache *RegionCache - pdClient pd.Client - rpcClient Client -} - -// NewRawKVClient creates a client with PD cluster addrs. -func NewRawKVClient(pdAddrs []string, security config.Security) (*RawKVClient, error) { - pdCli, err := pd.NewClient(pdAddrs, pd.SecurityOption{ - CAPath: security.ClusterSSLCA, - CertPath: security.ClusterSSLCert, - KeyPath: security.ClusterSSLKey, - }) - if err != nil { - return nil, errors.Trace(err) - } - return &RawKVClient{ - clusterID: pdCli.GetClusterID(context.TODO()), - regionCache: NewRegionCache(pdCli), - pdClient: pdCli, - rpcClient: newRPCClient(security), - }, nil -} - -// Close closes the client. -func (c *RawKVClient) Close() error { - c.pdClient.Close() - return c.rpcClient.Close() -} - -// ClusterID returns the TiKV cluster ID. -func (c *RawKVClient) ClusterID() uint64 { - return c.clusterID -} - -// Get queries value with the key. When the key does not exist, it returns `nil, nil`. -func (c *RawKVClient) Get(key []byte) ([]byte, error) { - start := time.Now() - defer func() { metrics.TiKVRawkvCmdHistogram.WithLabelValues("get").Observe(time.Since(start).Seconds()) }() - - req := &tikvrpc.Request{ - Type: tikvrpc.CmdRawGet, - RawGet: &kvrpcpb.RawGetRequest{ - Key: key, - }, - } - resp, _, err := c.sendReq(key, req) - if err != nil { - return nil, errors.Trace(err) - } - cmdResp := resp.RawGet - if cmdResp == nil { - return nil, errors.Trace(ErrBodyMissing) - } - if cmdResp.GetError() != "" { - return nil, errors.New(cmdResp.GetError()) - } - if len(cmdResp.Value) == 0 { - return nil, nil - } - return cmdResp.Value, nil -} - -// Put stores a key-value pair to TiKV. -func (c *RawKVClient) Put(key, value []byte) error { - start := time.Now() - defer func() { metrics.TiKVRawkvCmdHistogram.WithLabelValues("put").Observe(time.Since(start).Seconds()) }() - metrics.TiKVRawkvSizeHistogram.WithLabelValues("key").Observe(float64(len(key))) - metrics.TiKVRawkvSizeHistogram.WithLabelValues("value").Observe(float64(len(value))) - - if len(value) == 0 { - return errors.New("empty value is not supported") - } - - req := &tikvrpc.Request{ - Type: tikvrpc.CmdRawPut, - RawPut: &kvrpcpb.RawPutRequest{ - Key: key, - Value: value, - }, - } - resp, _, err := c.sendReq(key, req) - if err != nil { - return errors.Trace(err) - } - cmdResp := resp.RawPut - if cmdResp == nil { - return errors.Trace(ErrBodyMissing) - } - if cmdResp.GetError() != "" { - return errors.New(cmdResp.GetError()) - } - return nil -} - -// Delete deletes a key-value pair from TiKV. -func (c *RawKVClient) Delete(key []byte) error { - start := time.Now() - defer func() { metrics.TiKVRawkvCmdHistogram.WithLabelValues("delete").Observe(time.Since(start).Seconds()) }() - - req := &tikvrpc.Request{ - Type: tikvrpc.CmdRawDelete, - RawDelete: &kvrpcpb.RawDeleteRequest{ - Key: key, - }, - } - resp, _, err := c.sendReq(key, req) - if err != nil { - return errors.Trace(err) - } - cmdResp := resp.RawDelete - if cmdResp == nil { - return errors.Trace(ErrBodyMissing) - } - if cmdResp.GetError() != "" { - return errors.New(cmdResp.GetError()) - } - return nil -} - -// DeleteRange deletes all key-value pairs in a range from TiKV -func (c *RawKVClient) DeleteRange(startKey []byte, endKey []byte) error { - start := time.Now() - var err error - defer func() { - var label = "delete_range" - if err != nil { - label += "_error" - } - metrics.TiKVRawkvCmdHistogram.WithLabelValues(label).Observe(time.Since(start).Seconds()) - }() - - // Process each affected region respectively - for !bytes.Equal(startKey, endKey) { - var resp *tikvrpc.Response - var actualEndKey []byte - resp, actualEndKey, err = c.sendDeleteRangeReq(startKey, endKey) - if err != nil { - return errors.Trace(err) - } - cmdResp := resp.RawDeleteRange - if cmdResp == nil { - return errors.Trace(ErrBodyMissing) - } - if cmdResp.GetError() != "" { - return errors.New(cmdResp.GetError()) - } - startKey = actualEndKey - } - - return nil -} - -// Scan queries continuous kv pairs, starts from startKey, up to limit pairs. -// If you want to exclude the startKey, append a '\0' to the key: `Scan(append(startKey, '\0'), limit)`. -func (c *RawKVClient) Scan(startKey []byte, limit int) (keys [][]byte, values [][]byte, err error) { - start := time.Now() - defer func() { metrics.TiKVRawkvCmdHistogram.WithLabelValues("raw_scan").Observe(time.Since(start).Seconds()) }() - - if limit > MaxRawKVScanLimit { - return nil, nil, errors.Trace(ErrMaxScanLimitExceeded) - } - - for len(keys) < limit { - req := &tikvrpc.Request{ - Type: tikvrpc.CmdRawScan, - RawScan: &kvrpcpb.RawScanRequest{ - StartKey: startKey, - Limit: uint32(limit - len(keys)), - }, - } - resp, loc, err := c.sendReq(startKey, req) - if err != nil { - return nil, nil, errors.Trace(err) - } - cmdResp := resp.RawScan - if cmdResp == nil { - return nil, nil, errors.Trace(ErrBodyMissing) - } - for _, pair := range cmdResp.Kvs { - keys = append(keys, pair.Key) - values = append(values, pair.Value) - } - startKey = loc.EndKey - if len(startKey) == 0 { - break - } - } - return -} - -func (c *RawKVClient) sendReq(key []byte, req *tikvrpc.Request) (*tikvrpc.Response, *KeyLocation, error) { - bo := NewBackoffer(context.Background(), rawkvMaxBackoff) - sender := NewRegionRequestSender(c.regionCache, c.rpcClient) - for { - loc, err := c.regionCache.LocateKey(bo, key) - if err != nil { - return nil, nil, errors.Trace(err) - } - resp, err := sender.SendReq(bo, req, loc.Region, readTimeoutShort) - if err != nil { - return nil, nil, errors.Trace(err) - } - regionErr, err := resp.GetRegionError() - if err != nil { - return nil, nil, errors.Trace(err) - } - if regionErr != nil { - err := bo.Backoff(BoRegionMiss, errors.New(regionErr.String())) - if err != nil { - return nil, nil, errors.Trace(err) - } - continue - } - return resp, loc, nil - } -} - -// sendDeleteRangeReq sends a raw delete range request and returns the response and the actual endKey. -// If the given range spans over more than one regions, the actual endKey is the end of the first region. -// We can't use sendReq directly, because we need to know the end of the region before we send the request -// TODO: Is there any better way to avoid duplicating code with func `sendReq` ? -func (c *RawKVClient) sendDeleteRangeReq(startKey []byte, endKey []byte) (*tikvrpc.Response, []byte, error) { - bo := NewBackoffer(context.Background(), rawkvMaxBackoff) - sender := NewRegionRequestSender(c.regionCache, c.rpcClient) - for { - loc, err := c.regionCache.LocateKey(bo, startKey) - if err != nil { - return nil, nil, errors.Trace(err) - } - - actualEndKey := endKey - if len(loc.EndKey) > 0 && bytes.Compare(loc.EndKey, endKey) < 0 { - actualEndKey = loc.EndKey - } - - req := &tikvrpc.Request{ - Type: tikvrpc.CmdRawDeleteRange, - RawDeleteRange: &kvrpcpb.RawDeleteRangeRequest{ - StartKey: startKey, - EndKey: actualEndKey, - }, - } - - resp, err := sender.SendReq(bo, req, loc.Region, readTimeoutShort) - if err != nil { - return nil, nil, errors.Trace(err) - } - regionErr, err := resp.GetRegionError() - if err != nil { - return nil, nil, errors.Trace(err) - } - if regionErr != nil { - err := bo.Backoff(BoRegionMiss, errors.New(regionErr.String())) - if err != nil { - return nil, nil, errors.Trace(err) - } - continue - } - return resp, actualEndKey, nil - } -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/region_cache.go b/vendor/github.com/pingcap/tidb/store/tikv/region_cache.go deleted file mode 100644 index 259a9aa..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/region_cache.go +++ /dev/null @@ -1,611 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package tikv - -import ( - "bytes" - "sync" - "sync/atomic" - "time" - - "github.com/google/btree" - "github.com/juju/errors" - "github.com/pingcap/kvproto/pkg/kvrpcpb" - "github.com/pingcap/kvproto/pkg/metapb" - "github.com/pingcap/pd/pd-client" - "github.com/pingcap/tidb/metrics" - log "github.com/sirupsen/logrus" - "golang.org/x/net/context" -) - -const ( - btreeDegree = 32 - rcDefaultRegionCacheTTL = time.Minute * 10 -) - -// CachedRegion encapsulates {Region, TTL} -type CachedRegion struct { - region *Region - lastAccess int64 -} - -func (c *CachedRegion) isValid() bool { - lastAccess := atomic.LoadInt64(&c.lastAccess) - lastAccessTime := time.Unix(lastAccess, 0) - return time.Since(lastAccessTime) < rcDefaultRegionCacheTTL -} - -// RegionCache caches Regions loaded from PD. -type RegionCache struct { - pdClient pd.Client - - mu struct { - sync.RWMutex - regions map[RegionVerID]*CachedRegion - sorted *btree.BTree - } - storeMu struct { - sync.RWMutex - stores map[uint64]*Store - } -} - -// NewRegionCache creates a RegionCache. -func NewRegionCache(pdClient pd.Client) *RegionCache { - c := &RegionCache{ - pdClient: pdClient, - } - c.mu.regions = make(map[RegionVerID]*CachedRegion) - c.mu.sorted = btree.New(btreeDegree) - c.storeMu.stores = make(map[uint64]*Store) - return c -} - -// RPCContext contains data that is needed to send RPC to a region. -type RPCContext struct { - Region RegionVerID - Meta *metapb.Region - Peer *metapb.Peer - Addr string -} - -// GetStoreID returns StoreID. -func (c *RPCContext) GetStoreID() uint64 { - if c.Peer != nil { - return c.Peer.StoreId - } - return 0 -} - -// GetRPCContext returns RPCContext for a region. If it returns nil, the region -// must be out of date and already dropped from cache. -func (c *RegionCache) GetRPCContext(bo *Backoffer, id RegionVerID) (*RPCContext, error) { - c.mu.RLock() - region := c.getCachedRegion(id) - if region == nil { - c.mu.RUnlock() - return nil, nil - } - // Note: it is safe to use region.meta and region.peer without clone after - // unlock, because region cache will never update the content of region's meta - // or peer. On the contrary, if we want to use `region` after unlock, then we - // need to clone it to avoid data race. - meta, peer := region.meta, region.peer - c.mu.RUnlock() - - addr, err := c.GetStoreAddr(bo, peer.GetStoreId()) - if err != nil { - return nil, errors.Trace(err) - } - if addr == "" { - // Store not found, region must be out of date. - c.DropRegion(id) - return nil, nil - } - return &RPCContext{ - Region: id, - Meta: meta, - Peer: peer, - Addr: addr, - }, nil -} - -// KeyLocation is the region and range that a key is located. -type KeyLocation struct { - Region RegionVerID - StartKey []byte - EndKey []byte -} - -// Contains checks if key is in [StartKey, EndKey). -func (l *KeyLocation) Contains(key []byte) bool { - return bytes.Compare(l.StartKey, key) <= 0 && - (bytes.Compare(key, l.EndKey) < 0 || len(l.EndKey) == 0) -} - -// LocateKey searches for the region and range that the key is located. -func (c *RegionCache) LocateKey(bo *Backoffer, key []byte) (*KeyLocation, error) { - c.mu.RLock() - r := c.searchCachedRegion(key) - if r != nil { - loc := &KeyLocation{ - Region: r.VerID(), - StartKey: r.StartKey(), - EndKey: r.EndKey(), - } - c.mu.RUnlock() - return loc, nil - } - c.mu.RUnlock() - - r, err := c.loadRegion(bo, key) - if err != nil { - return nil, errors.Trace(err) - } - - c.mu.Lock() - defer c.mu.Unlock() - c.insertRegionToCache(r) - - return &KeyLocation{ - Region: r.VerID(), - StartKey: r.StartKey(), - EndKey: r.EndKey(), - }, nil -} - -// LocateRegionByID searches for the region with ID. -func (c *RegionCache) LocateRegionByID(bo *Backoffer, regionID uint64) (*KeyLocation, error) { - c.mu.RLock() - r := c.getRegionByIDFromCache(regionID) - if r != nil { - loc := &KeyLocation{ - Region: r.VerID(), - StartKey: r.StartKey(), - EndKey: r.EndKey(), - } - c.mu.RUnlock() - return loc, nil - } - c.mu.RUnlock() - - r, err := c.loadRegionByID(bo, regionID) - if err != nil { - return nil, errors.Trace(err) - } - - c.mu.Lock() - defer c.mu.Unlock() - c.insertRegionToCache(r) - return &KeyLocation{ - Region: r.VerID(), - StartKey: r.StartKey(), - EndKey: r.EndKey(), - }, nil -} - -// GroupKeysByRegion separates keys into groups by their belonging Regions. -// Specially it also returns the first key's region which may be used as the -// 'PrimaryLockKey' and should be committed ahead of others. -func (c *RegionCache) GroupKeysByRegion(bo *Backoffer, keys [][]byte) (map[RegionVerID][][]byte, RegionVerID, error) { - groups := make(map[RegionVerID][][]byte) - var first RegionVerID - var lastLoc *KeyLocation - for i, k := range keys { - if lastLoc == nil || !lastLoc.Contains(k) { - var err error - lastLoc, err = c.LocateKey(bo, k) - if err != nil { - return nil, first, errors.Trace(err) - } - } - id := lastLoc.Region - if i == 0 { - first = id - } - groups[id] = append(groups[id], k) - } - return groups, first, nil -} - -// ListRegionIDsInKeyRange lists ids of regions in [start_key,end_key]. -func (c *RegionCache) ListRegionIDsInKeyRange(bo *Backoffer, startKey, endKey []byte) (regionIDs []uint64, err error) { - for { - curRegion, err := c.LocateKey(bo, startKey) - if err != nil { - return nil, errors.Trace(err) - } - regionIDs = append(regionIDs, curRegion.Region.id) - if curRegion.Contains(endKey) { - break - } - startKey = curRegion.EndKey - } - return regionIDs, nil -} - -// DropRegion removes a cached Region. -func (c *RegionCache) DropRegion(id RegionVerID) { - c.mu.Lock() - defer c.mu.Unlock() - c.dropRegionFromCache(id) -} - -// UpdateLeader update some region cache with newer leader info. -func (c *RegionCache) UpdateLeader(regionID RegionVerID, leaderStoreID uint64) { - c.mu.Lock() - defer c.mu.Unlock() - - r := c.getCachedRegion(regionID) - if r == nil { - log.Debugf("regionCache: cannot find region when updating leader %d,%d", regionID, leaderStoreID) - return - } - - if !r.SwitchPeer(leaderStoreID) { - log.Debugf("regionCache: cannot find peer when updating leader %d,%d", regionID, leaderStoreID) - c.dropRegionFromCache(r.VerID()) - } -} - -// insertRegionToCache tries to insert the Region to cache. -func (c *RegionCache) insertRegionToCache(r *Region) { - old := c.mu.sorted.ReplaceOrInsert(newBtreeItem(r)) - if old != nil { - delete(c.mu.regions, old.(*btreeItem).region.VerID()) - } - c.mu.regions[r.VerID()] = &CachedRegion{ - region: r, - lastAccess: time.Now().Unix(), - } -} - -// getCachedRegion loads a region from cache. It also checks if the region has -// not been accessed for a long time (maybe out of date). In this case, it -// returns nil so the region will be loaded from PD again. -// Note that it should be called with c.mu.RLock(), and the returned Region -// should not be used after c.mu is RUnlock(). -func (c *RegionCache) getCachedRegion(id RegionVerID) *Region { - cachedRegion, ok := c.mu.regions[id] - if !ok { - return nil - } - if cachedRegion.isValid() { - atomic.StoreInt64(&cachedRegion.lastAccess, time.Now().Unix()) - return cachedRegion.region - } - return nil -} - -// searchCachedRegion finds a region from cache by key. Like `getCachedRegion`, -// it should be called with c.mu.RLock(), and the returned Region should not be -// used after c.mu is RUnlock(). -func (c *RegionCache) searchCachedRegion(key []byte) *Region { - var r *Region - c.mu.sorted.DescendLessOrEqual(newBtreeSearchItem(key), func(item btree.Item) bool { - r = item.(*btreeItem).region - return false - }) - if r != nil && r.Contains(key) { - return c.getCachedRegion(r.VerID()) - } - return nil -} - -// getRegionByIDFromCache tries to get region by regionID from cache. Like -// `getCachedRegion`, it should be called with c.mu.RLock(), and the returned -// Region should not be used after c.mu is RUnlock(). -func (c *RegionCache) getRegionByIDFromCache(regionID uint64) *Region { - for v, r := range c.mu.regions { - if v.id == regionID { - return r.region - } - } - return nil -} - -func (c *RegionCache) dropRegionFromCache(verID RegionVerID) { - r, ok := c.mu.regions[verID] - if !ok { - return - } - metrics.TiKVRegionCacheCounter.WithLabelValues("drop_region_from_cache", metrics.RetLabel(nil)).Inc() - c.mu.sorted.Delete(newBtreeItem(r.region)) - delete(c.mu.regions, verID) -} - -// loadRegion loads region from pd client, and picks the first peer as leader. -func (c *RegionCache) loadRegion(bo *Backoffer, key []byte) (*Region, error) { - var backoffErr error - for { - if backoffErr != nil { - err := bo.Backoff(boPDRPC, backoffErr) - if err != nil { - return nil, errors.Trace(err) - } - } - meta, leader, err := c.pdClient.GetRegion(bo.ctx, key) - metrics.TiKVRegionCacheCounter.WithLabelValues("get_region", metrics.RetLabel(err)).Inc() - if err != nil { - backoffErr = errors.Errorf("loadRegion from PD failed, key: %q, err: %v", key, err) - continue - } - if meta == nil { - backoffErr = errors.Errorf("region not found for key %q", key) - continue - } - if len(meta.Peers) == 0 { - return nil, errors.New("receive Region with no peer") - } - region := &Region{ - meta: meta, - peer: meta.Peers[0], - } - if leader != nil { - region.SwitchPeer(leader.GetStoreId()) - } - return region, nil - } -} - -// loadRegionByID loads region from pd client, and picks the first peer as leader. -func (c *RegionCache) loadRegionByID(bo *Backoffer, regionID uint64) (*Region, error) { - var backoffErr error - for { - if backoffErr != nil { - err := bo.Backoff(boPDRPC, backoffErr) - if err != nil { - return nil, errors.Trace(err) - } - } - meta, leader, err := c.pdClient.GetRegionByID(bo.ctx, regionID) - metrics.TiKVRegionCacheCounter.WithLabelValues("get_region_by_id", metrics.RetLabel(err)).Inc() - if err != nil { - backoffErr = errors.Errorf("loadRegion from PD failed, regionID: %v, err: %v", regionID, err) - continue - } - if meta == nil { - backoffErr = errors.Errorf("region not found for regionID %q", regionID) - continue - } - if len(meta.Peers) == 0 { - return nil, errors.New("receive Region with no peer") - } - region := &Region{ - meta: meta, - peer: meta.Peers[0], - } - if leader != nil { - region.SwitchPeer(leader.GetStoreId()) - } - return region, nil - } -} - -// GetStoreAddr returns a tikv server's address by its storeID. It checks cache -// first, sends request to pd server when necessary. -func (c *RegionCache) GetStoreAddr(bo *Backoffer, id uint64) (string, error) { - c.storeMu.RLock() - if store, ok := c.storeMu.stores[id]; ok { - c.storeMu.RUnlock() - return store.Addr, nil - } - c.storeMu.RUnlock() - return c.ReloadStoreAddr(bo, id) -} - -// ReloadStoreAddr reloads store's address. -func (c *RegionCache) ReloadStoreAddr(bo *Backoffer, id uint64) (string, error) { - addr, err := c.loadStoreAddr(bo, id) - if err != nil || addr == "" { - return "", errors.Trace(err) - } - - c.storeMu.Lock() - defer c.storeMu.Unlock() - c.storeMu.stores[id] = &Store{ - ID: id, - Addr: addr, - } - return addr, nil -} - -// ClearStoreByID clears store from cache with storeID. -func (c *RegionCache) ClearStoreByID(id uint64) { - c.storeMu.Lock() - defer c.storeMu.Unlock() - delete(c.storeMu.stores, id) -} - -func (c *RegionCache) loadStoreAddr(bo *Backoffer, id uint64) (string, error) { - for { - store, err := c.pdClient.GetStore(bo.ctx, id) - metrics.TiKVRegionCacheCounter.WithLabelValues("get_store", metrics.RetLabel(err)).Inc() - if err != nil { - if errors.Cause(err) == context.Canceled { - return "", errors.Trace(err) - } - err = errors.Errorf("loadStore from PD failed, id: %d, err: %v", id, err) - if err = bo.Backoff(boPDRPC, err); err != nil { - return "", errors.Trace(err) - } - continue - } - if store == nil { - return "", nil - } - return store.GetAddress(), nil - } -} - -// DropStoreOnSendRequestFail is used for clearing cache when a tikv server does not respond. -func (c *RegionCache) DropStoreOnSendRequestFail(ctx *RPCContext, err error) { - // We need to drop the store only when the request is the first one failed on this store. - // Because too many concurrently requests trying to drop the store will be blocked on the lock. - failedRegionID := ctx.Region - failedStoreID := ctx.Peer.StoreId - c.mu.Lock() - _, ok := c.mu.regions[failedRegionID] - if !ok { - // The failed region is dropped already by another request, we don't need to iterate the regions - // and find regions on the failed store to drop. - c.mu.Unlock() - return - } - for id, r := range c.mu.regions { - if r.region.peer.GetStoreId() == failedStoreID { - c.dropRegionFromCache(id) - } - } - c.mu.Unlock() - - // Store's meta may be out of date. - var failedStoreAddr string - c.storeMu.Lock() - store, ok := c.storeMu.stores[failedStoreID] - if ok { - failedStoreAddr = store.Addr - delete(c.storeMu.stores, failedStoreID) - } - c.storeMu.Unlock() - log.Infof("drop regions that on the store %d(%s) due to send request fail, err: %v", - failedStoreID, failedStoreAddr, err) -} - -// OnRegionStale removes the old region and inserts new regions into the cache. -func (c *RegionCache) OnRegionStale(ctx *RPCContext, newRegions []*metapb.Region) error { - c.mu.Lock() - defer c.mu.Unlock() - - c.dropRegionFromCache(ctx.Region) - - for _, meta := range newRegions { - if _, ok := c.pdClient.(*codecPDClient); ok { - if err := decodeRegionMetaKey(meta); err != nil { - return errors.Errorf("newRegion's range key is not encoded: %v, %v", meta, err) - } - } - region := &Region{ - meta: meta, - peer: meta.Peers[0], - } - region.SwitchPeer(ctx.Peer.GetStoreId()) - c.insertRegionToCache(region) - } - return nil -} - -// PDClient returns the pd.Client in RegionCache. -func (c *RegionCache) PDClient() pd.Client { - return c.pdClient -} - -// btreeItem is BTree's Item that uses []byte to compare. -type btreeItem struct { - key []byte - region *Region -} - -func newBtreeItem(r *Region) *btreeItem { - return &btreeItem{ - key: r.StartKey(), - region: r, - } -} - -func newBtreeSearchItem(key []byte) *btreeItem { - return &btreeItem{ - key: key, - } -} - -func (item *btreeItem) Less(other btree.Item) bool { - return bytes.Compare(item.key, other.(*btreeItem).key) < 0 -} - -// Region stores region's meta and its leader peer. -type Region struct { - meta *metapb.Region - peer *metapb.Peer -} - -// GetID returns id. -func (r *Region) GetID() uint64 { - return r.meta.GetId() -} - -// RegionVerID is a unique ID that can identify a Region at a specific version. -type RegionVerID struct { - id uint64 - confVer uint64 - ver uint64 -} - -// GetID returns the id of the region -func (r *RegionVerID) GetID() uint64 { - return r.id -} - -// VerID returns the Region's RegionVerID. -func (r *Region) VerID() RegionVerID { - return RegionVerID{ - id: r.meta.GetId(), - confVer: r.meta.GetRegionEpoch().GetConfVer(), - ver: r.meta.GetRegionEpoch().GetVersion(), - } -} - -// StartKey returns StartKey. -func (r *Region) StartKey() []byte { - return r.meta.StartKey -} - -// EndKey returns EndKey. -func (r *Region) EndKey() []byte { - return r.meta.EndKey -} - -// GetContext constructs kvprotopb.Context from region info. -func (r *Region) GetContext() *kvrpcpb.Context { - return &kvrpcpb.Context{ - RegionId: r.meta.Id, - RegionEpoch: r.meta.RegionEpoch, - Peer: r.peer, - } -} - -// SwitchPeer switches current peer to the one on specific store. It returns -// false if no peer matches the storeID. -func (r *Region) SwitchPeer(storeID uint64) bool { - for _, p := range r.meta.Peers { - if p.GetStoreId() == storeID { - r.peer = p - return true - } - } - return false -} - -// Contains checks whether the key is in the region, for the maximum region endKey is empty. -// startKey <= key < endKey. -func (r *Region) Contains(key []byte) bool { - return bytes.Compare(r.meta.GetStartKey(), key) <= 0 && - (bytes.Compare(key, r.meta.GetEndKey()) < 0 || len(r.meta.GetEndKey()) == 0) -} - -// Store contains a tikv server's address. -type Store struct { - ID uint64 - Addr string -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/region_request.go b/vendor/github.com/pingcap/tidb/store/tikv/region_request.go deleted file mode 100644 index e9747bd..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/region_request.go +++ /dev/null @@ -1,251 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package tikv - -import ( - "time" - - "github.com/juju/errors" - "github.com/pingcap/kvproto/pkg/errorpb" - "github.com/pingcap/kvproto/pkg/kvrpcpb" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/store/tikv/tikvrpc" - log "github.com/sirupsen/logrus" - "golang.org/x/net/context" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" -) - -// RegionRequestSender sends KV/Cop requests to tikv server. It handles network -// errors and some region errors internally. -// -// Typically, a KV/Cop request is bind to a region, all keys that are involved -// in the request should be located in the region. -// The sending process begins with looking for the address of leader store's -// address of the target region from cache, and the request is then sent to the -// destination tikv server over TCP connection. -// If region is updated, can be caused by leader transfer, region split, region -// merge, or region balance, tikv server may not able to process request and -// send back a RegionError. -// RegionRequestSender takes care of errors that does not relevant to region -// range, such as 'I/O timeout', 'NotLeader', and 'ServerIsBusy'. For other -// errors, since region range have changed, the request may need to split, so we -// simply return the error to caller. -type RegionRequestSender struct { - regionCache *RegionCache - client Client - storeAddr string - rpcError error -} - -// NewRegionRequestSender creates a new sender. -func NewRegionRequestSender(regionCache *RegionCache, client Client) *RegionRequestSender { - return &RegionRequestSender{ - regionCache: regionCache, - client: client, - } -} - -// SendReq sends a request to tikv server. -func (s *RegionRequestSender) SendReq(bo *Backoffer, req *tikvrpc.Request, regionID RegionVerID, timeout time.Duration) (*tikvrpc.Response, error) { - - // gofail: var tikvStoreSendReqResult string - // switch tikvStoreSendReqResult { - // case "timeout": - // return nil, errors.New("timeout") - // case "GCNotLeader": - // if req.Type == tikvrpc.CmdGC { - // return &tikvrpc.Response{ - // Type: tikvrpc.CmdGC, - // GC: &kvrpcpb.GCResponse{RegionError: &errorpb.Error{NotLeader: &errorpb.NotLeader{}}}, - // }, nil - // } - // case "GCServerIsBusy": - // if req.Type == tikvrpc.CmdGC { - // return &tikvrpc.Response{ - // Type: tikvrpc.CmdGC, - // GC: &kvrpcpb.GCResponse{RegionError: &errorpb.Error{ServerIsBusy: &errorpb.ServerIsBusy{}}}, - // }, nil - // } - // } - - for { - ctx, err := s.regionCache.GetRPCContext(bo, regionID) - if err != nil { - return nil, errors.Trace(err) - } - if ctx == nil { - // If the region is not found in cache, it must be out - // of date and already be cleaned up. We can skip the - // RPC by returning RegionError directly. - - // TODO: Change the returned error to something like "region missing in cache", - // and handle this error like StaleEpoch, which means to re-split the request and retry. - return tikvrpc.GenRegionErrorResp(req, &errorpb.Error{StaleEpoch: &errorpb.StaleEpoch{}}) - } - - s.storeAddr = ctx.Addr - resp, retry, err := s.sendReqToRegion(bo, ctx, req, timeout) - if err != nil { - return nil, errors.Trace(err) - } - if retry { - continue - } - - regionErr, err := resp.GetRegionError() - if err != nil { - return nil, errors.Trace(err) - } - if regionErr != nil { - retry, err := s.onRegionError(bo, ctx, regionErr) - if err != nil { - return nil, errors.Trace(err) - } - if retry { - continue - } - } - return resp, nil - } -} - -func (s *RegionRequestSender) sendReqToRegion(bo *Backoffer, ctx *RPCContext, req *tikvrpc.Request, timeout time.Duration) (resp *tikvrpc.Response, retry bool, err error) { - if e := tikvrpc.SetContext(req, ctx.Meta, ctx.Peer); e != nil { - return nil, false, errors.Trace(e) - } - resp, err = s.client.SendRequest(bo.ctx, ctx.Addr, req, timeout) - if err != nil { - s.rpcError = err - if e := s.onSendFail(bo, ctx, err); e != nil { - return nil, false, errors.Trace(e) - } - return nil, true, nil - } - return -} - -func (s *RegionRequestSender) onSendFail(bo *Backoffer, ctx *RPCContext, err error) error { - // If it failed because the context is cancelled by ourself, don't retry. - if errors.Cause(err) == context.Canceled { - return errors.Trace(err) - } - if grpc.Code(errors.Cause(err)) == codes.Canceled { - select { - case <-bo.ctx.Done(): - return errors.Trace(err) - default: - // If we don't cancel, but the error code is Canceled, it must be from grpc remote. - // This may happen when tikv is killed and exiting. - // Backoff and retry in this case. - log.Warn("receive a grpc cancel signal from remote:", errors.ErrorStack(err)) - } - } - - s.regionCache.DropStoreOnSendRequestFail(ctx, err) - - // Retry on send request failure when it's not canceled. - // When a store is not available, the leader of related region should be elected quickly. - // TODO: the number of retry time should be limited:since region may be unavailable - // when some unrecoverable disaster happened. - err = bo.Backoff(boTiKVRPC, errors.Errorf("send tikv request error: %v, ctx: %v, try next peer later", err, ctx)) - return errors.Trace(err) -} - -func regionErrorToLabel(e *errorpb.Error) string { - if e.GetNotLeader() != nil { - return "not_leader" - } else if e.GetRegionNotFound() != nil { - return "region_not_found" - } else if e.GetKeyNotInRegion() != nil { - return "key_not_in_region" - } else if e.GetStaleEpoch() != nil { - return "stale_epoch" - } else if e.GetServerIsBusy() != nil { - return "server_is_busy" - } else if e.GetStaleCommand() != nil { - return "stale_command" - } else if e.GetStoreNotMatch() != nil { - return "store_not_match" - } - return "unknown" -} - -func (s *RegionRequestSender) onRegionError(bo *Backoffer, ctx *RPCContext, regionErr *errorpb.Error) (retry bool, err error) { - metrics.TiKVRegionErrorCounter.WithLabelValues(regionErrorToLabel(regionErr)).Inc() - if notLeader := regionErr.GetNotLeader(); notLeader != nil { - // Retry if error is `NotLeader`. - log.Debugf("tikv reports `NotLeader`: %s, ctx: %v, retry later", notLeader, ctx) - s.regionCache.UpdateLeader(ctx.Region, notLeader.GetLeader().GetStoreId()) - - var boType backoffType - if notLeader.GetLeader() != nil { - boType = BoUpdateLeader - } else { - boType = BoRegionMiss - } - - if err = bo.Backoff(boType, errors.Errorf("not leader: %v, ctx: %v", notLeader, ctx)); err != nil { - return false, errors.Trace(err) - } - - return true, nil - } - - if storeNotMatch := regionErr.GetStoreNotMatch(); storeNotMatch != nil { - // store not match - log.Warnf("tikv reports `StoreNotMatch`: %s, ctx: %v, retry later", storeNotMatch, ctx) - s.regionCache.ClearStoreByID(ctx.GetStoreID()) - return true, nil - } - - if staleEpoch := regionErr.GetStaleEpoch(); staleEpoch != nil { - log.Debugf("tikv reports `StaleEpoch`, ctx: %v, retry later", ctx) - err = s.regionCache.OnRegionStale(ctx, staleEpoch.NewRegions) - return false, errors.Trace(err) - } - if regionErr.GetServerIsBusy() != nil { - log.Warnf("tikv reports `ServerIsBusy`, reason: %s, ctx: %v, retry later", regionErr.GetServerIsBusy().GetReason(), ctx) - err = bo.Backoff(boServerBusy, errors.Errorf("server is busy, ctx: %v", ctx)) - if err != nil { - return false, errors.Trace(err) - } - return true, nil - } - if regionErr.GetStaleCommand() != nil { - log.Debugf("tikv reports `StaleCommand`, ctx: %v", ctx) - return true, nil - } - if regionErr.GetRaftEntryTooLarge() != nil { - log.Warnf("tikv reports `RaftEntryTooLarge`, ctx: %v", ctx) - return false, errors.New(regionErr.String()) - } - // For other errors, we only drop cache here. - // Because caller may need to re-split the request. - log.Debugf("tikv reports region error: %s, ctx: %v", regionErr, ctx) - s.regionCache.DropRegion(ctx.Region) - return false, nil -} - -func pbIsolationLevel(level kv.IsoLevel) kvrpcpb.IsolationLevel { - switch level { - case kv.RC: - return kvrpcpb.IsolationLevel_RC - case kv.SI: - return kvrpcpb.IsolationLevel_SI - default: - return kvrpcpb.IsolationLevel_SI - } -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/safepoint.go b/vendor/github.com/pingcap/tidb/store/tikv/safepoint.go deleted file mode 100644 index 5bca238..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/safepoint.go +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package tikv - -import ( - "crypto/tls" - "strconv" - "sync" - "time" - - "github.com/coreos/etcd/clientv3" - "github.com/juju/errors" - log "github.com/sirupsen/logrus" - "golang.org/x/net/context" -) - -// Safe point constants. -const ( - // This is almost the same as 'tikv_gc_safe_point' in the table 'mysql.tidb', - // save this to pd instead of tikv, because we can't use interface of table - // if the safepoint on tidb is expired. - GcSavedSafePoint = "/tidb/store/gcworker/saved_safe_point" - - GcSafePointCacheInterval = time.Second * 100 - gcCPUTimeInaccuracyBound = time.Second - gcSafePointUpdateInterval = time.Second * 10 - gcSafePointQuickRepeatInterval = time.Second -) - -// SafePointKV is used for a seamingless integration for mockTest and runtime. -type SafePointKV interface { - Put(k string, v string) error - Get(k string) (string, error) -} - -// MockSafePointKV implements SafePointKV at mock test -type MockSafePointKV struct { - store map[string]string - mockLock sync.RWMutex -} - -// NewMockSafePointKV creates an instance of MockSafePointKV -func NewMockSafePointKV() *MockSafePointKV { - return &MockSafePointKV{ - store: make(map[string]string), - } -} - -// Put implements the Put method for SafePointKV -func (w *MockSafePointKV) Put(k string, v string) error { - w.mockLock.Lock() - defer w.mockLock.Unlock() - w.store[k] = v - return nil -} - -// Get implements the Get method for SafePointKV -func (w *MockSafePointKV) Get(k string) (string, error) { - w.mockLock.RLock() - defer w.mockLock.RUnlock() - elem, _ := w.store[k] - return elem, nil -} - -// EtcdSafePointKV implements SafePointKV at runtime -type EtcdSafePointKV struct { - cli *clientv3.Client -} - -// NewEtcdSafePointKV creates an instance of EtcdSafePointKV -func NewEtcdSafePointKV(addrs []string, tlsConfig *tls.Config) (*EtcdSafePointKV, error) { - etcdCli, err := createEtcdKV(addrs, tlsConfig) - if err != nil { - return nil, errors.Trace(err) - } - return &EtcdSafePointKV{cli: etcdCli}, nil -} - -// Put implements the Put method for SafePointKV -func (w *EtcdSafePointKV) Put(k string, v string) error { - ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) - _, err := w.cli.Put(ctx, k, v) - cancel() - if err != nil { - return errors.Trace(err) - } - return nil -} - -// Get implements the Get method for SafePointKV -func (w *EtcdSafePointKV) Get(k string) (string, error) { - ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) - resp, err := w.cli.Get(ctx, k) - cancel() - if err != nil { - return "", errors.Trace(err) - } - if len(resp.Kvs) > 0 { - return string(resp.Kvs[0].Value), nil - } - return "", nil -} - -func saveSafePoint(kv SafePointKV, key string, t uint64) error { - s := strconv.FormatUint(t, 10) - err := kv.Put(GcSavedSafePoint, s) - if err != nil { - log.Error("save safepoint failed:", err) - return errors.Trace(err) - } - return nil -} - -func loadSafePoint(kv SafePointKV, key string) (uint64, error) { - str, err := kv.Get(GcSavedSafePoint) - - if err != nil { - return 0, errors.Trace(err) - } - - if str == "" { - return 0, nil - } - - t, err := strconv.ParseUint(str, 10, 64) - if err != nil { - return 0, errors.Trace(err) - } - return t, nil -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/scan.go b/vendor/github.com/pingcap/tidb/store/tikv/scan.go deleted file mode 100644 index d8e57dc..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/scan.go +++ /dev/null @@ -1,211 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package tikv - -import ( - "github.com/juju/errors" - pb "github.com/pingcap/kvproto/pkg/kvrpcpb" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/store/tikv/tikvrpc" - log "github.com/sirupsen/logrus" - "golang.org/x/net/context" -) - -// Scanner support tikv scan -type Scanner struct { - snapshot *tikvSnapshot - batchSize int - valid bool - cache []*pb.KvPair - idx int - nextStartKey []byte - eof bool -} - -func newScanner(snapshot *tikvSnapshot, startKey []byte, batchSize int) (*Scanner, error) { - // It must be > 1. Otherwise scanner won't skipFirst. - if batchSize <= 1 { - batchSize = scanBatchSize - } - scanner := &Scanner{ - snapshot: snapshot, - batchSize: batchSize, - valid: true, - nextStartKey: startKey, - } - err := scanner.Next() - if kv.IsErrNotFound(err) { - return scanner, nil - } - return scanner, errors.Trace(err) -} - -// Valid return valid. -func (s *Scanner) Valid() bool { - return s.valid -} - -// Key return key. -func (s *Scanner) Key() kv.Key { - if s.valid { - return s.cache[s.idx].Key - } - return nil -} - -// Value return value. -func (s *Scanner) Value() []byte { - if s.valid { - return s.cache[s.idx].Value - } - return nil -} - -// Next return next element. -func (s *Scanner) Next() error { - bo := NewBackoffer(context.Background(), scannerNextMaxBackoff) - if !s.valid { - return errors.New("scanner iterator is invalid") - } - for { - s.idx++ - if s.idx >= len(s.cache) { - if s.eof { - s.Close() - return nil - } - err := s.getData(bo) - if err != nil { - s.Close() - return errors.Trace(err) - } - if s.idx >= len(s.cache) { - continue - } - } - if err := s.resolveCurrentLock(bo); err != nil { - s.Close() - return errors.Trace(err) - } - if len(s.Value()) == 0 { - // nil stands for NotExist, go to next KV pair. - continue - } - return nil - } -} - -// Close close iterator. -func (s *Scanner) Close() { - s.valid = false -} - -func (s *Scanner) startTS() uint64 { - return s.snapshot.version.Ver -} - -func (s *Scanner) resolveCurrentLock(bo *Backoffer) error { - current := s.cache[s.idx] - if current.GetError() == nil { - return nil - } - val, err := s.snapshot.get(bo, kv.Key(current.Key)) - if err != nil { - return errors.Trace(err) - } - current.Error = nil - current.Value = val - return nil -} - -func (s *Scanner) getData(bo *Backoffer) error { - log.Debugf("txn getData nextStartKey[%q], txn %d", s.nextStartKey, s.startTS()) - sender := NewRegionRequestSender(s.snapshot.store.regionCache, s.snapshot.store.client) - - for { - loc, err := s.snapshot.store.regionCache.LocateKey(bo, s.nextStartKey) - if err != nil { - return errors.Trace(err) - } - req := &tikvrpc.Request{ - Type: tikvrpc.CmdScan, - Scan: &pb.ScanRequest{ - StartKey: s.nextStartKey, - Limit: uint32(s.batchSize), - Version: s.startTS(), - }, - Context: pb.Context{ - IsolationLevel: pbIsolationLevel(s.snapshot.isolationLevel), - Priority: s.snapshot.priority, - NotFillCache: s.snapshot.notFillCache, - }, - } - resp, err := sender.SendReq(bo, req, loc.Region, ReadTimeoutMedium) - if err != nil { - return errors.Trace(err) - } - regionErr, err := resp.GetRegionError() - if err != nil { - return errors.Trace(err) - } - if regionErr != nil { - log.Debugf("scanner getData failed: %s", regionErr) - err = bo.Backoff(BoRegionMiss, errors.New(regionErr.String())) - if err != nil { - return errors.Trace(err) - } - continue - } - cmdScanResp := resp.Scan - if cmdScanResp == nil { - return errors.Trace(ErrBodyMissing) - } - - err = s.snapshot.store.CheckVisibility(s.startTS()) - if err != nil { - return errors.Trace(err) - } - - kvPairs := cmdScanResp.Pairs - // Check if kvPair contains error, it should be a Lock. - for _, pair := range kvPairs { - if keyErr := pair.GetError(); keyErr != nil { - lock, err := extractLockFromKeyErr(keyErr) - if err != nil { - return errors.Trace(err) - } - pair.Key = lock.Key - } - } - - s.cache, s.idx = kvPairs, 0 - if len(kvPairs) < s.batchSize { - // No more data in current Region. Next getData() starts - // from current Region's endKey. - s.nextStartKey = loc.EndKey - if len(loc.EndKey) == 0 { - // Current Region is the last one. - s.eof = true - } - return nil - } - // next getData() starts from the last key in kvPairs (but skip - // it by appending a '\x00' to the key). Note that next getData() - // may get an empty response if the Region in fact does not have - // more data. - lastKey := kvPairs[len(kvPairs)-1].GetKey() - s.nextStartKey = kv.Key(lastKey).Next() - return nil - } -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/snapshot.go b/vendor/github.com/pingcap/tidb/store/tikv/snapshot.go deleted file mode 100644 index 2c91c3b..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/snapshot.go +++ /dev/null @@ -1,346 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package tikv - -import ( - "bytes" - "fmt" - "sync" - "time" - "unsafe" - - "github.com/juju/errors" - pb "github.com/pingcap/kvproto/pkg/kvrpcpb" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/store/tikv/tikvrpc" - "github.com/pingcap/tidb/tablecodec" - "github.com/pingcap/tidb/util/goroutine_pool" - log "github.com/sirupsen/logrus" - "golang.org/x/net/context" -) - -var ( - _ kv.Snapshot = (*tikvSnapshot)(nil) -) - -const ( - scanBatchSize = 256 - batchGetSize = 5120 -) - -// tikvSnapshot implements the kv.Snapshot interface. -type tikvSnapshot struct { - store *tikvStore - version kv.Version - isolationLevel kv.IsoLevel - priority pb.CommandPri - notFillCache bool - syncLog bool - vars *kv.Variables -} - -var snapshotGP = gp.New(time.Minute) - -// newTiKVSnapshot creates a snapshot of an TiKV store. -func newTiKVSnapshot(store *tikvStore, ver kv.Version) *tikvSnapshot { - return &tikvSnapshot{ - store: store, - version: ver, - isolationLevel: kv.SI, - priority: pb.CommandPri_Normal, - vars: kv.DefaultVars, - } -} - -func (s *tikvSnapshot) SetPriority(priority int) { - s.priority = pb.CommandPri(priority) -} - -// BatchGet gets all the keys' value from kv-server and returns a map contains key/value pairs. -// The map will not contain nonexistent keys. -func (s *tikvSnapshot) BatchGet(keys []kv.Key) (map[string][]byte, error) { - metrics.TiKVTxnCmdCounter.WithLabelValues("batch_get").Inc() - start := time.Now() - defer func() { metrics.TiKVTxnCmdHistogram.WithLabelValues("batch_get").Observe(time.Since(start).Seconds()) }() - - // We want [][]byte instead of []kv.Key, use some magic to save memory. - bytesKeys := *(*[][]byte)(unsafe.Pointer(&keys)) - bo := NewBackoffer(context.Background(), batchGetMaxBackoff).WithVars(s.vars) - - // Create a map to collect key-values from region servers. - var mu sync.Mutex - m := make(map[string][]byte) - err := s.batchGetKeysByRegions(bo, bytesKeys, func(k, v []byte) { - if len(v) == 0 { - return - } - mu.Lock() - m[string(k)] = v - mu.Unlock() - }) - if err != nil { - return nil, errors.Trace(err) - } - - err = s.store.CheckVisibility(s.version.Ver) - if err != nil { - return nil, errors.Trace(err) - } - - return m, nil -} - -func (s *tikvSnapshot) batchGetKeysByRegions(bo *Backoffer, keys [][]byte, collectF func(k, v []byte)) error { - groups, _, err := s.store.regionCache.GroupKeysByRegion(bo, keys) - if err != nil { - return errors.Trace(err) - } - - metrics.TiKVTxnRegionsNumHistogram.WithLabelValues("snapshot").Observe(float64(len(groups))) - - var batches []batchKeys - for id, g := range groups { - batches = appendBatchBySize(batches, id, g, func([]byte) int { return 1 }, batchGetSize) - } - - if len(batches) == 0 { - return nil - } - if len(batches) == 1 { - return errors.Trace(s.batchGetSingleRegion(bo, batches[0], collectF)) - } - ch := make(chan error) - for _, batch1 := range batches { - batch := batch1 - snapshotGP.Go(func() { - backoffer, cancel := bo.Fork() - defer cancel() - ch <- s.batchGetSingleRegion(backoffer, batch, collectF) - }) - } - for i := 0; i < len(batches); i++ { - if e := <-ch; e != nil { - log.Debugf("snapshot batchGet failed: %v, tid: %d", e, s.version.Ver) - err = e - } - } - return errors.Trace(err) -} - -func (s *tikvSnapshot) batchGetSingleRegion(bo *Backoffer, batch batchKeys, collectF func(k, v []byte)) error { - sender := NewRegionRequestSender(s.store.regionCache, s.store.client) - - pending := batch.keys - for { - req := &tikvrpc.Request{ - Type: tikvrpc.CmdBatchGet, - BatchGet: &pb.BatchGetRequest{ - Keys: pending, - Version: s.version.Ver, - }, - Context: pb.Context{ - Priority: s.priority, - IsolationLevel: pbIsolationLevel(s.isolationLevel), - NotFillCache: s.notFillCache, - }, - } - resp, err := sender.SendReq(bo, req, batch.region, ReadTimeoutMedium) - if err != nil { - return errors.Trace(err) - } - regionErr, err := resp.GetRegionError() - if err != nil { - return errors.Trace(err) - } - if regionErr != nil { - err = bo.Backoff(BoRegionMiss, errors.New(regionErr.String())) - if err != nil { - return errors.Trace(err) - } - err = s.batchGetKeysByRegions(bo, pending, collectF) - return errors.Trace(err) - } - batchGetResp := resp.BatchGet - if batchGetResp == nil { - return errors.Trace(ErrBodyMissing) - } - var ( - lockedKeys [][]byte - locks []*Lock - ) - for _, pair := range batchGetResp.Pairs { - keyErr := pair.GetError() - if keyErr == nil { - collectF(pair.GetKey(), pair.GetValue()) - continue - } - lock, err := extractLockFromKeyErr(keyErr) - if err != nil { - return errors.Trace(err) - } - lockedKeys = append(lockedKeys, lock.Key) - locks = append(locks, lock) - } - if len(lockedKeys) > 0 { - ok, err := s.store.lockResolver.ResolveLocks(bo, locks) - if err != nil { - return errors.Trace(err) - } - if !ok { - err = bo.Backoff(boTxnLockFast, errors.Errorf("batchGet lockedKeys: %d", len(lockedKeys))) - if err != nil { - return errors.Trace(err) - } - } - pending = lockedKeys - continue - } - return nil - } -} - -// Get gets the value for key k from snapshot. -func (s *tikvSnapshot) Get(k kv.Key) ([]byte, error) { - val, err := s.get(NewBackoffer(context.Background(), getMaxBackoff), k) - if err != nil { - return nil, errors.Trace(err) - } - if len(val) == 0 { - return nil, kv.ErrNotExist - } - return val, nil -} - -func (s *tikvSnapshot) get(bo *Backoffer, k kv.Key) ([]byte, error) { - sender := NewRegionRequestSender(s.store.regionCache, s.store.client) - - req := &tikvrpc.Request{ - Type: tikvrpc.CmdGet, - Get: &pb.GetRequest{ - Key: k, - Version: s.version.Ver, - }, - Context: pb.Context{ - Priority: s.priority, - IsolationLevel: pbIsolationLevel(s.isolationLevel), - NotFillCache: s.notFillCache, - }, - } - for { - loc, err := s.store.regionCache.LocateKey(bo, k) - if err != nil { - return nil, errors.Trace(err) - } - resp, err := sender.SendReq(bo, req, loc.Region, readTimeoutShort) - if err != nil { - return nil, errors.Trace(err) - } - regionErr, err := resp.GetRegionError() - if err != nil { - return nil, errors.Trace(err) - } - if regionErr != nil { - err = bo.Backoff(BoRegionMiss, errors.New(regionErr.String())) - if err != nil { - return nil, errors.Trace(err) - } - continue - } - cmdGetResp := resp.Get - if cmdGetResp == nil { - return nil, errors.Trace(ErrBodyMissing) - } - val := cmdGetResp.GetValue() - if keyErr := cmdGetResp.GetError(); keyErr != nil { - lock, err := extractLockFromKeyErr(keyErr) - if err != nil { - return nil, errors.Trace(err) - } - ok, err := s.store.lockResolver.ResolveLocks(bo, []*Lock{lock}) - if err != nil { - return nil, errors.Trace(err) - } - if !ok { - err = bo.Backoff(boTxnLockFast, errors.New(keyErr.String())) - if err != nil { - return nil, errors.Trace(err) - } - } - continue - } - return val, nil - } -} - -// Seek return a list of key-value pair after `k`. -func (s *tikvSnapshot) Seek(k kv.Key) (kv.Iterator, error) { - scanner, err := newScanner(s, k, scanBatchSize) - return scanner, errors.Trace(err) -} - -// SeekReverse creates a reversed Iterator positioned on the first entry which key is less than k. -func (s *tikvSnapshot) SeekReverse(k kv.Key) (kv.Iterator, error) { - return nil, kv.ErrNotImplemented -} - -func extractLockFromKeyErr(keyErr *pb.KeyError) (*Lock, error) { - if locked := keyErr.GetLocked(); locked != nil { - return NewLock(locked), nil - } - if keyErr.Conflict != nil { - err := errors.New(conflictToString(keyErr.Conflict)) - return nil, errors.Annotate(err, txnRetryableMark) - } - if keyErr.Retryable != "" { - err := errors.Errorf("tikv restarts txn: %s", keyErr.GetRetryable()) - log.Debug(err) - return nil, errors.Annotate(err, txnRetryableMark) - } - if keyErr.Abort != "" { - err := errors.Errorf("tikv aborts txn: %s", keyErr.GetAbort()) - log.Warn(err) - return nil, errors.Trace(err) - } - return nil, errors.Errorf("unexpected KeyError: %s", keyErr.String()) -} - -func conflictToString(conflict *pb.WriteConflict) string { - var buf bytes.Buffer - fmt.Fprintf(&buf, "WriteConflict: startTS=%d, conflictTS=%d, key=", conflict.StartTs, conflict.ConflictTs) - prettyWriteKey(&buf, conflict.Key) - buf.WriteString(" primary=") - prettyWriteKey(&buf, conflict.Primary) - return buf.String() -} - -func prettyWriteKey(buf *bytes.Buffer, key []byte) { - tableID, indexID, indexValues, err := tablecodec.DecodeIndexKey(key) - if err == nil { - fmt.Fprintf(buf, "{tableID=%d, indexID=%d, indexValues={", tableID, indexID) - for _, v := range indexValues { - fmt.Fprintf(buf, "%s, ", v) - } - buf.WriteString("}}") - return - } - - tableID, handle, err := tablecodec.DecodeRecordKey(key) - if err == nil { - fmt.Fprintf(buf, "{tableID=%d, handle=%d}", tableID, handle) - return - } - - fmt.Fprintf(buf, "%#v", key) -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/split_region.go b/vendor/github.com/pingcap/tidb/store/tikv/split_region.go deleted file mode 100644 index 9c24c80..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/split_region.go +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package tikv - -import ( - "bytes" - - "github.com/juju/errors" - "github.com/pingcap/kvproto/pkg/kvrpcpb" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/store/tikv/tikvrpc" - log "github.com/sirupsen/logrus" - "golang.org/x/net/context" -) - -// SplitRegion splits the region contains splitKey into 2 regions: [start, -// splitKey) and [splitKey, end). -func (s *tikvStore) SplitRegion(splitKey kv.Key) error { - log.Infof("start split_region at %q", splitKey) - bo := NewBackoffer(context.Background(), splitRegionBackoff) - sender := NewRegionRequestSender(s.regionCache, s.client) - req := &tikvrpc.Request{ - Type: tikvrpc.CmdSplitRegion, - SplitRegion: &kvrpcpb.SplitRegionRequest{ - SplitKey: splitKey, - }, - } - req.Context.Priority = kvrpcpb.CommandPri_Normal - for { - loc, err := s.regionCache.LocateKey(bo, splitKey) - if err != nil { - return errors.Trace(err) - } - if bytes.Equal(splitKey, loc.StartKey) { - log.Infof("skip split_region region at %q", splitKey) - return nil - } - res, err := sender.SendReq(bo, req, loc.Region, readTimeoutShort) - if err != nil { - return errors.Trace(err) - } - regionErr, err := res.GetRegionError() - if err != nil { - return errors.Trace(err) - } - if regionErr != nil { - err := bo.Backoff(BoRegionMiss, errors.New(regionErr.String())) - if err != nil { - return errors.Trace(err) - } - continue - } - log.Infof("split_region at %q complete, new regions: %v, %v", splitKey, res.SplitRegion.GetLeft(), res.SplitRegion.GetRight()) - return nil - } -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/test_util.go b/vendor/github.com/pingcap/tidb/store/tikv/test_util.go deleted file mode 100644 index 01b4eb7..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/test_util.go +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package tikv - -import ( - "github.com/juju/errors" - "github.com/pingcap/pd/pd-client" - "github.com/pingcap/tidb/kv" - "github.com/twinj/uuid" -) - -// NewTestTiKVStore creates a test store with Option -func NewTestTiKVStore(client Client, pdClient pd.Client, clientHijack func(Client) Client, pdClientHijack func(pd.Client) pd.Client, txnLocalLatches uint) (kv.Storage, error) { - if clientHijack != nil { - client = clientHijack(client) - } - - pdCli := pd.Client(&codecPDClient{pdClient}) - if pdClientHijack != nil { - pdCli = pdClientHijack(pdCli) - } - - // Make sure the uuid is unique. - uid := uuid.NewV4().String() - spkv := NewMockSafePointKV() - tikvStore, err := newTikvStore(uid, pdCli, spkv, client, false) - - if txnLocalLatches > 0 { - tikvStore.EnableTxnLocalLatches(txnLocalLatches) - } - - tikvStore.mock = true - return tikvStore, errors.Trace(err) -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/tikvrpc/tikvrpc.go b/vendor/github.com/pingcap/tidb/store/tikv/tikvrpc/tikvrpc.go deleted file mode 100644 index 6862c4b..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/tikvrpc/tikvrpc.go +++ /dev/null @@ -1,497 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package tikvrpc - -import ( - "fmt" - "sync/atomic" - "time" - - "github.com/juju/errors" - "github.com/pingcap/kvproto/pkg/coprocessor" - "github.com/pingcap/kvproto/pkg/errorpb" - "github.com/pingcap/kvproto/pkg/kvrpcpb" - "github.com/pingcap/kvproto/pkg/metapb" - "github.com/pingcap/kvproto/pkg/tikvpb" - "golang.org/x/net/context" -) - -// CmdType represents the concrete request type in Request or response type in Response. -type CmdType uint16 - -// CmdType values. -const ( - CmdGet CmdType = 1 + iota - CmdScan - CmdPrewrite - CmdCommit - CmdCleanup - CmdBatchGet - CmdBatchRollback - CmdScanLock - CmdResolveLock - CmdGC - CmdDeleteRange - - CmdRawGet CmdType = 256 + iota - CmdRawPut - CmdRawDelete - CmdRawDeleteRange - CmdRawScan - - CmdCop CmdType = 512 + iota - CmdCopStream - - CmdMvccGetByKey CmdType = 1024 + iota - CmdMvccGetByStartTs - CmdSplitRegion -) - -func (t CmdType) String() string { - switch t { - case CmdGet: - return "Get" - case CmdScan: - return "Scan" - case CmdPrewrite: - return "Prewrite" - case CmdCommit: - return "Commit" - case CmdCleanup: - return "Cleanup" - case CmdBatchGet: - return "BatchGet" - case CmdBatchRollback: - return "BatchRollback" - case CmdScanLock: - return "ScanLock" - case CmdResolveLock: - return "ResolveLock" - case CmdGC: - return "GC" - case CmdDeleteRange: - return "DeleteRange" - case CmdRawGet: - return "RawGet" - case CmdRawPut: - return "RawPut" - case CmdRawDelete: - return "RawDelete" - case CmdRawDeleteRange: - return "RawDeleteRange" - case CmdRawScan: - return "RawScan" - case CmdCop: - return "Cop" - case CmdCopStream: - return "CopStream" - case CmdMvccGetByKey: - return "MvccGetByKey" - case CmdMvccGetByStartTs: - return "MvccGetByStartTS" - case CmdSplitRegion: - return "SplitRegion" - } - return "Unknown" -} - -// Request wraps all kv/coprocessor requests. -type Request struct { - kvrpcpb.Context - Type CmdType - Get *kvrpcpb.GetRequest - Scan *kvrpcpb.ScanRequest - Prewrite *kvrpcpb.PrewriteRequest - Commit *kvrpcpb.CommitRequest - Cleanup *kvrpcpb.CleanupRequest - BatchGet *kvrpcpb.BatchGetRequest - BatchRollback *kvrpcpb.BatchRollbackRequest - ScanLock *kvrpcpb.ScanLockRequest - ResolveLock *kvrpcpb.ResolveLockRequest - GC *kvrpcpb.GCRequest - DeleteRange *kvrpcpb.DeleteRangeRequest - RawGet *kvrpcpb.RawGetRequest - RawPut *kvrpcpb.RawPutRequest - RawDelete *kvrpcpb.RawDeleteRequest - RawDeleteRange *kvrpcpb.RawDeleteRangeRequest - RawScan *kvrpcpb.RawScanRequest - Cop *coprocessor.Request - MvccGetByKey *kvrpcpb.MvccGetByKeyRequest - MvccGetByStartTs *kvrpcpb.MvccGetByStartTsRequest - SplitRegion *kvrpcpb.SplitRegionRequest -} - -// Response wraps all kv/coprocessor responses. -type Response struct { - Type CmdType - Get *kvrpcpb.GetResponse - Scan *kvrpcpb.ScanResponse - Prewrite *kvrpcpb.PrewriteResponse - Commit *kvrpcpb.CommitResponse - Cleanup *kvrpcpb.CleanupResponse - BatchGet *kvrpcpb.BatchGetResponse - BatchRollback *kvrpcpb.BatchRollbackResponse - ScanLock *kvrpcpb.ScanLockResponse - ResolveLock *kvrpcpb.ResolveLockResponse - GC *kvrpcpb.GCResponse - DeleteRange *kvrpcpb.DeleteRangeResponse - RawGet *kvrpcpb.RawGetResponse - RawPut *kvrpcpb.RawPutResponse - RawDelete *kvrpcpb.RawDeleteResponse - RawDeleteRange *kvrpcpb.RawDeleteRangeResponse - RawScan *kvrpcpb.RawScanResponse - Cop *coprocessor.Response - CopStream *CopStreamResponse - MvccGetByKey *kvrpcpb.MvccGetByKeyResponse - MvccGetByStartTS *kvrpcpb.MvccGetByStartTsResponse - SplitRegion *kvrpcpb.SplitRegionResponse -} - -// CopStreamResponse combinates tikvpb.Tikv_CoprocessorStreamClient and the first Recv() result together. -// In streaming API, get grpc stream client may not involve any network packet, then region error have -// to be handled in Recv() function. This struct facilitates the error handling. -type CopStreamResponse struct { - tikvpb.Tikv_CoprocessorStreamClient - *coprocessor.Response // The first result of Recv() - Timeout time.Duration - Lease // Shared by this object and a background goroutine. -} - -// SetContext set the Context field for the given req to the specified ctx. -func SetContext(req *Request, region *metapb.Region, peer *metapb.Peer) error { - ctx := &req.Context - ctx.RegionId = region.Id - ctx.RegionEpoch = region.RegionEpoch - ctx.Peer = peer - - switch req.Type { - case CmdGet: - req.Get.Context = ctx - case CmdScan: - req.Scan.Context = ctx - case CmdPrewrite: - req.Prewrite.Context = ctx - case CmdCommit: - req.Commit.Context = ctx - case CmdCleanup: - req.Cleanup.Context = ctx - case CmdBatchGet: - req.BatchGet.Context = ctx - case CmdBatchRollback: - req.BatchRollback.Context = ctx - case CmdScanLock: - req.ScanLock.Context = ctx - case CmdResolveLock: - req.ResolveLock.Context = ctx - case CmdGC: - req.GC.Context = ctx - case CmdDeleteRange: - req.DeleteRange.Context = ctx - case CmdRawGet: - req.RawGet.Context = ctx - case CmdRawPut: - req.RawPut.Context = ctx - case CmdRawDelete: - req.RawDelete.Context = ctx - case CmdRawDeleteRange: - req.RawDeleteRange.Context = ctx - case CmdRawScan: - req.RawScan.Context = ctx - case CmdCop: - req.Cop.Context = ctx - case CmdCopStream: - req.Cop.Context = ctx - case CmdMvccGetByKey: - req.MvccGetByKey.Context = ctx - case CmdMvccGetByStartTs: - req.MvccGetByStartTs.Context = ctx - case CmdSplitRegion: - req.SplitRegion.Context = ctx - default: - return fmt.Errorf("invalid request type %v", req.Type) - } - return nil -} - -// GenRegionErrorResp returns corresponding Response with specified RegionError -// according to the given req. -func GenRegionErrorResp(req *Request, e *errorpb.Error) (*Response, error) { - resp := &Response{} - resp.Type = req.Type - switch req.Type { - case CmdGet: - resp.Get = &kvrpcpb.GetResponse{ - RegionError: e, - } - case CmdScan: - resp.Scan = &kvrpcpb.ScanResponse{ - RegionError: e, - } - case CmdPrewrite: - resp.Prewrite = &kvrpcpb.PrewriteResponse{ - RegionError: e, - } - case CmdCommit: - resp.Commit = &kvrpcpb.CommitResponse{ - RegionError: e, - } - case CmdCleanup: - resp.Cleanup = &kvrpcpb.CleanupResponse{ - RegionError: e, - } - case CmdBatchGet: - resp.BatchGet = &kvrpcpb.BatchGetResponse{ - RegionError: e, - } - case CmdBatchRollback: - resp.BatchRollback = &kvrpcpb.BatchRollbackResponse{ - RegionError: e, - } - case CmdScanLock: - resp.ScanLock = &kvrpcpb.ScanLockResponse{ - RegionError: e, - } - case CmdResolveLock: - resp.ResolveLock = &kvrpcpb.ResolveLockResponse{ - RegionError: e, - } - case CmdGC: - resp.GC = &kvrpcpb.GCResponse{ - RegionError: e, - } - case CmdDeleteRange: - resp.DeleteRange = &kvrpcpb.DeleteRangeResponse{ - RegionError: e, - } - case CmdRawGet: - resp.RawGet = &kvrpcpb.RawGetResponse{ - RegionError: e, - } - case CmdRawPut: - resp.RawPut = &kvrpcpb.RawPutResponse{ - RegionError: e, - } - case CmdRawDelete: - resp.RawDelete = &kvrpcpb.RawDeleteResponse{ - RegionError: e, - } - case CmdRawDeleteRange: - resp.RawDeleteRange = &kvrpcpb.RawDeleteRangeResponse{ - RegionError: e, - } - case CmdRawScan: - resp.RawScan = &kvrpcpb.RawScanResponse{ - RegionError: e, - } - case CmdCop: - resp.Cop = &coprocessor.Response{ - RegionError: e, - } - case CmdCopStream: - resp.CopStream = &CopStreamResponse{ - Response: &coprocessor.Response{ - RegionError: e, - }, - } - case CmdMvccGetByKey: - resp.MvccGetByKey = &kvrpcpb.MvccGetByKeyResponse{ - RegionError: e, - } - case CmdMvccGetByStartTs: - resp.MvccGetByStartTS = &kvrpcpb.MvccGetByStartTsResponse{ - RegionError: e, - } - case CmdSplitRegion: - resp.SplitRegion = &kvrpcpb.SplitRegionResponse{ - RegionError: e, - } - default: - return nil, fmt.Errorf("invalid request type %v", req.Type) - } - return resp, nil -} - -// GetRegionError returns the RegionError of the underlying concrete response. -func (resp *Response) GetRegionError() (*errorpb.Error, error) { - var e *errorpb.Error - switch resp.Type { - case CmdGet: - e = resp.Get.GetRegionError() - case CmdScan: - e = resp.Scan.GetRegionError() - case CmdPrewrite: - e = resp.Prewrite.GetRegionError() - case CmdCommit: - e = resp.Commit.GetRegionError() - case CmdCleanup: - e = resp.Cleanup.GetRegionError() - case CmdBatchGet: - e = resp.BatchGet.GetRegionError() - case CmdBatchRollback: - e = resp.BatchRollback.GetRegionError() - case CmdScanLock: - e = resp.ScanLock.GetRegionError() - case CmdResolveLock: - e = resp.ResolveLock.GetRegionError() - case CmdGC: - e = resp.GC.GetRegionError() - case CmdDeleteRange: - e = resp.DeleteRange.GetRegionError() - case CmdRawGet: - e = resp.RawGet.GetRegionError() - case CmdRawPut: - e = resp.RawPut.GetRegionError() - case CmdRawDelete: - e = resp.RawDelete.GetRegionError() - case CmdRawDeleteRange: - e = resp.RawDeleteRange.GetRegionError() - case CmdRawScan: - e = resp.RawScan.GetRegionError() - case CmdCop: - e = resp.Cop.GetRegionError() - case CmdCopStream: - e = resp.CopStream.Response.GetRegionError() - case CmdMvccGetByKey: - e = resp.MvccGetByKey.GetRegionError() - case CmdMvccGetByStartTs: - e = resp.MvccGetByStartTS.GetRegionError() - case CmdSplitRegion: - e = resp.SplitRegion.GetRegionError() - default: - return nil, fmt.Errorf("invalid response type %v", resp.Type) - } - return e, nil -} - -// CallRPC launches a rpc call. -// ch is needed to implement timeout for coprocessor streaing, the stream object's -// cancel function will be sent to the channel, together with a lease checked by a background goroutine. -func CallRPC(ctx context.Context, client tikvpb.TikvClient, req *Request) (*Response, error) { - resp := &Response{} - resp.Type = req.Type - var err error - switch req.Type { - case CmdGet: - resp.Get, err = client.KvGet(ctx, req.Get) - case CmdScan: - resp.Scan, err = client.KvScan(ctx, req.Scan) - case CmdPrewrite: - resp.Prewrite, err = client.KvPrewrite(ctx, req.Prewrite) - case CmdCommit: - resp.Commit, err = client.KvCommit(ctx, req.Commit) - case CmdCleanup: - resp.Cleanup, err = client.KvCleanup(ctx, req.Cleanup) - case CmdBatchGet: - resp.BatchGet, err = client.KvBatchGet(ctx, req.BatchGet) - case CmdBatchRollback: - resp.BatchRollback, err = client.KvBatchRollback(ctx, req.BatchRollback) - case CmdScanLock: - resp.ScanLock, err = client.KvScanLock(ctx, req.ScanLock) - case CmdResolveLock: - resp.ResolveLock, err = client.KvResolveLock(ctx, req.ResolveLock) - case CmdGC: - resp.GC, err = client.KvGC(ctx, req.GC) - case CmdDeleteRange: - resp.DeleteRange, err = client.KvDeleteRange(ctx, req.DeleteRange) - case CmdRawGet: - resp.RawGet, err = client.RawGet(ctx, req.RawGet) - case CmdRawPut: - resp.RawPut, err = client.RawPut(ctx, req.RawPut) - case CmdRawDelete: - resp.RawDelete, err = client.RawDelete(ctx, req.RawDelete) - case CmdRawDeleteRange: - resp.RawDeleteRange, err = client.RawDeleteRange(ctx, req.RawDeleteRange) - case CmdRawScan: - resp.RawScan, err = client.RawScan(ctx, req.RawScan) - case CmdCop: - resp.Cop, err = client.Coprocessor(ctx, req.Cop) - case CmdCopStream: - var streamClient tikvpb.Tikv_CoprocessorStreamClient - streamClient, err = client.CoprocessorStream(ctx, req.Cop) - resp.CopStream = &CopStreamResponse{ - Tikv_CoprocessorStreamClient: streamClient, - } - case CmdMvccGetByKey: - resp.MvccGetByKey, err = client.MvccGetByKey(ctx, req.MvccGetByKey) - case CmdMvccGetByStartTs: - resp.MvccGetByStartTS, err = client.MvccGetByStartTs(ctx, req.MvccGetByStartTs) - case CmdSplitRegion: - resp.SplitRegion, err = client.SplitRegion(ctx, req.SplitRegion) - default: - return nil, errors.Errorf("invalid request type: %v", req.Type) - } - if err != nil { - return nil, errors.Trace(err) - } - return resp, nil -} - -// Lease is used to implement grpc stream timeout. -type Lease struct { - Cancel context.CancelFunc - deadline int64 // A time.UnixNano value, if time.Now().UnixNano() > deadline, cancel() would be called. -} - -// Recv overrides the stream client Recv() function. -func (resp *CopStreamResponse) Recv() (*coprocessor.Response, error) { - deadline := time.Now().Add(resp.Timeout).UnixNano() - atomic.StoreInt64(&resp.Lease.deadline, deadline) - - ret, err := resp.Tikv_CoprocessorStreamClient.Recv() - - atomic.StoreInt64(&resp.Lease.deadline, 0) // Stop the lease check. - return ret, errors.Trace(err) -} - -// Close closes the CopStreamResponse object. -func (resp *CopStreamResponse) Close() { - atomic.StoreInt64(&resp.Lease.deadline, 1) -} - -// CheckStreamTimeoutLoop runs periodically to check is there any stream request timeouted. -// Lease is an object to track stream requests, call this function with "go CheckStreamTimeoutLoop()" -func CheckStreamTimeoutLoop(ch <-chan *Lease) { - ticker := time.NewTicker(200 * time.Millisecond) - defer ticker.Stop() - array := make([]*Lease, 0, 1024) - - for { - select { - case item, ok := <-ch: - if !ok { - // This channel close means goroutine should return. - return - } - array = append(array, item) - case now := <-ticker.C: - array = keepOnlyActive(array, now.UnixNano()) - } - } -} - -// keepOnlyActive removes completed items, call cancel function for timeout items. -func keepOnlyActive(array []*Lease, now int64) []*Lease { - idx := 0 - for i := 0; i < len(array); i++ { - item := array[i] - deadline := atomic.LoadInt64(&item.deadline) - if deadline == 0 || deadline > now { - array[idx] = array[i] - idx++ - } else { - item.Cancel() - } - } - return array[:idx] -} diff --git a/vendor/github.com/pingcap/tidb/store/tikv/txn.go b/vendor/github.com/pingcap/tidb/store/tikv/txn.go deleted file mode 100644 index 008e2c2..0000000 --- a/vendor/github.com/pingcap/tidb/store/tikv/txn.go +++ /dev/null @@ -1,278 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package tikv - -import ( - "fmt" - "sync" - "time" - - "github.com/juju/errors" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/sessionctx" - log "github.com/sirupsen/logrus" - "golang.org/x/net/context" -) - -var ( - _ kv.Transaction = (*tikvTxn)(nil) -) - -// tikvTxn implements kv.Transaction. -type tikvTxn struct { - snapshot *tikvSnapshot - us kv.UnionStore - store *tikvStore // for connection to region. - startTS uint64 - startTime time.Time // Monotonic timestamp for recording txn time consuming. - commitTS uint64 - valid bool - lockKeys [][]byte - mu sync.Mutex // For thread-safe LockKeys function. - dirty bool - setCnt int64 - vars *kv.Variables -} - -func newTiKVTxn(store *tikvStore) (*tikvTxn, error) { - bo := NewBackoffer(context.Background(), tsoMaxBackoff) - startTS, err := store.getTimestampWithRetry(bo) - if err != nil { - return nil, errors.Trace(err) - } - return newTikvTxnWithStartTS(store, startTS) -} - -// newTikvTxnWithStartTS creates a txn with startTS. -func newTikvTxnWithStartTS(store *tikvStore, startTS uint64) (*tikvTxn, error) { - ver := kv.NewVersion(startTS) - snapshot := newTiKVSnapshot(store, ver) - return &tikvTxn{ - snapshot: snapshot, - us: kv.NewUnionStore(snapshot), - store: store, - startTS: startTS, - startTime: time.Now(), - valid: true, - vars: kv.DefaultVars, - }, nil -} - -func (txn *tikvTxn) SetVars(vars *kv.Variables) { - txn.vars = vars - txn.snapshot.vars = vars -} - -// SetMemBufCap sets the transaction's MemBuffer capability, to reduce memory allocations. -func (txn *tikvTxn) SetCap(cap int) { - txn.us.SetCap(cap) -} - -// Reset reset tikvTxn's membuf. -func (txn *tikvTxn) Reset() { - txn.us.Reset() -} - -// Get implements transaction interface. -func (txn *tikvTxn) Get(k kv.Key) ([]byte, error) { - metrics.TiKVTxnCmdCounter.WithLabelValues("get").Inc() - start := time.Now() - defer func() { metrics.TiKVTxnCmdHistogram.WithLabelValues("get").Observe(time.Since(start).Seconds()) }() - - ret, err := txn.us.Get(k) - if err != nil { - return nil, errors.Trace(err) - } - - err = txn.store.CheckVisibility(txn.startTS) - if err != nil { - return nil, errors.Trace(err) - } - - return ret, nil -} - -func (txn *tikvTxn) Set(k kv.Key, v []byte) error { - txn.setCnt++ - - txn.dirty = true - return txn.us.Set(k, v) -} - -func (txn *tikvTxn) String() string { - return fmt.Sprintf("%d", txn.StartTS()) -} - -func (txn *tikvTxn) Seek(k kv.Key) (kv.Iterator, error) { - metrics.TiKVTxnCmdCounter.WithLabelValues("seek").Inc() - start := time.Now() - defer func() { metrics.TiKVTxnCmdHistogram.WithLabelValues("seek").Observe(time.Since(start).Seconds()) }() - - return txn.us.Seek(k) -} - -// SeekReverse creates a reversed Iterator positioned on the first entry which key is less than k. -func (txn *tikvTxn) SeekReverse(k kv.Key) (kv.Iterator, error) { - metrics.TiKVTxnCmdCounter.WithLabelValues("seek_reverse").Inc() - start := time.Now() - defer func() { - metrics.TiKVTxnCmdHistogram.WithLabelValues("seek_reverse").Observe(time.Since(start).Seconds()) - }() - - return txn.us.SeekReverse(k) -} - -func (txn *tikvTxn) Delete(k kv.Key) error { - metrics.TiKVTxnCmdCounter.WithLabelValues("delete").Inc() - - txn.dirty = true - return txn.us.Delete(k) -} - -func (txn *tikvTxn) SetOption(opt kv.Option, val interface{}) { - txn.us.SetOption(opt, val) - switch opt { - case kv.IsolationLevel: - txn.snapshot.isolationLevel = val.(kv.IsoLevel) - case kv.Priority: - txn.snapshot.priority = kvPriorityToCommandPri(val.(int)) - case kv.NotFillCache: - txn.snapshot.notFillCache = val.(bool) - case kv.SyncLog: - txn.snapshot.syncLog = val.(bool) - } -} - -func (txn *tikvTxn) DelOption(opt kv.Option) { - txn.us.DelOption(opt) - if opt == kv.IsolationLevel { - txn.snapshot.isolationLevel = kv.SI - } -} - -func (txn *tikvTxn) Commit(ctx context.Context) error { - if !txn.valid { - return kv.ErrInvalidTxn - } - defer txn.close() - - metrics.TiKVTxnCmdCounter.WithLabelValues("set").Add(float64(txn.setCnt)) - metrics.TiKVTxnCmdCounter.WithLabelValues("commit").Inc() - start := time.Now() - defer func() { metrics.TiKVTxnCmdHistogram.WithLabelValues("commit").Observe(time.Since(start).Seconds()) }() - - if err := txn.us.CheckLazyConditionPairs(); err != nil { - return errors.Trace(err) - } - - // connID is used for log. - var connID uint64 - val := ctx.Value(sessionctx.ConnID) - if val != nil { - connID = val.(uint64) - } - committer, err := newTwoPhaseCommitter(txn, connID) - if err != nil || committer == nil { - return errors.Trace(err) - } - // latches disabled - if txn.store.txnLatches == nil { - err = committer.executeAndWriteFinishBinlog(ctx) - log.Debug("[kv]", connID, " txnLatches disabled, 2pc directly:", err) - return errors.Trace(err) - } - - // latches enabled - var forUpdate bool - if option := txn.us.GetOption(kv.ForUpdate); option != nil { - forUpdate = option.(bool) - } - // For update transaction is not retryable, commit directly. - if forUpdate { - err = committer.executeAndWriteFinishBinlog(ctx) - if err == nil { - txn.store.txnLatches.RefreshCommitTS(committer.keys, committer.commitTS) - } - log.Debug("[kv]", connID, " txnLatches enabled while txn not retryable, 2pc directly:", err) - return errors.Trace(err) - } - - // for transactions which need to acquire latches - lock := txn.store.txnLatches.Lock(committer.startTS, committer.keys) - defer txn.store.txnLatches.UnLock(lock) - if lock.IsStale() { - err = errors.Errorf("startTS %d is stale", txn.startTS) - return errors.Annotate(err, txnRetryableMark) - } - err = committer.executeAndWriteFinishBinlog(ctx) - if err == nil { - lock.SetCommitTS(committer.commitTS) - } - log.Debug("[kv]", connID, " txnLatches enabled while txn retryable:", err) - return errors.Trace(err) -} - -func (txn *tikvTxn) close() { - txn.valid = false -} - -func (txn *tikvTxn) Rollback() error { - if !txn.valid { - return kv.ErrInvalidTxn - } - txn.close() - log.Debugf("[kv] Rollback txn %d", txn.StartTS()) - metrics.TiKVTxnCmdCounter.WithLabelValues("rollback").Inc() - - return nil -} - -func (txn *tikvTxn) LockKeys(keys ...kv.Key) error { - metrics.TiKVTxnCmdCounter.WithLabelValues("lock_keys").Inc() - txn.mu.Lock() - for _, key := range keys { - txn.lockKeys = append(txn.lockKeys, key) - } - txn.mu.Unlock() - return nil -} - -func (txn *tikvTxn) IsReadOnly() bool { - return !txn.dirty -} - -func (txn *tikvTxn) StartTS() uint64 { - return txn.startTS -} - -func (txn *tikvTxn) Valid() bool { - return txn.valid -} - -func (txn *tikvTxn) Len() int { - return txn.us.Len() -} - -func (txn *tikvTxn) Size() int { - return txn.us.Size() -} - -func (txn *tikvTxn) GetMemBuffer() kv.MemBuffer { - return txn.us.GetMemBuffer() -} - -func (txn *tikvTxn) GetSnapshot() kv.Snapshot { - return txn.snapshot -} diff --git a/vendor/github.com/pingcap/tidb/structure/hash.go b/vendor/github.com/pingcap/tidb/structure/hash.go deleted file mode 100644 index ff9c3e4..0000000 --- a/vendor/github.com/pingcap/tidb/structure/hash.go +++ /dev/null @@ -1,302 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package structure - -import ( - "bytes" - "encoding/binary" - "strconv" - - "github.com/juju/errors" - "github.com/pingcap/tidb/kv" -) - -// HashPair is the pair for (field, value) in a hash. -type HashPair struct { - Field []byte - Value []byte -} - -type hashMeta struct { - FieldCount int64 -} - -func (meta hashMeta) Value() []byte { - buf := make([]byte, 8) - binary.BigEndian.PutUint64(buf[0:8], uint64(meta.FieldCount)) - return buf -} - -func (meta hashMeta) IsEmpty() bool { - return meta.FieldCount <= 0 -} - -// HSet sets the string value of a hash field. -func (t *TxStructure) HSet(key []byte, field []byte, value []byte) error { - if t.readWriter == nil { - return errWriteOnSnapshot - } - return t.updateHash(key, field, func([]byte) ([]byte, error) { - return value, nil - }) -} - -// HGet gets the value of a hash field. -func (t *TxStructure) HGet(key []byte, field []byte) ([]byte, error) { - dataKey := t.encodeHashDataKey(key, field) - value, err := t.reader.Get(dataKey) - if kv.ErrNotExist.Equal(err) { - err = nil - } - return value, errors.Trace(err) -} - -func (t *TxStructure) hashFieldIntegerVal(val int64) []byte { - return []byte(strconv.FormatInt(val, 10)) -} - -// EncodeHashAutoIDKeyValue returns the hash key-value generated by the key and the field -func (t *TxStructure) EncodeHashAutoIDKeyValue(key []byte, field []byte, val int64) (k, v []byte) { - return t.encodeHashDataKey(key, field), t.hashFieldIntegerVal(val) -} - -// HInc increments the integer value of a hash field, by step, returns -// the value after the increment. -func (t *TxStructure) HInc(key []byte, field []byte, step int64) (int64, error) { - if t.readWriter == nil { - return 0, errWriteOnSnapshot - } - base := int64(0) - err := t.updateHash(key, field, func(oldValue []byte) ([]byte, error) { - if oldValue != nil { - var err error - base, err = strconv.ParseInt(string(oldValue), 10, 64) - if err != nil { - return nil, errors.Trace(err) - } - } - base += step - return t.hashFieldIntegerVal(base), nil - }) - - return base, errors.Trace(err) -} - -// HGetInt64 gets int64 value of a hash field. -func (t *TxStructure) HGetInt64(key []byte, field []byte) (int64, error) { - value, err := t.HGet(key, field) - if err != nil || value == nil { - return 0, errors.Trace(err) - } - - var n int64 - n, err = strconv.ParseInt(string(value), 10, 64) - return n, errors.Trace(err) -} - -func (t *TxStructure) updateHash(key []byte, field []byte, fn func(oldValue []byte) ([]byte, error)) error { - dataKey := t.encodeHashDataKey(key, field) - oldValue, err := t.loadHashValue(dataKey) - if err != nil { - return errors.Trace(err) - } - - newValue, err := fn(oldValue) - if err != nil { - return errors.Trace(err) - } - - // Check if new value is equal to old value. - if bytes.Equal(oldValue, newValue) { - return nil - } - - if err = t.readWriter.Set(dataKey, newValue); err != nil { - return errors.Trace(err) - } - - metaKey := t.encodeHashMetaKey(key) - meta, err := t.loadHashMeta(metaKey) - if err != nil { - return errors.Trace(err) - } - - if oldValue == nil { - meta.FieldCount++ - if err = t.readWriter.Set(metaKey, meta.Value()); err != nil { - return errors.Trace(err) - } - } - - return nil -} - -// HLen gets the number of fields in a hash. -func (t *TxStructure) HLen(key []byte) (int64, error) { - metaKey := t.encodeHashMetaKey(key) - meta, err := t.loadHashMeta(metaKey) - if err != nil { - return 0, errors.Trace(err) - } - return meta.FieldCount, nil -} - -// HDel deletes one or more hash fields. -func (t *TxStructure) HDel(key []byte, fields ...[]byte) error { - if t.readWriter == nil { - return errWriteOnSnapshot - } - metaKey := t.encodeHashMetaKey(key) - meta, err := t.loadHashMeta(metaKey) - if err != nil || meta.IsEmpty() { - return errors.Trace(err) - } - - var value []byte - for _, field := range fields { - dataKey := t.encodeHashDataKey(key, field) - - value, err = t.loadHashValue(dataKey) - if err != nil { - return errors.Trace(err) - } - - if value != nil { - if err = t.readWriter.Delete(dataKey); err != nil { - return errors.Trace(err) - } - - meta.FieldCount-- - } - } - - if meta.IsEmpty() { - err = t.readWriter.Delete(metaKey) - } else { - err = t.readWriter.Set(metaKey, meta.Value()) - } - - return errors.Trace(err) -} - -// HKeys gets all the fields in a hash. -func (t *TxStructure) HKeys(key []byte) ([][]byte, error) { - var keys [][]byte - err := t.iterateHash(key, func(field []byte, value []byte) error { - keys = append(keys, append([]byte{}, field...)) - return nil - }) - - return keys, errors.Trace(err) -} - -// HGetAll gets all the fields and values in a hash. -func (t *TxStructure) HGetAll(key []byte) ([]HashPair, error) { - var res []HashPair - err := t.iterateHash(key, func(field []byte, value []byte) error { - pair := HashPair{ - Field: append([]byte{}, field...), - Value: append([]byte{}, value...), - } - res = append(res, pair) - return nil - }) - - return res, errors.Trace(err) -} - -// HClear removes the hash value of the key. -func (t *TxStructure) HClear(key []byte) error { - metaKey := t.encodeHashMetaKey(key) - meta, err := t.loadHashMeta(metaKey) - if err != nil || meta.IsEmpty() { - return errors.Trace(err) - } - - err = t.iterateHash(key, func(field []byte, value []byte) error { - k := t.encodeHashDataKey(key, field) - return errors.Trace(t.readWriter.Delete(k)) - }) - - if err != nil { - return errors.Trace(err) - } - - return errors.Trace(t.readWriter.Delete(metaKey)) -} - -func (t *TxStructure) iterateHash(key []byte, fn func(k []byte, v []byte) error) error { - dataPrefix := t.hashDataKeyPrefix(key) - it, err := t.reader.Seek(dataPrefix) - if err != nil { - return errors.Trace(err) - } - - var field []byte - - for it.Valid() { - if !it.Key().HasPrefix(dataPrefix) { - break - } - - _, field, err = t.decodeHashDataKey(it.Key()) - if err != nil { - return errors.Trace(err) - } - - if err = fn(field, it.Value()); err != nil { - return errors.Trace(err) - } - - err = it.Next() - if err != nil { - return errors.Trace(err) - } - } - - return nil -} - -func (t *TxStructure) loadHashMeta(metaKey []byte) (hashMeta, error) { - v, err := t.reader.Get(metaKey) - if kv.ErrNotExist.Equal(err) { - err = nil - } else if err != nil { - return hashMeta{}, errors.Trace(err) - } - - meta := hashMeta{FieldCount: 0} - if v == nil { - return meta, nil - } - - if len(v) != 8 { - return meta, errInvalidListMetaData - } - - meta.FieldCount = int64(binary.BigEndian.Uint64(v[0:8])) - return meta, nil -} - -func (t *TxStructure) loadHashValue(dataKey []byte) ([]byte, error) { - v, err := t.reader.Get(dataKey) - if kv.ErrNotExist.Equal(err) { - err = nil - v = nil - } else if err != nil { - return nil, errors.Trace(err) - } - - return v, nil -} diff --git a/vendor/github.com/pingcap/tidb/structure/list.go b/vendor/github.com/pingcap/tidb/structure/list.go deleted file mode 100644 index e465675..0000000 --- a/vendor/github.com/pingcap/tidb/structure/list.go +++ /dev/null @@ -1,243 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package structure - -import ( - "encoding/binary" - - "github.com/juju/errors" - "github.com/pingcap/tidb/kv" -) - -type listMeta struct { - LIndex int64 - RIndex int64 -} - -func (meta listMeta) Value() []byte { - buf := make([]byte, 16) - binary.BigEndian.PutUint64(buf[0:8], uint64(meta.LIndex)) - binary.BigEndian.PutUint64(buf[8:16], uint64(meta.RIndex)) - return buf -} - -func (meta listMeta) IsEmpty() bool { - return meta.LIndex >= meta.RIndex -} - -// LPush prepends one or multiple values to a list. -func (t *TxStructure) LPush(key []byte, values ...[]byte) error { - return t.listPush(key, true, values...) -} - -// RPush appends one or multiple values to a list. -func (t *TxStructure) RPush(key []byte, values ...[]byte) error { - return t.listPush(key, false, values...) -} - -func (t *TxStructure) listPush(key []byte, left bool, values ...[]byte) error { - if t.readWriter == nil { - return errWriteOnSnapshot - } - if len(values) == 0 { - return nil - } - - metaKey := t.encodeListMetaKey(key) - meta, err := t.loadListMeta(metaKey) - if err != nil { - return errors.Trace(err) - } - - index := int64(0) - for _, v := range values { - if left { - meta.LIndex-- - index = meta.LIndex - } else { - index = meta.RIndex - meta.RIndex++ - } - - dataKey := t.encodeListDataKey(key, index) - if err = t.readWriter.Set(dataKey, v); err != nil { - return errors.Trace(err) - } - } - - return t.readWriter.Set(metaKey, meta.Value()) -} - -// LPop removes and gets the first element in a list. -func (t *TxStructure) LPop(key []byte) ([]byte, error) { - return t.listPop(key, true) -} - -// RPop removes and gets the last element in a list. -func (t *TxStructure) RPop(key []byte) ([]byte, error) { - return t.listPop(key, false) -} - -func (t *TxStructure) listPop(key []byte, left bool) ([]byte, error) { - if t.readWriter == nil { - return nil, errWriteOnSnapshot - } - metaKey := t.encodeListMetaKey(key) - meta, err := t.loadListMeta(metaKey) - if err != nil || meta.IsEmpty() { - return nil, errors.Trace(err) - } - - index := int64(0) - if left { - index = meta.LIndex - meta.LIndex++ - } else { - meta.RIndex-- - index = meta.RIndex - } - - dataKey := t.encodeListDataKey(key, index) - - var data []byte - data, err = t.reader.Get(dataKey) - if err != nil { - return nil, errors.Trace(err) - } - - if err = t.readWriter.Delete(dataKey); err != nil { - return nil, errors.Trace(err) - } - - if !meta.IsEmpty() { - err = t.readWriter.Set(metaKey, meta.Value()) - } else { - err = t.readWriter.Delete(metaKey) - } - - return data, errors.Trace(err) -} - -// LLen gets the length of a list. -func (t *TxStructure) LLen(key []byte) (int64, error) { - metaKey := t.encodeListMetaKey(key) - meta, err := t.loadListMeta(metaKey) - return meta.RIndex - meta.LIndex, errors.Trace(err) -} - -// LGetAll gets all elements of this list in order from right to left. -func (t *TxStructure) LGetAll(key []byte) ([][]byte, error) { - metaKey := t.encodeListMetaKey(key) - meta, err := t.loadListMeta(metaKey) - if err != nil || meta.IsEmpty() { - return nil, errors.Trace(err) - } - - length := int(meta.RIndex - meta.LIndex) - elements := make([][]byte, 0, length) - for index := meta.RIndex - 1; index >= meta.LIndex; index-- { - e, err := t.reader.Get(t.encodeListDataKey(key, index)) - if err != nil { - return nil, errors.Trace(err) - } - elements = append(elements, e) - } - return elements, nil -} - -// LIndex gets an element from a list by its index. -func (t *TxStructure) LIndex(key []byte, index int64) ([]byte, error) { - metaKey := t.encodeListMetaKey(key) - meta, err := t.loadListMeta(metaKey) - if err != nil || meta.IsEmpty() { - return nil, errors.Trace(err) - } - - index = adjustIndex(index, meta.LIndex, meta.RIndex) - - if index >= meta.LIndex && index < meta.RIndex { - return t.reader.Get(t.encodeListDataKey(key, index)) - } - return nil, nil -} - -// LSet updates an element in the list by its index. -func (t *TxStructure) LSet(key []byte, index int64, value []byte) error { - if t.readWriter == nil { - return errWriteOnSnapshot - } - metaKey := t.encodeListMetaKey(key) - meta, err := t.loadListMeta(metaKey) - if err != nil || meta.IsEmpty() { - return errors.Trace(err) - } - - index = adjustIndex(index, meta.LIndex, meta.RIndex) - - if index >= meta.LIndex && index < meta.RIndex { - return t.readWriter.Set(t.encodeListDataKey(key, index), value) - } - return errInvalidListIndex.Gen("invalid list index %d", index) -} - -// LClear removes the list of the key. -func (t *TxStructure) LClear(key []byte) error { - if t.readWriter == nil { - return errWriteOnSnapshot - } - metaKey := t.encodeListMetaKey(key) - meta, err := t.loadListMeta(metaKey) - if err != nil || meta.IsEmpty() { - return errors.Trace(err) - } - - for index := meta.LIndex; index < meta.RIndex; index++ { - dataKey := t.encodeListDataKey(key, index) - if err = t.readWriter.Delete(dataKey); err != nil { - return errors.Trace(err) - } - } - - return t.readWriter.Delete(metaKey) -} - -func (t *TxStructure) loadListMeta(metaKey []byte) (listMeta, error) { - v, err := t.reader.Get(metaKey) - if kv.ErrNotExist.Equal(err) { - err = nil - } else if err != nil { - return listMeta{}, errors.Trace(err) - } - - meta := listMeta{0, 0} - if v == nil { - return meta, nil - } - - if len(v) != 16 { - return meta, errInvalidListMetaData - } - - meta.LIndex = int64(binary.BigEndian.Uint64(v[0:8])) - meta.RIndex = int64(binary.BigEndian.Uint64(v[8:16])) - return meta, nil -} - -func adjustIndex(index int64, min, max int64) int64 { - if index >= 0 { - return index + min - } - - return index + max -} diff --git a/vendor/github.com/pingcap/tidb/structure/string.go b/vendor/github.com/pingcap/tidb/structure/string.go deleted file mode 100644 index 5e0e4b5..0000000 --- a/vendor/github.com/pingcap/tidb/structure/string.go +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package structure - -import ( - "strconv" - - "github.com/juju/errors" - "github.com/pingcap/tidb/kv" -) - -// Set sets the string value of the key. -func (t *TxStructure) Set(key []byte, value []byte) error { - if t.readWriter == nil { - return errWriteOnSnapshot - } - ek := t.encodeStringDataKey(key) - return t.readWriter.Set(ek, value) -} - -// Get gets the string value of a key. -func (t *TxStructure) Get(key []byte) ([]byte, error) { - ek := t.encodeStringDataKey(key) - value, err := t.reader.Get(ek) - if kv.ErrNotExist.Equal(err) { - err = nil - } - return value, errors.Trace(err) -} - -// GetInt64 gets the int64 value of a key. -func (t *TxStructure) GetInt64(key []byte) (int64, error) { - v, err := t.Get(key) - if err != nil || v == nil { - return 0, errors.Trace(err) - } - - n, err := strconv.ParseInt(string(v), 10, 64) - return n, errors.Trace(err) -} - -// Inc increments the integer value of a key by step, returns -// the value after the increment. -func (t *TxStructure) Inc(key []byte, step int64) (int64, error) { - if t.readWriter == nil { - return 0, errWriteOnSnapshot - } - ek := t.encodeStringDataKey(key) - // txn Inc will lock this key, so we don't lock it here. - n, err := kv.IncInt64(t.readWriter, ek, step) - if kv.ErrNotExist.Equal(err) { - err = nil - } - return n, errors.Trace(err) -} - -// Clear removes the string value of the key. -func (t *TxStructure) Clear(key []byte) error { - if t.readWriter == nil { - return errWriteOnSnapshot - } - ek := t.encodeStringDataKey(key) - err := t.readWriter.Delete(ek) - if kv.ErrNotExist.Equal(err) { - err = nil - } - return errors.Trace(err) -} diff --git a/vendor/github.com/pingcap/tidb/structure/structure.go b/vendor/github.com/pingcap/tidb/structure/structure.go deleted file mode 100644 index 81853de..0000000 --- a/vendor/github.com/pingcap/tidb/structure/structure.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package structure - -import ( - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/terror" -) - -// structure error codes. -const ( - codeInvalidHashKeyFlag terror.ErrCode = 1 - codeInvalidHashKeyPrefix = 2 - codeInvalidListIndex = 3 - codeInvalidListMetaData = 4 - codeWriteOnSnapshot = 5 -) - -var ( - errInvalidHashKeyFlag = terror.ClassStructure.New(codeInvalidHashKeyFlag, "invalid encoded hash key flag") - errInvalidHashKeyPrefix = terror.ClassStructure.New(codeInvalidHashKeyPrefix, "invalid encoded hash key prefix") - errInvalidListIndex = terror.ClassStructure.New(codeInvalidListMetaData, "invalid list index") - errInvalidListMetaData = terror.ClassStructure.New(codeInvalidListMetaData, "invalid list meta data") - errWriteOnSnapshot = terror.ClassStructure.New(codeWriteOnSnapshot, "write on snapshot") -) - -// NewStructure creates a TxStructure with Retriever, RetrieverMutator and key prefix. -func NewStructure(reader kv.Retriever, readWriter kv.RetrieverMutator, prefix []byte) *TxStructure { - return &TxStructure{ - reader: reader, - readWriter: readWriter, - prefix: prefix, - } -} - -// TxStructure supports some simple data structures like string, hash, list, etc... and -// you can use these in a transaction. -type TxStructure struct { - reader kv.Retriever - readWriter kv.RetrieverMutator - prefix []byte -} diff --git a/vendor/github.com/pingcap/tidb/structure/type.go b/vendor/github.com/pingcap/tidb/structure/type.go deleted file mode 100644 index 526c182..0000000 --- a/vendor/github.com/pingcap/tidb/structure/type.go +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package structure - -import ( - "bytes" - - "github.com/juju/errors" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/util/codec" -) - -// TypeFlag is for data structure meta/data flag. -type TypeFlag byte - -const ( - // StringMeta is the flag for string meta. - StringMeta TypeFlag = 'S' - // StringData is the flag for string data. - StringData TypeFlag = 's' - // HashMeta is the flag for hash meta. - HashMeta TypeFlag = 'H' - // HashData is the flag for hash data. - HashData TypeFlag = 'h' - // ListMeta is the flag for list meta. - ListMeta TypeFlag = 'L' - // ListData is the flag for list data. - ListData TypeFlag = 'l' -) - -func (t *TxStructure) encodeStringDataKey(key []byte) kv.Key { - // for codec Encode, we may add extra bytes data, so here and following encode - // we will use extra length like 4 for a little optimization. - ek := make([]byte, 0, len(t.prefix)+len(key)+24) - ek = append(ek, t.prefix...) - ek = codec.EncodeBytes(ek, key) - return codec.EncodeUint(ek, uint64(StringData)) -} - -func (t *TxStructure) encodeHashMetaKey(key []byte) kv.Key { - ek := make([]byte, 0, len(t.prefix)+len(key)+24) - ek = append(ek, t.prefix...) - ek = codec.EncodeBytes(ek, key) - return codec.EncodeUint(ek, uint64(HashMeta)) -} - -func (t *TxStructure) encodeHashDataKey(key []byte, field []byte) kv.Key { - ek := make([]byte, 0, len(t.prefix)+len(key)+len(field)+30) - ek = append(ek, t.prefix...) - ek = codec.EncodeBytes(ek, key) - ek = codec.EncodeUint(ek, uint64(HashData)) - return codec.EncodeBytes(ek, field) -} - -func (t *TxStructure) decodeHashDataKey(ek kv.Key) ([]byte, []byte, error) { - var ( - key []byte - field []byte - err error - tp uint64 - ) - - if !bytes.HasPrefix(ek, t.prefix) { - return nil, nil, errors.New("invalid encoded hash data key prefix") - } - - ek = ek[len(t.prefix):] - - ek, key, err = codec.DecodeBytes(ek, nil) - if err != nil { - return nil, nil, errors.Trace(err) - } - - ek, tp, err = codec.DecodeUint(ek) - if err != nil { - return nil, nil, errors.Trace(err) - } else if TypeFlag(tp) != HashData { - return nil, nil, errInvalidHashKeyFlag.Gen("invalid encoded hash data key flag %c", byte(tp)) - } - - _, field, err = codec.DecodeBytes(ek, nil) - return key, field, errors.Trace(err) -} - -func (t *TxStructure) hashDataKeyPrefix(key []byte) kv.Key { - ek := make([]byte, 0, len(t.prefix)+len(key)+24) - ek = append(ek, t.prefix...) - ek = codec.EncodeBytes(ek, key) - return codec.EncodeUint(ek, uint64(HashData)) -} - -func (t *TxStructure) encodeListMetaKey(key []byte) kv.Key { - ek := make([]byte, 0, len(t.prefix)+len(key)+24) - ek = append(ek, t.prefix...) - ek = codec.EncodeBytes(ek, key) - return codec.EncodeUint(ek, uint64(ListMeta)) -} - -func (t *TxStructure) encodeListDataKey(key []byte, index int64) kv.Key { - ek := make([]byte, 0, len(t.prefix)+len(key)+36) - ek = append(ek, t.prefix...) - ek = codec.EncodeBytes(ek, key) - ek = codec.EncodeUint(ek, uint64(ListData)) - return codec.EncodeInt(ek, index) -} diff --git a/vendor/github.com/pingcap/tidb/tablecodec/tablecodec.go b/vendor/github.com/pingcap/tidb/tablecodec/tablecodec.go deleted file mode 100644 index b53a3c4..0000000 --- a/vendor/github.com/pingcap/tidb/tablecodec/tablecodec.go +++ /dev/null @@ -1,614 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package tablecodec - -import ( - "bytes" - "encoding/binary" - "math" - "time" - - "github.com/juju/errors" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/sessionctx/stmtctx" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/codec" -) - -var ( - errInvalidKey = terror.ClassXEval.New(codeInvalidKey, "invalid key") - errInvalidRecordKey = terror.ClassXEval.New(codeInvalidRecordKey, "invalid record key") - errInvalidIndexKey = terror.ClassXEval.New(codeInvalidIndexKey, "invalid index key") - errInvalidColumnCount = terror.ClassXEval.New(codeInvalidColumnCount, "invalid column count") -) - -var ( - tablePrefix = []byte{'t'} - recordPrefixSep = []byte("_r") - indexPrefixSep = []byte("_i") -) - -const ( - idLen = 8 - prefixLen = 1 + idLen /*tableID*/ + 2 - recordRowKeyLen = prefixLen + idLen /*handle*/ -) - -// TableSplitKeyLen is the length of key 't{table_id}' which is used for table split. -const TableSplitKeyLen = 1 + idLen - -// TablePrefix returns table's prefix 't'. -func TablePrefix() []byte { - return tablePrefix -} - -// EncodeRowKey encodes the table id and record handle into a kv.Key -func EncodeRowKey(tableID int64, encodedHandle []byte) kv.Key { - buf := make([]byte, 0, recordRowKeyLen) - buf = appendTableRecordPrefix(buf, tableID) - buf = append(buf, encodedHandle...) - return buf -} - -// EncodeRowKeyWithHandle encodes the table id, row handle into a kv.Key -func EncodeRowKeyWithHandle(tableID int64, handle int64) kv.Key { - buf := make([]byte, 0, recordRowKeyLen) - buf = appendTableRecordPrefix(buf, tableID) - buf = codec.EncodeInt(buf, handle) - return buf -} - -// CutRowKeyPrefix cuts the row key prefix. -func CutRowKeyPrefix(key kv.Key) []byte { - return key[prefixLen:] -} - -// EncodeRecordKey encodes the recordPrefix, row handle into a kv.Key. -func EncodeRecordKey(recordPrefix kv.Key, h int64) kv.Key { - buf := make([]byte, 0, len(recordPrefix)+idLen) - buf = append(buf, recordPrefix...) - buf = codec.EncodeInt(buf, h) - return buf -} - -// DecodeRecordKey decodes the key and gets the tableID, handle. -func DecodeRecordKey(key kv.Key) (tableID int64, handle int64, err error) { - k := key - if !key.HasPrefix(tablePrefix) { - return 0, 0, errInvalidRecordKey.Gen("invalid record key - %q", k) - } - - key = key[len(tablePrefix):] - key, tableID, err = codec.DecodeInt(key) - if err != nil { - return 0, 0, errors.Trace(err) - } - - if !key.HasPrefix(recordPrefixSep) { - return 0, 0, errInvalidRecordKey.Gen("invalid record key - %q", k) - } - - key = key[len(recordPrefixSep):] - - key, handle, err = codec.DecodeInt(key) - if err != nil { - return 0, 0, errors.Trace(err) - } - return -} - -// DecodeIndexKey decodes the key and gets the tableID, indexID, indexValues. -func DecodeIndexKey(key kv.Key) (tableID int64, indexID int64, indexValues []string, err error) { - k := key - - tableID, indexID, isRecord, err := DecodeKeyHead(key) - if err != nil { - return 0, 0, nil, errors.Trace(err) - } - if isRecord { - return 0, 0, nil, errInvalidIndexKey.Gen("invalid index key - %q", k) - } - key = key[prefixLen+idLen:] - - for len(key) > 0 { - // FIXME: Without the schema information, we can only decode the raw kind of - // the column. For instance, MysqlTime is internally saved as uint64. - remain, d, e := codec.DecodeOne(key) - if e != nil { - return 0, 0, nil, errInvalidIndexKey.Gen("invalid index key - %q %v", k, e) - } - str, e1 := d.ToString() - if e1 != nil { - return 0, 0, nil, errInvalidIndexKey.Gen("invalid index key - %q %v", k, e1) - } - indexValues = append(indexValues, str) - key = remain - } - return -} - -// DecodeKeyHead decodes the key's head and gets the tableID, indexID. isRecordKey is true when is a record key. -func DecodeKeyHead(key kv.Key) (tableID int64, indexID int64, isRecordKey bool, err error) { - isRecordKey = false - k := key - if !key.HasPrefix(tablePrefix) { - err = errInvalidKey.Gen("invalid key - %q", k) - return - } - - key = key[len(tablePrefix):] - key, tableID, err = codec.DecodeInt(key) - if err != nil { - err = errors.Trace(err) - return - } - - if key.HasPrefix(recordPrefixSep) { - isRecordKey = true - return - } - if !key.HasPrefix(indexPrefixSep) { - err = errInvalidKey.Gen("invalid key - %q", k) - return - } - - key = key[len(indexPrefixSep):] - - key, indexID, err = codec.DecodeInt(key) - if err != nil { - err = errors.Trace(err) - return - } - return -} - -// DecodeTableID decodes the table ID of the key, if the key is not table key, returns 0. -func DecodeTableID(key kv.Key) int64 { - if !key.HasPrefix(tablePrefix) { - return 0 - } - key = key[len(tablePrefix):] - _, tableID, err := codec.DecodeInt(key) - // TODO: return error. - terror.Log(errors.Trace(err)) - return tableID -} - -// DecodeRowKey decodes the key and gets the handle. -func DecodeRowKey(key kv.Key) (int64, error) { - _, handle, err := DecodeRecordKey(key) - return handle, errors.Trace(err) -} - -// EncodeValue encodes a go value to bytes. -func EncodeValue(sc *stmtctx.StatementContext, raw types.Datum) ([]byte, error) { - var v types.Datum - err := flatten(sc, raw, &v) - if err != nil { - return nil, errors.Trace(err) - } - b, err := codec.EncodeValue(sc, nil, v) - return b, errors.Trace(err) -} - -// EncodeRow encode row data and column ids into a slice of byte. -// Row layout: colID1, value1, colID2, value2, ..... -// valBuf and values pass by caller, for reducing EncodeRow allocates tempory bufs. If you pass valBuf and values as nil, -// EncodeRow will allocate it. -func EncodeRow(sc *stmtctx.StatementContext, row []types.Datum, colIDs []int64, valBuf []byte, values []types.Datum) ([]byte, error) { - if len(row) != len(colIDs) { - return nil, errors.Errorf("EncodeRow error: data and columnID count not match %d vs %d", len(row), len(colIDs)) - } - valBuf = valBuf[:0] - if values == nil { - values = make([]types.Datum, len(row)*2) - } - for i, c := range row { - id := colIDs[i] - values[2*i].SetInt64(id) - err := flatten(sc, c, &values[2*i+1]) - if err != nil { - return nil, errors.Trace(err) - } - } - if len(values) == 0 { - // We could not set nil value into kv. - return []byte{codec.NilFlag}, nil - } - return codec.EncodeValue(sc, valBuf, values...) -} - -func flatten(sc *stmtctx.StatementContext, data types.Datum, ret *types.Datum) error { - switch data.Kind() { - case types.KindMysqlTime: - // for mysql datetime, timestamp and date type - t := data.GetMysqlTime() - if t.Type == mysql.TypeTimestamp && sc.TimeZone != time.UTC { - err := t.ConvertTimeZone(sc.TimeZone, time.UTC) - if err != nil { - return errors.Trace(err) - } - } - v, err := t.ToPackedUint() - ret.SetUint64(v) - return errors.Trace(err) - case types.KindMysqlDuration: - // for mysql time type - ret.SetInt64(int64(data.GetMysqlDuration().Duration)) - return nil - case types.KindMysqlEnum: - ret.SetUint64(data.GetMysqlEnum().Value) - return nil - case types.KindMysqlSet: - ret.SetUint64(data.GetMysqlSet().Value) - return nil - case types.KindBinaryLiteral, types.KindMysqlBit: - // We don't need to handle errors here since the literal is ensured to be able to store in uint64 in convertToMysqlBit. - val, err := data.GetBinaryLiteral().ToInt(sc) - if err != nil { - return errors.Trace(err) - } - ret.SetUint64(val) - return nil - default: - *ret = data - return nil - } -} - -// DecodeColumnValue decodes data to a Datum according to the column info. -func DecodeColumnValue(data []byte, ft *types.FieldType, loc *time.Location) (types.Datum, error) { - _, d, err := codec.DecodeOne(data) - if err != nil { - return types.Datum{}, errors.Trace(err) - } - colDatum, err := unflatten(d, ft, loc) - if err != nil { - return types.Datum{}, errors.Trace(err) - } - return colDatum, nil -} - -// DecodeRowWithMap decodes a byte slice into datums with a existing row map. -// Row layout: colID1, value1, colID2, value2, ..... -func DecodeRowWithMap(b []byte, cols map[int64]*types.FieldType, loc *time.Location, row map[int64]types.Datum) (map[int64]types.Datum, error) { - if row == nil { - row = make(map[int64]types.Datum, len(cols)) - } - if b == nil { - return nil, nil - } - if len(b) == 1 && b[0] == codec.NilFlag { - return nil, nil - } - cnt := 0 - var ( - data []byte - err error - ) - for len(b) > 0 { - // Get col id. - data, b, err = codec.CutOne(b) - if err != nil { - return nil, errors.Trace(err) - } - _, cid, err := codec.DecodeOne(data) - if err != nil { - return nil, errors.Trace(err) - } - // Get col value. - data, b, err = codec.CutOne(b) - if err != nil { - return nil, errors.Trace(err) - } - id := cid.GetInt64() - ft, ok := cols[id] - if ok { - _, v, err := codec.DecodeOne(data) - if err != nil { - return nil, errors.Trace(err) - } - v, err = unflatten(v, ft, loc) - if err != nil { - return nil, errors.Trace(err) - } - row[id] = v - cnt++ - if cnt == len(cols) { - // Get enough data. - break - } - } - } - return row, nil -} - -// DecodeRow decodes a byte slice into datums. -// Row layout: colID1, value1, colID2, value2, ..... -func DecodeRow(b []byte, cols map[int64]*types.FieldType, loc *time.Location) (map[int64]types.Datum, error) { - return DecodeRowWithMap(b, cols, loc, nil) -} - -// CutRowNew cuts encoded row into byte slices and return columns' byte slice. -// Row layout: colID1, value1, colID2, value2, ..... -func CutRowNew(data []byte, colIDs map[int64]int) ([][]byte, error) { - if data == nil { - return nil, nil - } - if len(data) == 1 && data[0] == codec.NilFlag { - return nil, nil - } - - var ( - cnt int - b []byte - err error - ) - row := make([][]byte, len(colIDs)) - for len(data) > 0 && cnt < len(colIDs) { - // Get col id. - b, data, err = codec.CutOne(data) - if err != nil { - return nil, errors.Trace(err) - } - _, cid, err := codec.DecodeOne(b) - if err != nil { - return nil, errors.Trace(err) - } - // Get col value. - b, data, err = codec.CutOne(data) - if err != nil { - return nil, errors.Trace(err) - } - id := cid.GetInt64() - offset, ok := colIDs[id] - if ok { - row[offset] = b - cnt++ - } - } - return row, nil -} - -// UnflattenDatums converts raw datums to column datums. -func UnflattenDatums(datums []types.Datum, fts []*types.FieldType, loc *time.Location) ([]types.Datum, error) { - for i, datum := range datums { - ft := fts[i] - uDatum, err := unflatten(datum, ft, loc) - if err != nil { - return datums, errors.Trace(err) - } - datums[i] = uDatum - } - return datums, nil -} - -// unflatten converts a raw datum to a column datum. -func unflatten(datum types.Datum, ft *types.FieldType, loc *time.Location) (types.Datum, error) { - if datum.IsNull() { - return datum, nil - } - switch ft.Tp { - case mysql.TypeFloat: - datum.SetFloat32(float32(datum.GetFloat64())) - return datum, nil - case mysql.TypeTiny, mysql.TypeShort, mysql.TypeYear, mysql.TypeInt24, - mysql.TypeLong, mysql.TypeLonglong, mysql.TypeDouble, mysql.TypeTinyBlob, - mysql.TypeMediumBlob, mysql.TypeBlob, mysql.TypeLongBlob, mysql.TypeVarchar, - mysql.TypeString: - return datum, nil - case mysql.TypeDate, mysql.TypeDatetime, mysql.TypeTimestamp: - var t types.Time - t.Type = ft.Tp - t.Fsp = ft.Decimal - var err error - err = t.FromPackedUint(datum.GetUint64()) - if err != nil { - return datum, errors.Trace(err) - } - if ft.Tp == mysql.TypeTimestamp && !t.IsZero() { - err = t.ConvertTimeZone(time.UTC, loc) - if err != nil { - return datum, errors.Trace(err) - } - } - datum.SetMysqlTime(t) - return datum, nil - case mysql.TypeDuration: //duration should read fsp from column meta data - dur := types.Duration{Duration: time.Duration(datum.GetInt64()), Fsp: ft.Decimal} - datum.SetValue(dur) - return datum, nil - case mysql.TypeEnum: - // ignore error deliberately, to read empty enum value. - enum, err := types.ParseEnumValue(ft.Elems, datum.GetUint64()) - if err != nil { - enum = types.Enum{} - } - datum.SetValue(enum) - return datum, nil - case mysql.TypeSet: - set, err := types.ParseSetValue(ft.Elems, datum.GetUint64()) - if err != nil { - return datum, errors.Trace(err) - } - datum.SetValue(set) - return datum, nil - case mysql.TypeBit: - val := datum.GetUint64() - byteSize := (ft.Flen + 7) >> 3 - datum.SetMysqlBit(types.NewBinaryLiteralFromUint(val, byteSize)) - } - return datum, nil -} - -// EncodeIndexSeekKey encodes an index value to kv.Key. -func EncodeIndexSeekKey(tableID int64, idxID int64, encodedValue []byte) kv.Key { - key := make([]byte, 0, prefixLen+len(encodedValue)) - key = appendTableIndexPrefix(key, tableID) - key = codec.EncodeInt(key, idxID) - key = append(key, encodedValue...) - return key -} - -// CutIndexKey cuts encoded index key into colIDs to bytes slices map. -// The returned value b is the remaining bytes of the key which would be empty if it is unique index or handle data -// if it is non-unique index. -func CutIndexKey(key kv.Key, colIDs []int64) (values map[int64][]byte, b []byte, err error) { - b = key[prefixLen+idLen:] - values = make(map[int64][]byte) - for _, id := range colIDs { - var val []byte - val, b, err = codec.CutOne(b) - if err != nil { - return nil, nil, errors.Trace(err) - } - values[id] = val - } - return -} - -// CutIndexPrefix cuts the index prefix. -func CutIndexPrefix(key kv.Key) []byte { - return key[prefixLen+idLen:] -} - -// CutIndexKeyNew cuts encoded index key into colIDs to bytes slices. -// The returned value b is the remaining bytes of the key which would be empty if it is unique index or handle data -// if it is non-unique index. -func CutIndexKeyNew(key kv.Key, length int) (values [][]byte, b []byte, err error) { - b = key[prefixLen+idLen:] - values = make([][]byte, 0, length) - for i := 0; i < length; i++ { - var val []byte - val, b, err = codec.CutOne(b) - if err != nil { - return nil, nil, errors.Trace(err) - } - values = append(values, val) - } - return -} - -// EncodeTableIndexPrefix encodes index prefix with tableID and idxID. -func EncodeTableIndexPrefix(tableID, idxID int64) kv.Key { - key := make([]byte, 0, prefixLen) - key = appendTableIndexPrefix(key, tableID) - key = codec.EncodeInt(key, idxID) - return key -} - -// EncodeTablePrefix encodes table prefix with table ID. -func EncodeTablePrefix(tableID int64) kv.Key { - var key kv.Key - key = append(key, tablePrefix...) - key = codec.EncodeInt(key, tableID) - return key -} - -// appendTableRecordPrefix appends table record prefix "t[tableID]_r". -func appendTableRecordPrefix(buf []byte, tableID int64) []byte { - buf = append(buf, tablePrefix...) - buf = codec.EncodeInt(buf, tableID) - buf = append(buf, recordPrefixSep...) - return buf -} - -// appendTableIndexPrefix appends table index prefix "t[tableID]_i". -func appendTableIndexPrefix(buf []byte, tableID int64) []byte { - buf = append(buf, tablePrefix...) - buf = codec.EncodeInt(buf, tableID) - buf = append(buf, indexPrefixSep...) - return buf -} - -// ReplaceRecordKeyTableID replace the tableID in the recordKey buf. -func ReplaceRecordKeyTableID(buf []byte, tableID int64) []byte { - if len(buf) < len(tablePrefix)+8 { - return buf - } - - u := codec.EncodeIntToCmpUint(tableID) - binary.BigEndian.PutUint64(buf[len(tablePrefix):], u) - return buf -} - -// GenTableRecordPrefix composes record prefix with tableID: "t[tableID]_r". -func GenTableRecordPrefix(tableID int64) kv.Key { - buf := make([]byte, 0, len(tablePrefix)+8+len(recordPrefixSep)) - return appendTableRecordPrefix(buf, tableID) -} - -// GenTableIndexPrefix composes index prefix with tableID: "t[tableID]_i". -func GenTableIndexPrefix(tableID int64) kv.Key { - buf := make([]byte, 0, len(tablePrefix)+8+len(indexPrefixSep)) - return appendTableIndexPrefix(buf, tableID) -} - -// GenTablePrefix composes table record and index prefix: "t[tableID]". -func GenTablePrefix(tableID int64) kv.Key { - buf := make([]byte, 0, len(tablePrefix)+8) - buf = append(buf, tablePrefix...) - buf = codec.EncodeInt(buf, tableID) - return buf -} - -// TruncateToRowKeyLen truncates the key to row key length if the key is longer than row key. -func TruncateToRowKeyLen(key kv.Key) kv.Key { - if len(key) > recordRowKeyLen { - return key[:recordRowKeyLen] - } - return key -} - -// GetTableHandleKeyRange returns table handle's key range with tableID. -func GetTableHandleKeyRange(tableID int64) (startKey, endKey []byte) { - startKey = EncodeRowKeyWithHandle(tableID, math.MinInt64) - endKey = EncodeRowKeyWithHandle(tableID, math.MaxInt64) - return -} - -// GetTableIndexKeyRange returns table index's key range with tableID and indexID. -func GetTableIndexKeyRange(tableID, indexID int64) (startKey, endKey []byte) { - startKey = EncodeIndexSeekKey(tableID, indexID, nil) - endKey = EncodeIndexSeekKey(tableID, indexID, []byte{255}) - return -} - -type keyRangeSorter struct { - ranges []kv.KeyRange -} - -func (r *keyRangeSorter) Len() int { - return len(r.ranges) -} - -func (r *keyRangeSorter) Less(i, j int) bool { - a := r.ranges[i] - b := r.ranges[j] - cmp := bytes.Compare(a.StartKey, b.StartKey) - return cmp < 0 -} - -func (r *keyRangeSorter) Swap(i, j int) { - r.ranges[i], r.ranges[j] = r.ranges[j], r.ranges[i] -} - -const ( - codeInvalidRecordKey = 4 - codeInvalidColumnCount = 5 - codeInvalidKey = 6 - codeInvalidIndexKey = 7 -) diff --git a/vendor/github.com/pingcap/tidb/terror/terror.go b/vendor/github.com/pingcap/tidb/terror/terror.go deleted file mode 100644 index 87cbc3b..0000000 --- a/vendor/github.com/pingcap/tidb/terror/terror.go +++ /dev/null @@ -1,344 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package terror - -import ( - "encoding/json" - "fmt" - "runtime" - "strconv" - - "github.com/juju/errors" - "github.com/pingcap/tidb/mysql" - log "github.com/sirupsen/logrus" -) - -// Global error instances. -var ( - ErrCritical = ClassGlobal.New(CodeExecResultIsEmpty, "critical error %v") - ErrResultUndetermined = ClassGlobal.New(CodeResultUndetermined, "execution result undetermined") -) - -// ErrCode represents a specific error type in a error class. -// Same error code can be used in different error classes. -type ErrCode int - -const ( - // Executor error codes. - - // CodeUnknown is for errors of unknown reason. - CodeUnknown ErrCode = -1 - // CodeExecResultIsEmpty indicates execution result is empty. - CodeExecResultIsEmpty ErrCode = 3 - - // Expression error codes. - - // CodeMissConnectionID indicates connection id is missing. - CodeMissConnectionID ErrCode = 1 - - // Special error codes. - - // CodeResultUndetermined indicates the sql execution result is undetermined. - CodeResultUndetermined ErrCode = 2 -) - -// ErrClass represents a class of errors. -type ErrClass int - -// Error classes. -const ( - ClassAutoid ErrClass = iota + 1 - ClassDDL - ClassDomain - ClassEvaluator - ClassExecutor - ClassExpression - ClassAdmin - ClassKV - ClassMeta - ClassOptimizer - ClassParser - ClassPerfSchema - ClassPrivilege - ClassSchema - ClassServer - ClassStructure - ClassVariable - ClassXEval - ClassTable - ClassTypes - ClassGlobal - ClassMockTikv - ClassJSON - ClassTiKV - ClassSession - // Add more as needed. -) - -var errClz2Str = map[ErrClass]string{ - ClassAutoid: "autoid", - ClassDDL: "ddl", - ClassDomain: "domain", - ClassExecutor: "executor", - ClassExpression: "expression", - ClassAdmin: "admin", - ClassMeta: "meta", - ClassKV: "kv", - ClassOptimizer: "planner", - ClassParser: "parser", - ClassPerfSchema: "perfschema", - ClassPrivilege: "privilege", - ClassSchema: "schema", - ClassServer: "server", - ClassStructure: "structure", - ClassVariable: "variable", - ClassTable: "table", - ClassTypes: "types", - ClassGlobal: "global", - ClassMockTikv: "mocktikv", - ClassJSON: "json", - ClassTiKV: "tikv", - ClassSession: "session", -} - -// String implements fmt.Stringer interface. -func (ec ErrClass) String() string { - if s, exists := errClz2Str[ec]; exists { - return s - } - return strconv.Itoa(int(ec)) -} - -// EqualClass returns true if err is *Error with the same class. -func (ec ErrClass) EqualClass(err error) bool { - e := errors.Cause(err) - if e == nil { - return false - } - if te, ok := e.(*Error); ok { - return te.class == ec - } - return false -} - -// NotEqualClass returns true if err is not *Error with the same class. -func (ec ErrClass) NotEqualClass(err error) bool { - return !ec.EqualClass(err) -} - -// New creates an *Error with an error code and an error message. -// Usually used to create base *Error. -func (ec ErrClass) New(code ErrCode, message string) *Error { - return &Error{ - class: ec, - code: code, - message: message, - } -} - -// Error implements error interface and adds integer Class and Code, so -// errors with different message can be compared. -type Error struct { - class ErrClass - code ErrCode - message string - args []interface{} - file string - line int -} - -// Class returns ErrClass -func (e *Error) Class() ErrClass { - return e.class -} - -// Code returns ErrCode -func (e *Error) Code() ErrCode { - return e.code -} - -// MarshalJSON implements json.Marshaler interface. -func (e *Error) MarshalJSON() ([]byte, error) { - return json.Marshal(&struct { - Class ErrClass `json:"class"` - Code ErrCode `json:"code"` - Msg string `json:"message"` - }{ - Class: e.class, - Code: e.code, - Msg: e.getMsg(), - }) -} - -// UnmarshalJSON implements json.Unmarshaler interface. -func (e *Error) UnmarshalJSON(data []byte) error { - err := &struct { - Class ErrClass `json:"class"` - Code ErrCode `json:"code"` - Msg string `json:"message"` - }{} - - if err := json.Unmarshal(data, &err); err != nil { - return errors.Trace(err) - } - - e.class = err.Class - e.code = err.Code - e.message = err.Msg - return nil -} - -// Location returns the location where the error is created, -// implements juju/errors locationer interface. -func (e *Error) Location() (file string, line int) { - return e.file, e.line -} - -// Error implements error interface. -func (e *Error) Error() string { - return fmt.Sprintf("[%s:%d]%s", e.class, e.code, e.getMsg()) -} - -func (e *Error) getMsg() string { - if len(e.args) > 0 { - return fmt.Sprintf(e.message, e.args...) - } - return e.message -} - -// Gen generates a new *Error with the same class and code, and a new formatted message. -func (e *Error) Gen(format string, args ...interface{}) *Error { - err := *e - err.message = format - err.args = args - _, err.file, err.line, _ = runtime.Caller(1) - return &err -} - -// GenByArgs generates a new *Error with the same class and code, and new arguments. -func (e *Error) GenByArgs(args ...interface{}) *Error { - err := *e - err.args = args - _, err.file, err.line, _ = runtime.Caller(1) - return &err -} - -// FastGen generates a new *Error with the same class and code, and a new formatted message. -// This will not call runtime.Caller to get file and line. -func (e *Error) FastGen(format string, args ...interface{}) *Error { - err := *e - err.message = format - err.args = args - return &err -} - -// Equal checks if err is equal to e. -func (e *Error) Equal(err error) bool { - originErr := errors.Cause(err) - if originErr == nil { - return false - } - - if error(e) == originErr { - return true - } - inErr, ok := originErr.(*Error) - return ok && e.class == inErr.class && e.code == inErr.code -} - -// NotEqual checks if err is not equal to e. -func (e *Error) NotEqual(err error) bool { - return !e.Equal(err) -} - -// ToSQLError convert Error to mysql.SQLError. -func (e *Error) ToSQLError() *mysql.SQLError { - code := e.getMySQLErrorCode() - return mysql.NewErrf(code, "%s", e.getMsg()) -} - -var defaultMySQLErrorCode uint16 - -func (e *Error) getMySQLErrorCode() uint16 { - codeMap, ok := ErrClassToMySQLCodes[e.class] - if !ok { - log.Warnf("Unknown error class: %v", e.class) - return defaultMySQLErrorCode - } - code, ok := codeMap[e.code] - if !ok { - log.Debugf("Unknown error class: %v code: %v", e.class, e.code) - return defaultMySQLErrorCode - } - return code -} - -var ( - // ErrClassToMySQLCodes is the map of ErrClass to code-map. - ErrClassToMySQLCodes map[ErrClass]map[ErrCode]uint16 -) - -func init() { - ErrClassToMySQLCodes = make(map[ErrClass]map[ErrCode]uint16) - defaultMySQLErrorCode = mysql.ErrUnknown -} - -// ErrorEqual returns a boolean indicating whether err1 is equal to err2. -func ErrorEqual(err1, err2 error) bool { - e1 := errors.Cause(err1) - e2 := errors.Cause(err2) - - if e1 == e2 { - return true - } - - if e1 == nil || e2 == nil { - return e1 == e2 - } - - te1, ok1 := e1.(*Error) - te2, ok2 := e2.(*Error) - if ok1 && ok2 { - return te1.class == te2.class && te1.code == te2.code - } - - return e1.Error() == e2.Error() -} - -// ErrorNotEqual returns a boolean indicating whether err1 isn't equal to err2. -func ErrorNotEqual(err1, err2 error) bool { - return !ErrorEqual(err1, err2) -} - -// MustNil fatals if err is not nil. -func MustNil(err error) { - if err != nil { - log.Fatalf(errors.ErrorStack(err)) - } -} - -// Call executes a function and checks the returned err. -func Call(fn func() error) { - err := fn() - if err != nil { - log.Error(errors.ErrorStack(err)) - } -} - -// Log logs the error if it is not nil. -func Log(err error) { - if err != nil { - log.Error(errors.ErrorStack(err)) - } -} diff --git a/vendor/github.com/pingcap/tidb/types/binary_literal.go b/vendor/github.com/pingcap/tidb/types/binary_literal.go deleted file mode 100644 index 7e72bca..0000000 --- a/vendor/github.com/pingcap/tidb/types/binary_literal.go +++ /dev/null @@ -1,227 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -import ( - "bytes" - "encoding/binary" - "encoding/hex" - "fmt" - "math" - "strconv" - "strings" - - "github.com/juju/errors" - "github.com/pingcap/tidb/sessionctx/stmtctx" -) - -// BinaryLiteral is the internal type for storing bit / hex literal type. -type BinaryLiteral []byte - -// BitLiteral is the bit literal type. -type BitLiteral BinaryLiteral - -// HexLiteral is the hex literal type. -type HexLiteral BinaryLiteral - -// ZeroBinaryLiteral is a BinaryLiteral literal with zero value. -var ZeroBinaryLiteral = BinaryLiteral{} - -func trimLeadingZeroBytes(bytes []byte) []byte { - if len(bytes) == 0 { - return bytes - } - pos, posMax := 0, len(bytes)-1 - for ; pos < posMax; pos++ { - if bytes[pos] != 0 { - break - } - } - return bytes[pos:] -} - -// NewBinaryLiteralFromUint creates a new BinaryLiteral instance by the given uint value in BitEndian. -// byteSize will be used as the length of the new BinaryLiteral, with leading bytes filled to zero. -// If byteSize is -1, the leading zeros in new BinaryLiteral will be trimmed. -func NewBinaryLiteralFromUint(value uint64, byteSize int) BinaryLiteral { - if byteSize != -1 && (byteSize < 1 || byteSize > 8) { - panic("Invalid byteSize") - } - buf := make([]byte, 8) - binary.BigEndian.PutUint64(buf, value) - if byteSize == -1 { - buf = trimLeadingZeroBytes(buf) - } else { - buf = buf[8-byteSize:] - } - return buf -} - -// String implements fmt.Stringer interface. -func (b BinaryLiteral) String() string { - if len(b) == 0 { - return "" - } - return "0x" + hex.EncodeToString(b) -} - -// ToString returns the string representation for the literal. -func (b BinaryLiteral) ToString() string { - return string(b) -} - -// ToBitLiteralString returns the bit literal representation for the literal. -func (b BinaryLiteral) ToBitLiteralString(trimLeadingZero bool) string { - if len(b) == 0 { - return "b''" - } - var buf bytes.Buffer - for _, data := range b { - fmt.Fprintf(&buf, "%08b", data) - } - ret := buf.Bytes() - if trimLeadingZero { - ret = bytes.TrimLeft(ret, "0") - if len(ret) == 0 { - ret = []byte{'0'} - } - } - return fmt.Sprintf("b'%s'", string(ret)) -} - -// ToInt returns the int value for the literal. -func (b BinaryLiteral) ToInt(sc *stmtctx.StatementContext) (uint64, error) { - buf := trimLeadingZeroBytes(b) - length := len(buf) - if length == 0 { - return 0, nil - } - if length > 8 { - var err error = ErrTruncatedWrongVal.GenByArgs("BINARY", b) - if sc != nil { - err = sc.HandleTruncate(err) - } - return math.MaxUint64, err - } - // Note: the byte-order is BigEndian. - val := uint64(buf[0]) - for i := 1; i < length; i++ { - val = (val << 8) | uint64(buf[i]) - } - return val, nil -} - -// Compare compares BinaryLiteral to another one -func (b BinaryLiteral) Compare(b2 BinaryLiteral) int { - bufB := trimLeadingZeroBytes(b) - bufB2 := trimLeadingZeroBytes(b2) - if len(bufB) > len(bufB2) { - return 1 - } - if len(bufB) < len(bufB2) { - return -1 - } - return bytes.Compare(bufB, bufB2) -} - -// ParseBitStr parses bit string. -// The string format can be b'val', B'val' or 0bval, val must be 0 or 1. -// See https://dev.mysql.com/doc/refman/5.7/en/bit-value-literals.html -func ParseBitStr(s string) (BinaryLiteral, error) { - if len(s) == 0 { - return nil, errors.Errorf("invalid empty string for parsing bit type") - } - - if s[0] == 'b' || s[0] == 'B' { - // format is b'val' or B'val' - s = strings.Trim(s[1:], "'") - } else if strings.HasPrefix(s, "0b") { - s = s[2:] - } else { - // here means format is not b'val', B'val' or 0bval. - return nil, errors.Errorf("invalid bit type format %s", s) - } - - if len(s) == 0 { - return ZeroBinaryLiteral, nil - } - - alignedLength := (len(s) + 7) &^ 7 - s = ("00000000" + s)[len(s)+8-alignedLength:] // Pad with zero (slice from `-alignedLength`) - byteLength := len(s) >> 3 - buf := make([]byte, byteLength) - - for i := 0; i < byteLength; i++ { - strPosition := i << 3 - val, err := strconv.ParseUint(s[strPosition:strPosition+8], 2, 8) - if err != nil { - return nil, errors.Trace(err) - } - buf[i] = byte(val) - } - - return buf, nil -} - -// NewBitLiteral parses bit string as BitLiteral type. -func NewBitLiteral(s string) (BitLiteral, error) { - b, err := ParseBitStr(s) - if err != nil { - return BitLiteral{}, err - } - return BitLiteral(b), nil -} - -// ParseHexStr parses hexadecimal string literal. -// See https://dev.mysql.com/doc/refman/5.7/en/hexadecimal-literals.html -func ParseHexStr(s string) (BinaryLiteral, error) { - if len(s) == 0 { - return nil, errors.Errorf("invalid empty string for parsing hexadecimal literal") - } - - if s[0] == 'x' || s[0] == 'X' { - // format is x'val' or X'val' - s = strings.Trim(s[1:], "'") - if len(s)%2 != 0 { - return nil, errors.Errorf("invalid hexadecimal format, must even numbers, but %d", len(s)) - } - } else if strings.HasPrefix(s, "0x") { - s = s[2:] - } else { - // here means format is not x'val', X'val' or 0xval. - return nil, errors.Errorf("invalid hexadecimal format %s", s) - } - - if len(s) == 0 { - return ZeroBinaryLiteral, nil - } - - if len(s)%2 != 0 { - s = "0" + s - } - buf, err := hex.DecodeString(s) - if err != nil { - return nil, errors.Trace(err) - } - return buf, nil -} - -// NewHexLiteral parses hexadecimal string as HexLiteral type. -func NewHexLiteral(s string) (HexLiteral, error) { - h, err := ParseHexStr(s) - if err != nil { - return HexLiteral{}, err - } - return HexLiteral(h), nil -} diff --git a/vendor/github.com/pingcap/tidb/types/compare.go b/vendor/github.com/pingcap/tidb/types/compare.go deleted file mode 100644 index 6774d6f..0000000 --- a/vendor/github.com/pingcap/tidb/types/compare.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -// CompareInt64 returns an integer comparing the int64 x to y. -func CompareInt64(x, y int64) int { - if x < y { - return -1 - } else if x == y { - return 0 - } - - return 1 -} - -// CompareUint64 returns an integer comparing the uint64 x to y. -func CompareUint64(x, y uint64) int { - if x < y { - return -1 - } else if x == y { - return 0 - } - - return 1 -} - -// CompareFloat64 returns an integer comparing the float64 x to y. -func CompareFloat64(x, y float64) int { - if x < y { - return -1 - } else if x == y { - return 0 - } - - return 1 -} - -// CompareString returns an integer comparing the string x to y. -func CompareString(x, y string) int { - if x < y { - return -1 - } else if x == y { - return 0 - } - - return 1 -} diff --git a/vendor/github.com/pingcap/tidb/types/convert.go b/vendor/github.com/pingcap/tidb/types/convert.go deleted file mode 100644 index 82aac05..0000000 --- a/vendor/github.com/pingcap/tidb/types/convert.go +++ /dev/null @@ -1,463 +0,0 @@ -// Copyright 2014 The ql Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSES/QL-LICENSE file. - -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -import ( - "math" - "strconv" - "strings" - - "github.com/juju/errors" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/sessionctx/stmtctx" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/types/json" - "github.com/pingcap/tidb/util/hack" -) - -func truncateStr(str string, flen int) string { - if flen != UnspecifiedLength && len(str) > flen { - str = str[:flen] - } - return str -} - -// UnsignedUpperBound indicates the max uint64 values of different mysql types. -var UnsignedUpperBound = map[byte]uint64{ - mysql.TypeTiny: math.MaxUint8, - mysql.TypeShort: math.MaxUint16, - mysql.TypeInt24: mysql.MaxUint24, - mysql.TypeLong: math.MaxUint32, - mysql.TypeLonglong: math.MaxUint64, - mysql.TypeBit: math.MaxUint64, - mysql.TypeEnum: math.MaxUint64, - mysql.TypeSet: math.MaxUint64, -} - -// SignedUpperBound indicates the max int64 values of different mysql types. -var SignedUpperBound = map[byte]int64{ - mysql.TypeTiny: math.MaxInt8, - mysql.TypeShort: math.MaxInt16, - mysql.TypeInt24: mysql.MaxInt24, - mysql.TypeLong: math.MaxInt32, - mysql.TypeLonglong: math.MaxInt64, -} - -// SignedLowerBound indicates the min int64 values of different mysql types. -var SignedLowerBound = map[byte]int64{ - mysql.TypeTiny: math.MinInt8, - mysql.TypeShort: math.MinInt16, - mysql.TypeInt24: mysql.MinInt24, - mysql.TypeLong: math.MinInt32, - mysql.TypeLonglong: math.MinInt64, -} - -// ConvertFloatToInt converts a float64 value to a int value. -func ConvertFloatToInt(fval float64, lowerBound, upperBound int64, tp byte) (int64, error) { - val := RoundFloat(fval) - if val < float64(lowerBound) { - return lowerBound, overflow(val, tp) - } - - if val >= float64(upperBound) { - if val == float64(upperBound) { - return upperBound, nil - } - return upperBound, overflow(val, tp) - } - return int64(val), nil -} - -// ConvertIntToInt converts an int value to another int value of different precision. -func ConvertIntToInt(val int64, lowerBound int64, upperBound int64, tp byte) (int64, error) { - if val < lowerBound { - return lowerBound, overflow(val, tp) - } - - if val > upperBound { - return upperBound, overflow(val, tp) - } - - return val, nil -} - -// ConvertUintToInt converts an uint value to an int value. -func ConvertUintToInt(val uint64, upperBound int64, tp byte) (int64, error) { - if val > uint64(upperBound) { - return upperBound, overflow(val, tp) - } - - return int64(val), nil -} - -// ConvertIntToUint converts an int value to an uint value. -func ConvertIntToUint(val int64, upperBound uint64, tp byte) (uint64, error) { - if uint64(val) > upperBound { - return upperBound, overflow(val, tp) - } - - return uint64(val), nil -} - -// ConvertUintToUint converts an uint value to another uint value of different precision. -func ConvertUintToUint(val uint64, upperBound uint64, tp byte) (uint64, error) { - if val > upperBound { - return upperBound, overflow(val, tp) - } - - return val, nil -} - -// ConvertFloatToUint converts a float value to an uint value. -func ConvertFloatToUint(fval float64, upperBound uint64, tp byte) (uint64, error) { - val := RoundFloat(fval) - if val < 0 { - return uint64(int64(val)), overflow(val, tp) - } - - if val > float64(upperBound) { - return upperBound, overflow(val, tp) - } - return uint64(val), nil -} - -// StrToInt converts a string to an integer at the best-effort. -func StrToInt(sc *stmtctx.StatementContext, str string) (int64, error) { - str = strings.TrimSpace(str) - validPrefix, err := getValidIntPrefix(sc, str) - iVal, err1 := strconv.ParseInt(validPrefix, 10, 64) - if err1 != nil { - return iVal, ErrOverflow.GenByArgs("BIGINT", validPrefix) - } - return iVal, errors.Trace(err) -} - -// StrToUint converts a string to an unsigned integer at the best-effortt. -func StrToUint(sc *stmtctx.StatementContext, str string) (uint64, error) { - str = strings.TrimSpace(str) - validPrefix, err := getValidIntPrefix(sc, str) - if validPrefix[0] == '+' { - validPrefix = validPrefix[1:] - } - uVal, err1 := strconv.ParseUint(validPrefix, 10, 64) - if err1 != nil { - return uVal, ErrOverflow.GenByArgs("BIGINT UNSIGNED", validPrefix) - } - return uVal, errors.Trace(err) -} - -// StrToDateTime converts str to MySQL DateTime. -func StrToDateTime(sc *stmtctx.StatementContext, str string, fsp int) (Time, error) { - return ParseTime(sc, str, mysql.TypeDatetime, fsp) -} - -// StrToDuration converts str to Duration. It returns Duration in normal case, -// and returns Time when str is in datetime format. -// when isDuration is true, the d is returned, when it is false, the t is returned. -// See https://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html. -func StrToDuration(sc *stmtctx.StatementContext, str string, fsp int) (d Duration, t Time, isDuration bool, err error) { - str = strings.TrimSpace(str) - length := len(str) - if length > 0 && str[0] == '-' { - length-- - } - // Timestamp format is 'YYYYMMDDHHMMSS' or 'YYMMDDHHMMSS', which length is 12. - // See #3923, it explains what we do here. - if length >= 12 { - t, err = StrToDateTime(sc, str, fsp) - if err == nil { - return d, t, false, nil - } - } - - d, err = ParseDuration(str, fsp) - if ErrTruncatedWrongVal.Equal(err) { - err = sc.HandleTruncate(err) - } - return d, t, true, errors.Trace(err) -} - -// NumberToDuration converts number to Duration. -func NumberToDuration(number int64, fsp int) (Duration, error) { - if number > TimeMaxValue { - // Try to parse DATETIME. - if number >= 10000000000 { // '2001-00-00 00-00-00' - if t, err := ParseDatetimeFromNum(nil, number); err == nil { - dur, err1 := t.ConvertToDuration() - return dur, errors.Trace(err1) - } - } - dur, err1 := MaxMySQLTime(fsp).ConvertToDuration() - terror.Log(err1) - return dur, ErrOverflow.GenByArgs("Duration", strconv.Itoa(int(number))) - } else if number < -TimeMaxValue { - dur, err1 := MaxMySQLTime(fsp).ConvertToDuration() - terror.Log(err1) - dur.Duration = -dur.Duration - return dur, ErrOverflow.GenByArgs("Duration", strconv.Itoa(int(number))) - } - var neg bool - if neg = number < 0; neg { - number = -number - } - - if number/10000 > TimeMaxHour || number%100 >= 60 || (number/100)%100 >= 60 { - return ZeroDuration, errors.Trace(ErrInvalidTimeFormat.GenByArgs(number)) - } - t := Time{Time: FromDate(0, 0, 0, int(number/10000), int((number/100)%100), int(number%100), 0), Type: mysql.TypeDuration, Fsp: fsp} - dur, err := t.ConvertToDuration() - if err != nil { - return ZeroDuration, errors.Trace(err) - } - if neg { - dur.Duration = -dur.Duration - } - return dur, nil -} - -// getValidIntPrefix gets prefix of the string which can be successfully parsed as int. -func getValidIntPrefix(sc *stmtctx.StatementContext, str string) (string, error) { - floatPrefix, err := getValidFloatPrefix(sc, str) - if err != nil { - return floatPrefix, errors.Trace(err) - } - return floatStrToIntStr(floatPrefix) -} - -// floatStrToIntStr converts a valid float string into valid integer string which can be parsed by -// strconv.ParseInt, we can't parse float first then convert it to string because precision will -// be lost. -func floatStrToIntStr(validFloat string) (string, error) { - var dotIdx = -1 - var eIdx = -1 - for i := 0; i < len(validFloat); i++ { - switch validFloat[i] { - case '.': - dotIdx = i - case 'e', 'E': - eIdx = i - } - } - if eIdx == -1 { - if dotIdx == -1 { - return validFloat, nil - } - return validFloat[:dotIdx], nil - } - var intCnt int - digits := make([]byte, 0, len(validFloat)) - if dotIdx == -1 { - digits = append(digits, validFloat[:eIdx]...) - intCnt = len(digits) - } else { - digits = append(digits, validFloat[:dotIdx]...) - intCnt = len(digits) - digits = append(digits, validFloat[dotIdx+1:eIdx]...) - } - exp, err := strconv.Atoi(validFloat[eIdx+1:]) - if err != nil { - return validFloat, errors.Trace(err) - } - if exp > 0 && int64(intCnt) > (math.MaxInt64-int64(exp)) { - // (exp + incCnt) overflows MaxInt64. - return validFloat, ErrOverflow.GenByArgs("BIGINT", validFloat) - } - intCnt += exp - if intCnt <= 0 { - return "0", nil - } - if intCnt == 1 && (digits[0] == '-' || digits[0] == '+') { - return "0", nil - } - var validInt string - if intCnt <= len(digits) { - validInt = string(digits[:intCnt]) - } else { - // convert scientific notation decimal number - extraZeroCount := intCnt - len(digits) - if extraZeroCount > 20 { - // Return overflow to avoid allocating too much memory. - return validFloat, ErrOverflow.GenByArgs("BIGINT", validFloat) - } - validInt = string(digits) + strings.Repeat("0", extraZeroCount) - } - return validInt, nil -} - -// StrToFloat converts a string to a float64 at the best-effort. -func StrToFloat(sc *stmtctx.StatementContext, str string) (float64, error) { - str = strings.TrimSpace(str) - validStr, err := getValidFloatPrefix(sc, str) - f, err1 := strconv.ParseFloat(validStr, 64) - if err1 != nil { - if err2, ok := err1.(*strconv.NumError); ok { - // value will truncate to MAX/MIN if out of range. - if err2.Err == strconv.ErrRange { - err1 = sc.HandleTruncate(ErrTruncatedWrongVal.GenByArgs("DOUBLE", str)) - if math.IsInf(f, 1) { - f = math.MaxFloat64 - } else if math.IsInf(f, -1) { - f = -math.MaxFloat64 - } - } - } - return f, errors.Trace(err1) - } - return f, errors.Trace(err) -} - -// ConvertJSONToInt casts JSON into int64. -func ConvertJSONToInt(sc *stmtctx.StatementContext, j json.BinaryJSON, unsigned bool) (int64, error) { - switch j.TypeCode { - case json.TypeCodeObject, json.TypeCodeArray: - return 0, nil - case json.TypeCodeLiteral: - switch j.Value[0] { - case json.LiteralNil, json.LiteralFalse: - return 0, nil - default: - return 1, nil - } - case json.TypeCodeInt64, json.TypeCodeUint64: - return j.GetInt64(), nil - case json.TypeCodeFloat64: - f := j.GetFloat64() - if !unsigned { - lBound := SignedLowerBound[mysql.TypeLonglong] - uBound := SignedUpperBound[mysql.TypeLonglong] - return ConvertFloatToInt(f, lBound, uBound, mysql.TypeDouble) - } - bound := UnsignedUpperBound[mysql.TypeLonglong] - u, err := ConvertFloatToUint(f, bound, mysql.TypeDouble) - return int64(u), errors.Trace(err) - case json.TypeCodeString: - return StrToInt(sc, hack.String(j.GetString())) - } - return 0, errors.New("Unknown type code in JSON") -} - -// ConvertJSONToFloat casts JSON into float64. -func ConvertJSONToFloat(sc *stmtctx.StatementContext, j json.BinaryJSON) (float64, error) { - switch j.TypeCode { - case json.TypeCodeObject, json.TypeCodeArray: - return 0, nil - case json.TypeCodeLiteral: - switch j.Value[0] { - case json.LiteralNil, json.LiteralFalse: - return 0, nil - default: - return 1, nil - } - case json.TypeCodeInt64: - return float64(j.GetInt64()), nil - case json.TypeCodeUint64: - u, err := ConvertIntToUint(j.GetInt64(), UnsignedUpperBound[mysql.TypeLonglong], mysql.TypeLonglong) - return float64(u), errors.Trace(err) - case json.TypeCodeFloat64: - return j.GetFloat64(), nil - case json.TypeCodeString: - return StrToFloat(sc, hack.String(j.GetString())) - } - return 0, errors.New("Unknown type code in JSON") -} - -// getValidFloatPrefix gets prefix of string which can be successfully parsed as float. -func getValidFloatPrefix(sc *stmtctx.StatementContext, s string) (valid string, err error) { - var ( - sawDot bool - sawDigit bool - validLen int - eIdx int - ) - for i := 0; i < len(s); i++ { - c := s[i] - if c == '+' || c == '-' { - if i != 0 && i != eIdx+1 { // "1e+1" is valid. - break - } - } else if c == '.' { - if sawDot || eIdx > 0 { // "1.1." or "1e1.1" - break - } - sawDot = true - if sawDigit { // "123." is valid. - validLen = i + 1 - } - } else if c == 'e' || c == 'E' { - if !sawDigit { // "+.e" - break - } - if eIdx != 0 { // "1e5e" - break - } - eIdx = i - } else if c < '0' || c > '9' { - break - } else { - sawDigit = true - validLen = i + 1 - } - } - valid = s[:validLen] - if valid == "" { - valid = "0" - } - if validLen == 0 || validLen != len(s) { - err = errors.Trace(handleTruncateError(sc)) - } - return valid, err -} - -// ToString converts an interface to a string. -func ToString(value interface{}) (string, error) { - switch v := value.(type) { - case bool: - if v { - return "1", nil - } - return "0", nil - case int: - return strconv.FormatInt(int64(v), 10), nil - case int64: - return strconv.FormatInt(v, 10), nil - case uint64: - return strconv.FormatUint(v, 10), nil - case float32: - return strconv.FormatFloat(float64(v), 'f', -1, 32), nil - case float64: - return strconv.FormatFloat(v, 'f', -1, 64), nil - case string: - return v, nil - case []byte: - return string(v), nil - case Time: - return v.String(), nil - case Duration: - return v.String(), nil - case *MyDecimal: - return v.String(), nil - case BinaryLiteral: - return v.ToString(), nil - case Enum: - return v.String(), nil - case Set: - return v.String(), nil - default: - return "", errors.Errorf("cannot convert %v(type %T) to string", value, value) - } -} diff --git a/vendor/github.com/pingcap/tidb/types/datum.go b/vendor/github.com/pingcap/tidb/types/datum.go deleted file mode 100644 index 02cb84e..0000000 --- a/vendor/github.com/pingcap/tidb/types/datum.go +++ /dev/null @@ -1,1840 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -import ( - "fmt" - "math" - "sort" - "strconv" - "strings" - "time" - "unicode/utf8" - - "github.com/juju/errors" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/sessionctx/stmtctx" - "github.com/pingcap/tidb/types/json" - "github.com/pingcap/tidb/util/charset" - "github.com/pingcap/tidb/util/hack" -) - -// Kind constants. -const ( - KindNull byte = 0 - KindInt64 byte = 1 - KindUint64 byte = 2 - KindFloat32 byte = 3 - KindFloat64 byte = 4 - KindString byte = 5 - KindBytes byte = 6 - KindBinaryLiteral byte = 7 // Used for BIT / HEX literals. - KindMysqlDecimal byte = 8 - KindMysqlDuration byte = 9 - KindMysqlEnum byte = 10 - KindMysqlBit byte = 11 // Used for BIT table column values. - KindMysqlSet byte = 12 - KindMysqlTime byte = 13 - KindInterface byte = 14 - KindMinNotNull byte = 15 - KindMaxValue byte = 16 - KindRaw byte = 17 - KindMysqlJSON byte = 18 -) - -// Datum is a data box holds different kind of data. -// It has better performance and is easier to use than `interface{}`. -type Datum struct { - k byte // datum kind. - collation uint8 // collation can hold uint8 values. - decimal uint16 // decimal can hold uint16 values. - length uint32 // length can hold uint32 values. - i int64 // i can hold int64 uint64 float64 values. - b []byte // b can hold string or []byte values. - x interface{} // x hold all other types. -} - -// Copy deep copies a Datum. -func (d *Datum) Copy() *Datum { - ret := *d - if d.b != nil { - ret.b = make([]byte, len(d.b)) - copy(ret.b, d.b) - } - switch ret.Kind() { - case KindMysqlDecimal: - d := *d.GetMysqlDecimal() - ret.SetMysqlDecimal(&d) - case KindMysqlTime: - ret.SetMysqlTime(d.GetMysqlTime()) - } - return &ret -} - -// Kind gets the kind of the datum. -func (d *Datum) Kind() byte { - return d.k -} - -// Collation gets the collation of the datum. -func (d *Datum) Collation() byte { - return d.collation -} - -// SetCollation sets the collation of the datum. -func (d *Datum) SetCollation(collation byte) { - d.collation = collation -} - -// Frac gets the frac of the datum. -func (d *Datum) Frac() int { - return int(d.decimal) -} - -// SetFrac sets the frac of the datum. -func (d *Datum) SetFrac(frac int) { - d.decimal = uint16(frac) -} - -// Length gets the length of the datum. -func (d *Datum) Length() int { - return int(d.length) -} - -// SetLength sets the length of the datum. -func (d *Datum) SetLength(l int) { - d.length = uint32(l) -} - -// IsNull checks if datum is null. -func (d *Datum) IsNull() bool { - return d.k == KindNull -} - -// GetInt64 gets int64 value. -func (d *Datum) GetInt64() int64 { - return d.i -} - -// SetInt64 sets int64 value. -func (d *Datum) SetInt64(i int64) { - d.k = KindInt64 - d.i = i -} - -// GetUint64 gets uint64 value. -func (d *Datum) GetUint64() uint64 { - return uint64(d.i) -} - -// SetUint64 sets uint64 value. -func (d *Datum) SetUint64(i uint64) { - d.k = KindUint64 - d.i = int64(i) -} - -// GetFloat64 gets float64 value. -func (d *Datum) GetFloat64() float64 { - return math.Float64frombits(uint64(d.i)) -} - -// SetFloat64 sets float64 value. -func (d *Datum) SetFloat64(f float64) { - d.k = KindFloat64 - d.i = int64(math.Float64bits(f)) -} - -// GetFloat32 gets float32 value. -func (d *Datum) GetFloat32() float32 { - return float32(math.Float64frombits(uint64(d.i))) -} - -// SetFloat32 sets float32 value. -func (d *Datum) SetFloat32(f float32) { - d.k = KindFloat32 - d.i = int64(math.Float64bits(float64(f))) -} - -// GetString gets string value. -func (d *Datum) GetString() string { - return hack.String(d.b) -} - -// SetString sets string value. -func (d *Datum) SetString(s string) { - d.k = KindString - sink(s) - d.b = hack.Slice(s) -} - -// sink prevents s from being allocated on the stack. -var sink = func(s string) { -} - -// GetBytes gets bytes value. -func (d *Datum) GetBytes() []byte { - return d.b -} - -// SetBytes sets bytes value to datum. -func (d *Datum) SetBytes(b []byte) { - d.k = KindBytes - d.b = b -} - -// SetBytesAsString sets bytes value to datum as string type. -func (d *Datum) SetBytesAsString(b []byte) { - d.k = KindString - d.b = b -} - -// GetInterface gets interface value. -func (d *Datum) GetInterface() interface{} { - return d.x -} - -// SetInterface sets interface to datum. -func (d *Datum) SetInterface(x interface{}) { - d.k = KindInterface - d.x = x -} - -// SetNull sets datum to nil. -func (d *Datum) SetNull() { - d.k = KindNull - d.x = nil -} - -// GetBinaryLiteral gets Bit value -func (d *Datum) GetBinaryLiteral() BinaryLiteral { - return d.b -} - -// GetMysqlBit gets MysqlBit value -func (d *Datum) GetMysqlBit() BinaryLiteral { - return d.GetBinaryLiteral() -} - -// SetBinaryLiteral sets Bit value -func (d *Datum) SetBinaryLiteral(b BinaryLiteral) { - d.k = KindBinaryLiteral - d.b = b -} - -// SetMysqlBit sets MysqlBit value -func (d *Datum) SetMysqlBit(b BinaryLiteral) { - d.k = KindMysqlBit - d.b = b -} - -// GetMysqlDecimal gets Decimal value -func (d *Datum) GetMysqlDecimal() *MyDecimal { - return d.x.(*MyDecimal) -} - -// SetMysqlDecimal sets Decimal value -func (d *Datum) SetMysqlDecimal(b *MyDecimal) { - d.k = KindMysqlDecimal - d.x = b -} - -// GetMysqlDuration gets Duration value -func (d *Datum) GetMysqlDuration() Duration { - return Duration{Duration: time.Duration(d.i), Fsp: int(d.decimal)} -} - -// SetMysqlDuration sets Duration value -func (d *Datum) SetMysqlDuration(b Duration) { - d.k = KindMysqlDuration - d.i = int64(b.Duration) - d.decimal = uint16(b.Fsp) -} - -// GetMysqlEnum gets Enum value -func (d *Datum) GetMysqlEnum() Enum { - return Enum{Value: uint64(d.i), Name: hack.String(d.b)} -} - -// SetMysqlEnum sets Enum value -func (d *Datum) SetMysqlEnum(b Enum) { - d.k = KindMysqlEnum - d.i = int64(b.Value) - sink(b.Name) - d.b = hack.Slice(b.Name) -} - -// GetMysqlSet gets Set value -func (d *Datum) GetMysqlSet() Set { - return Set{Value: uint64(d.i), Name: hack.String(d.b)} -} - -// SetMysqlSet sets Set value -func (d *Datum) SetMysqlSet(b Set) { - d.k = KindMysqlSet - d.i = int64(b.Value) - sink(b.Name) - d.b = hack.Slice(b.Name) -} - -// GetMysqlJSON gets json.BinaryJSON value -func (d *Datum) GetMysqlJSON() json.BinaryJSON { - return json.BinaryJSON{TypeCode: byte(d.i), Value: d.b} -} - -// SetMysqlJSON sets json.BinaryJSON value -func (d *Datum) SetMysqlJSON(b json.BinaryJSON) { - d.k = KindMysqlJSON - d.i = int64(b.TypeCode) - d.b = b.Value -} - -// GetMysqlTime gets types.Time value -func (d *Datum) GetMysqlTime() Time { - return d.x.(Time) -} - -// SetMysqlTime sets types.Time value -func (d *Datum) SetMysqlTime(b Time) { - d.k = KindMysqlTime - d.x = b -} - -// SetRaw sets raw value. -func (d *Datum) SetRaw(b []byte) { - d.k = KindRaw - d.b = b -} - -// GetRaw gets raw value. -func (d *Datum) GetRaw() []byte { - return d.b -} - -// GetValue gets the value of the datum of any kind. -func (d *Datum) GetValue() interface{} { - switch d.k { - case KindInt64: - return d.GetInt64() - case KindUint64: - return d.GetUint64() - case KindFloat32: - return d.GetFloat32() - case KindFloat64: - return d.GetFloat64() - case KindString: - return d.GetString() - case KindBytes: - return d.GetBytes() - case KindMysqlDecimal: - return d.GetMysqlDecimal() - case KindMysqlDuration: - return d.GetMysqlDuration() - case KindMysqlEnum: - return d.GetMysqlEnum() - case KindBinaryLiteral, KindMysqlBit: - return d.GetBinaryLiteral() - case KindMysqlSet: - return d.GetMysqlSet() - case KindMysqlJSON: - return d.GetMysqlJSON() - case KindMysqlTime: - return d.GetMysqlTime() - default: - return d.GetInterface() - } -} - -// SetValue sets any kind of value. -func (d *Datum) SetValue(val interface{}) { - switch x := val.(type) { - case nil: - d.SetNull() - case bool: - if x { - d.SetInt64(1) - } else { - d.SetInt64(0) - } - case int: - d.SetInt64(int64(x)) - case int64: - d.SetInt64(x) - case uint64: - d.SetUint64(x) - case float32: - d.SetFloat32(x) - case float64: - d.SetFloat64(x) - case string: - d.SetString(x) - case []byte: - d.SetBytes(x) - case *MyDecimal: - d.SetMysqlDecimal(x) - case Duration: - d.SetMysqlDuration(x) - case Enum: - d.SetMysqlEnum(x) - case BinaryLiteral: - d.SetBinaryLiteral(x) - case BitLiteral: // Store as BinaryLiteral for Bit and Hex literals - d.SetBinaryLiteral(BinaryLiteral(x)) - case HexLiteral: - d.SetBinaryLiteral(BinaryLiteral(x)) - case Set: - d.SetMysqlSet(x) - case json.BinaryJSON: - d.SetMysqlJSON(x) - case Time: - d.SetMysqlTime(x) - default: - d.SetInterface(x) - } -} - -// CompareDatum compares datum to another datum. -// TODO: return error properly. -func (d *Datum) CompareDatum(sc *stmtctx.StatementContext, ad *Datum) (int, error) { - if d.k == KindMysqlJSON && ad.k != KindMysqlJSON { - cmp, err := ad.CompareDatum(sc, d) - return cmp * -1, errors.Trace(err) - } - switch ad.k { - case KindNull: - if d.k == KindNull { - return 0, nil - } - return 1, nil - case KindMinNotNull: - if d.k == KindNull { - return -1, nil - } else if d.k == KindMinNotNull { - return 0, nil - } - return 1, nil - case KindMaxValue: - if d.k == KindMaxValue { - return 0, nil - } - return -1, nil - case KindInt64: - return d.compareInt64(sc, ad.GetInt64()) - case KindUint64: - return d.compareUint64(sc, ad.GetUint64()) - case KindFloat32, KindFloat64: - return d.compareFloat64(sc, ad.GetFloat64()) - case KindString: - return d.compareString(sc, ad.GetString()) - case KindBytes: - return d.compareBytes(sc, ad.GetBytes()) - case KindMysqlDecimal: - return d.compareMysqlDecimal(sc, ad.GetMysqlDecimal()) - case KindMysqlDuration: - return d.compareMysqlDuration(sc, ad.GetMysqlDuration()) - case KindMysqlEnum: - return d.compareMysqlEnum(sc, ad.GetMysqlEnum()) - case KindBinaryLiteral, KindMysqlBit: - return d.compareBinaryLiteral(sc, ad.GetBinaryLiteral()) - case KindMysqlSet: - return d.compareMysqlSet(sc, ad.GetMysqlSet()) - case KindMysqlJSON: - return d.compareMysqlJSON(sc, ad.GetMysqlJSON()) - case KindMysqlTime: - return d.compareMysqlTime(sc, ad.GetMysqlTime()) - default: - return 0, nil - } -} - -func (d *Datum) compareInt64(sc *stmtctx.StatementContext, i int64) (int, error) { - switch d.k { - case KindMaxValue: - return 1, nil - case KindInt64: - return CompareInt64(d.i, i), nil - case KindUint64: - if i < 0 || d.GetUint64() > math.MaxInt64 { - return 1, nil - } - return CompareInt64(d.i, i), nil - default: - return d.compareFloat64(sc, float64(i)) - } -} - -func (d *Datum) compareUint64(sc *stmtctx.StatementContext, u uint64) (int, error) { - switch d.k { - case KindMaxValue: - return 1, nil - case KindInt64: - if d.i < 0 || u > math.MaxInt64 { - return -1, nil - } - return CompareInt64(d.i, int64(u)), nil - case KindUint64: - return CompareUint64(d.GetUint64(), u), nil - default: - return d.compareFloat64(sc, float64(u)) - } -} - -func (d *Datum) compareFloat64(sc *stmtctx.StatementContext, f float64) (int, error) { - switch d.k { - case KindNull, KindMinNotNull: - return -1, nil - case KindMaxValue: - return 1, nil - case KindInt64: - return CompareFloat64(float64(d.i), f), nil - case KindUint64: - return CompareFloat64(float64(d.GetUint64()), f), nil - case KindFloat32, KindFloat64: - return CompareFloat64(d.GetFloat64(), f), nil - case KindString, KindBytes: - fVal, err := StrToFloat(sc, d.GetString()) - return CompareFloat64(fVal, f), errors.Trace(err) - case KindMysqlDecimal: - fVal, err := d.GetMysqlDecimal().ToFloat64() - return CompareFloat64(fVal, f), errors.Trace(err) - case KindMysqlDuration: - fVal := d.GetMysqlDuration().Seconds() - return CompareFloat64(fVal, f), nil - case KindMysqlEnum: - fVal := d.GetMysqlEnum().ToNumber() - return CompareFloat64(fVal, f), nil - case KindBinaryLiteral, KindMysqlBit: - val, err := d.GetBinaryLiteral().ToInt(sc) - fVal := float64(val) - return CompareFloat64(fVal, f), errors.Trace(err) - case KindMysqlSet: - fVal := d.GetMysqlSet().ToNumber() - return CompareFloat64(fVal, f), nil - case KindMysqlTime: - fVal, err := d.GetMysqlTime().ToNumber().ToFloat64() - return CompareFloat64(fVal, f), errors.Trace(err) - default: - return -1, nil - } -} - -func (d *Datum) compareString(sc *stmtctx.StatementContext, s string) (int, error) { - switch d.k { - case KindNull, KindMinNotNull: - return -1, nil - case KindMaxValue: - return 1, nil - case KindString, KindBytes: - return CompareString(d.GetString(), s), nil - case KindMysqlDecimal: - dec := new(MyDecimal) - err := sc.HandleTruncate(dec.FromString(hack.Slice(s))) - return d.GetMysqlDecimal().Compare(dec), errors.Trace(err) - case KindMysqlTime: - dt, err := ParseDatetime(sc, s) - return d.GetMysqlTime().Compare(dt), errors.Trace(err) - case KindMysqlDuration: - dur, err := ParseDuration(s, MaxFsp) - return d.GetMysqlDuration().Compare(dur), errors.Trace(err) - case KindMysqlSet: - return CompareString(d.GetMysqlSet().String(), s), nil - case KindMysqlEnum: - return CompareString(d.GetMysqlEnum().String(), s), nil - case KindBinaryLiteral, KindMysqlBit: - return CompareString(d.GetBinaryLiteral().ToString(), s), nil - default: - fVal, err := StrToFloat(sc, s) - if err != nil { - return 0, errors.Trace(err) - } - return d.compareFloat64(sc, fVal) - } -} - -func (d *Datum) compareBytes(sc *stmtctx.StatementContext, b []byte) (int, error) { - return d.compareString(sc, hack.String(b)) -} - -func (d *Datum) compareMysqlDecimal(sc *stmtctx.StatementContext, dec *MyDecimal) (int, error) { - switch d.k { - case KindMysqlDecimal: - return d.GetMysqlDecimal().Compare(dec), nil - case KindString, KindBytes: - dDec := new(MyDecimal) - err := sc.HandleTruncate(dDec.FromString(d.GetBytes())) - return dDec.Compare(dec), errors.Trace(err) - default: - fVal, err := dec.ToFloat64() - if err != nil { - return 0, errors.Trace(err) - } - return d.compareFloat64(sc, fVal) - } -} - -func (d *Datum) compareMysqlDuration(sc *stmtctx.StatementContext, dur Duration) (int, error) { - switch d.k { - case KindMysqlDuration: - return d.GetMysqlDuration().Compare(dur), nil - case KindString, KindBytes: - dDur, err := ParseDuration(d.GetString(), MaxFsp) - return dDur.Compare(dur), errors.Trace(err) - default: - return d.compareFloat64(sc, dur.Seconds()) - } -} - -func (d *Datum) compareMysqlEnum(sc *stmtctx.StatementContext, enum Enum) (int, error) { - switch d.k { - case KindString, KindBytes: - return CompareString(d.GetString(), enum.String()), nil - default: - return d.compareFloat64(sc, enum.ToNumber()) - } -} - -func (d *Datum) compareBinaryLiteral(sc *stmtctx.StatementContext, b BinaryLiteral) (int, error) { - switch d.k { - case KindString, KindBytes: - return CompareString(d.GetString(), b.ToString()), nil - case KindBinaryLiteral, KindMysqlBit: - return CompareString(d.GetBinaryLiteral().ToString(), b.ToString()), nil - default: - val, err := b.ToInt(sc) - if err != nil { - return 0, errors.Trace(err) - } - result, err := d.compareFloat64(sc, float64(val)) - return result, errors.Trace(err) - } -} - -func (d *Datum) compareMysqlSet(sc *stmtctx.StatementContext, set Set) (int, error) { - switch d.k { - case KindString, KindBytes: - return CompareString(d.GetString(), set.String()), nil - default: - return d.compareFloat64(sc, set.ToNumber()) - } -} - -func (d *Datum) compareMysqlJSON(sc *stmtctx.StatementContext, target json.BinaryJSON) (int, error) { - origin, err := d.ToMysqlJSON() - if err != nil { - return 0, errors.Trace(err) - } - return json.CompareBinary(origin, target), nil -} - -func (d *Datum) compareMysqlTime(sc *stmtctx.StatementContext, time Time) (int, error) { - switch d.k { - case KindString, KindBytes: - dt, err := ParseDatetime(sc, d.GetString()) - return dt.Compare(time), errors.Trace(err) - case KindMysqlTime: - return d.GetMysqlTime().Compare(time), nil - default: - fVal, err := time.ToNumber().ToFloat64() - if err != nil { - return 0, errors.Trace(err) - } - return d.compareFloat64(sc, fVal) - } -} - -// ConvertTo converts a datum to the target field type. -func (d *Datum) ConvertTo(sc *stmtctx.StatementContext, target *FieldType) (Datum, error) { - if d.k == KindNull { - return Datum{}, nil - } - switch target.Tp { // TODO: implement mysql types convert when "CAST() AS" syntax are supported. - case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong: - unsigned := mysql.HasUnsignedFlag(target.Flag) - if unsigned { - return d.convertToUint(sc, target) - } - return d.convertToInt(sc, target) - case mysql.TypeFloat, mysql.TypeDouble: - return d.convertToFloat(sc, target) - case mysql.TypeBlob, mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob, - mysql.TypeString, mysql.TypeVarchar, mysql.TypeVarString: - return d.convertToString(sc, target) - case mysql.TypeTimestamp: - return d.convertToMysqlTimestamp(sc, target) - case mysql.TypeDatetime, mysql.TypeDate: - return d.convertToMysqlTime(sc, target) - case mysql.TypeDuration: - return d.convertToMysqlDuration(sc, target) - case mysql.TypeNewDecimal: - return d.convertToMysqlDecimal(sc, target) - case mysql.TypeYear: - return d.convertToMysqlYear(sc, target) - case mysql.TypeEnum: - return d.convertToMysqlEnum(sc, target) - case mysql.TypeBit: - return d.convertToMysqlBit(sc, target) - case mysql.TypeSet: - return d.convertToMysqlSet(sc, target) - case mysql.TypeJSON: - return d.convertToMysqlJSON(sc, target) - case mysql.TypeNull: - return Datum{}, nil - default: - panic("should never happen") - } -} - -func (d *Datum) convertToFloat(sc *stmtctx.StatementContext, target *FieldType) (Datum, error) { - var ( - f float64 - ret Datum - err error - ) - switch d.k { - case KindNull: - return ret, nil - case KindInt64: - f = float64(d.GetInt64()) - case KindUint64: - f = float64(d.GetUint64()) - case KindFloat32, KindFloat64: - f = d.GetFloat64() - case KindString, KindBytes: - f, err = StrToFloat(sc, d.GetString()) - case KindMysqlTime: - f, err = d.GetMysqlTime().ToNumber().ToFloat64() - case KindMysqlDuration: - f, err = d.GetMysqlDuration().ToNumber().ToFloat64() - case KindMysqlDecimal: - f, err = d.GetMysqlDecimal().ToFloat64() - case KindMysqlSet: - f = d.GetMysqlSet().ToNumber() - case KindMysqlEnum: - f = d.GetMysqlEnum().ToNumber() - case KindBinaryLiteral, KindMysqlBit: - val, err1 := d.GetBinaryLiteral().ToInt(sc) - f, err = float64(val), err1 - case KindMysqlJSON: - f, err = ConvertJSONToFloat(sc, d.GetMysqlJSON()) - default: - return invalidConv(d, target.Tp) - } - var err1 error - f, err1 = ProduceFloatWithSpecifiedTp(f, target, sc) - if err == nil && err1 != nil { - err = err1 - } - if target.Tp == mysql.TypeFloat { - ret.SetFloat32(float32(f)) - } else { - ret.SetFloat64(f) - } - return ret, errors.Trace(err) -} - -// ProduceFloatWithSpecifiedTp produces a new float64 according to `flen` and `decimal`. -func ProduceFloatWithSpecifiedTp(f float64, target *FieldType, sc *stmtctx.StatementContext) (_ float64, err error) { - // For float and following double type, we will only truncate it for float(M, D) format. - // If no D is set, we will handle it like origin float whether M is set or not. - if target.Flen != UnspecifiedLength && target.Decimal != UnspecifiedLength { - f, err = TruncateFloat(f, target.Flen, target.Decimal) - if err = sc.HandleOverflow(err, err); err != nil { - return f, errors.Trace(err) - } - } - if mysql.HasUnsignedFlag(target.Flag) && f < 0 { - return 0, overflow(f, target.Tp) - } - return f, nil -} - -func (d *Datum) convertToString(sc *stmtctx.StatementContext, target *FieldType) (Datum, error) { - var ret Datum - var s string - switch d.k { - case KindInt64: - s = strconv.FormatInt(d.GetInt64(), 10) - case KindUint64: - s = strconv.FormatUint(d.GetUint64(), 10) - case KindFloat32: - s = strconv.FormatFloat(d.GetFloat64(), 'f', -1, 32) - case KindFloat64: - s = strconv.FormatFloat(d.GetFloat64(), 'f', -1, 64) - case KindString, KindBytes: - s = d.GetString() - case KindMysqlTime: - s = d.GetMysqlTime().String() - case KindMysqlDuration: - s = d.GetMysqlDuration().String() - case KindMysqlDecimal: - s = d.GetMysqlDecimal().String() - case KindMysqlEnum: - s = d.GetMysqlEnum().String() - case KindMysqlSet: - s = d.GetMysqlSet().String() - case KindBinaryLiteral, KindMysqlBit: - s = d.GetBinaryLiteral().ToString() - case KindMysqlJSON: - s = d.GetMysqlJSON().String() - default: - return invalidConv(d, target.Tp) - } - s, err := ProduceStrWithSpecifiedTp(s, target, sc) - ret.SetString(s) - if target.Charset == charset.CharsetBin { - ret.k = KindBytes - } - return ret, errors.Trace(err) -} - -// ProduceStrWithSpecifiedTp produces a new string according to `flen` and `chs`. -func ProduceStrWithSpecifiedTp(s string, tp *FieldType, sc *stmtctx.StatementContext) (_ string, err error) { - flen, chs := tp.Flen, tp.Charset - if flen >= 0 { - // Flen is the rune length, not binary length, for UTF8 charset, we need to calculate the - // rune count and truncate to Flen runes if it is too long. - if chs == charset.CharsetUTF8 || chs == charset.CharsetUTF8MB4 { - characterLen := utf8.RuneCountInString(s) - if characterLen > flen { - // 1. If len(s) is 0 and flen is 0, truncateLen will be 0, don't truncate s. - // CREATE TABLE t (a char(0)); - // INSERT INTO t VALUES (``); - // 2. If len(s) is 10 and flen is 0, truncateLen will be 0 too, but we still need to truncate s. - // SELECT 1, CAST(1234 AS CHAR(0)); - // So truncateLen is not a suitable variable to determine to do truncate or not. - var runeCount int - var truncateLen int - for i := range s { - if runeCount == flen { - truncateLen = i - break - } - runeCount++ - } - err = ErrDataTooLong.Gen("Data Too Long, field len %d, data len %d", flen, characterLen) - s = truncateStr(s, truncateLen) - } - } else if len(s) > flen { - err = ErrDataTooLong.Gen("Data Too Long, field len %d, data len %d", flen, len(s)) - s = truncateStr(s, flen) - } else if tp.Tp == mysql.TypeString && IsBinaryStr(tp) && len(s) < flen { - padding := make([]byte, flen-len(s)) - s = string(append([]byte(s), padding...)) - } - } - return s, errors.Trace(sc.HandleTruncate(err)) -} - -func (d *Datum) convertToInt(sc *stmtctx.StatementContext, target *FieldType) (Datum, error) { - i64, err := d.toSignedInteger(sc, target.Tp) - return NewIntDatum(i64), errors.Trace(err) -} - -func (d *Datum) convertToUint(sc *stmtctx.StatementContext, target *FieldType) (Datum, error) { - tp := target.Tp - upperBound := UnsignedUpperBound[tp] - var ( - val uint64 - err error - ret Datum - ) - switch d.k { - case KindInt64: - val, err = ConvertIntToUint(d.GetInt64(), upperBound, tp) - case KindUint64: - val, err = ConvertUintToUint(d.GetUint64(), upperBound, tp) - case KindFloat32, KindFloat64: - val, err = ConvertFloatToUint(d.GetFloat64(), upperBound, tp) - case KindString, KindBytes: - val, err = StrToUint(sc, d.GetString()) - if err != nil { - return ret, errors.Trace(err) - } - val, err = ConvertUintToUint(val, upperBound, tp) - if err != nil { - return ret, errors.Trace(err) - } - ret.SetUint64(val) - case KindMysqlTime: - dec := d.GetMysqlTime().ToNumber() - err = dec.Round(dec, 0, ModeHalfEven) - ival, err1 := dec.ToInt() - if err == nil { - err = err1 - } - val, err1 = ConvertIntToUint(ival, upperBound, tp) - if err == nil { - err = err1 - } - case KindMysqlDuration: - dec := d.GetMysqlDuration().ToNumber() - err = dec.Round(dec, 0, ModeHalfEven) - ival, err1 := dec.ToInt() - if err1 == nil { - val, err = ConvertIntToUint(ival, upperBound, tp) - } - case KindMysqlDecimal: - fval, err1 := d.GetMysqlDecimal().ToFloat64() - val, err = ConvertFloatToUint(fval, upperBound, tp) - if err == nil { - err = err1 - } - case KindMysqlEnum: - val, err = ConvertFloatToUint(d.GetMysqlEnum().ToNumber(), upperBound, tp) - case KindMysqlSet: - val, err = ConvertFloatToUint(d.GetMysqlSet().ToNumber(), upperBound, tp) - case KindBinaryLiteral, KindMysqlBit: - val, err = d.GetBinaryLiteral().ToInt(sc) - case KindMysqlJSON: - var i64 int64 - i64, err = ConvertJSONToInt(sc, d.GetMysqlJSON(), true) - val = uint64(i64) - default: - return invalidConv(d, target.Tp) - } - ret.SetUint64(val) - if err != nil { - return ret, errors.Trace(err) - } - return ret, nil -} - -func (d *Datum) convertToMysqlTimestamp(sc *stmtctx.StatementContext, target *FieldType) (Datum, error) { - var ( - ret Datum - t Time - err error - ) - fsp := DefaultFsp - if target.Decimal != UnspecifiedLength { - fsp = target.Decimal - } - switch d.k { - case KindMysqlTime: - t = d.GetMysqlTime() - t, err = t.RoundFrac(sc, fsp) - case KindMysqlDuration: - t, err = d.GetMysqlDuration().ConvertToTime(sc, mysql.TypeTimestamp) - if err != nil { - ret.SetValue(t) - return ret, errors.Trace(err) - } - t, err = t.RoundFrac(sc, fsp) - case KindString, KindBytes: - t, err = ParseTime(sc, d.GetString(), mysql.TypeTimestamp, fsp) - case KindInt64: - t, err = ParseTimeFromNum(sc, d.GetInt64(), mysql.TypeTimestamp, fsp) - default: - return invalidConv(d, mysql.TypeTimestamp) - } - t.Type = mysql.TypeTimestamp - ret.SetMysqlTime(t) - if err != nil { - return ret, errors.Trace(err) - } - return ret, nil -} - -func (d *Datum) convertToMysqlTime(sc *stmtctx.StatementContext, target *FieldType) (Datum, error) { - tp := target.Tp - fsp := DefaultFsp - if target.Decimal != UnspecifiedLength { - fsp = target.Decimal - } - var ( - ret Datum - t Time - err error - ) - switch d.k { - case KindMysqlTime: - t, err = d.GetMysqlTime().Convert(sc, tp) - if err != nil { - ret.SetValue(t) - return ret, errors.Trace(err) - } - t, err = t.RoundFrac(sc, fsp) - case KindMysqlDuration: - t, err = d.GetMysqlDuration().ConvertToTime(sc, tp) - if err != nil { - ret.SetValue(t) - return ret, errors.Trace(err) - } - t, err = t.RoundFrac(sc, fsp) - case KindString, KindBytes: - t, err = ParseTime(sc, d.GetString(), tp, fsp) - case KindInt64: - t, err = ParseTimeFromNum(sc, d.GetInt64(), tp, fsp) - default: - return invalidConv(d, tp) - } - if tp == mysql.TypeDate { - // Truncate hh:mm:ss part if the type is Date. - t.Time = FromDate(t.Time.Year(), t.Time.Month(), t.Time.Day(), 0, 0, 0, 0) - } - ret.SetValue(t) - if err != nil { - return ret, errors.Trace(err) - } - return ret, nil -} - -func (d *Datum) convertToMysqlDuration(sc *stmtctx.StatementContext, target *FieldType) (Datum, error) { - tp := target.Tp - fsp := DefaultFsp - if target.Decimal != UnspecifiedLength { - fsp = target.Decimal - } - var ret Datum - switch d.k { - case KindMysqlTime: - dur, err := d.GetMysqlTime().ConvertToDuration() - if err != nil { - ret.SetValue(dur) - return ret, errors.Trace(err) - } - dur, err = dur.RoundFrac(fsp) - ret.SetValue(dur) - if err != nil { - return ret, errors.Trace(err) - } - case KindMysqlDuration: - dur, err := d.GetMysqlDuration().RoundFrac(fsp) - ret.SetValue(dur) - if err != nil { - return ret, errors.Trace(err) - } - case KindInt64, KindFloat32, KindFloat64, KindMysqlDecimal: - // TODO: We need a ParseDurationFromNum to avoid the cost of converting a num to string. - timeStr, err := d.ToString() - if err != nil { - return ret, errors.Trace(err) - } else if timeStr[0] == '-' { - return ret, ErrInvalidTimeFormat.Gen("Incorrect time value '%s'", timeStr) - } - t, err := ParseDuration(timeStr, fsp) - ret.SetValue(t) - if err != nil { - return ret, errors.Trace(err) - } - case KindString, KindBytes: - t, err := ParseDuration(d.GetString(), fsp) - ret.SetValue(t) - if err != nil { - return ret, errors.Trace(err) - } - default: - return invalidConv(d, tp) - } - return ret, nil -} - -func (d *Datum) convertToMysqlDecimal(sc *stmtctx.StatementContext, target *FieldType) (Datum, error) { - var ret Datum - ret.SetLength(target.Flen) - ret.SetFrac(target.Decimal) - var dec = &MyDecimal{} - var err error - switch d.k { - case KindInt64: - dec.FromInt(d.GetInt64()) - case KindUint64: - dec.FromUint(d.GetUint64()) - case KindFloat32, KindFloat64: - err = dec.FromFloat64(d.GetFloat64()) - case KindString, KindBytes: - err = dec.FromString(d.GetBytes()) - case KindMysqlDecimal: - *dec = *d.GetMysqlDecimal() - case KindMysqlTime: - dec = d.GetMysqlTime().ToNumber() - case KindMysqlDuration: - dec = d.GetMysqlDuration().ToNumber() - case KindMysqlEnum: - err = dec.FromFloat64(d.GetMysqlEnum().ToNumber()) - case KindMysqlSet: - err = dec.FromFloat64(d.GetMysqlSet().ToNumber()) - case KindBinaryLiteral, KindMysqlBit: - val, err1 := d.GetBinaryLiteral().ToInt(sc) - err = err1 - dec.FromUint(val) - case KindMysqlJSON: - f, err1 := ConvertJSONToFloat(sc, d.GetMysqlJSON()) - if err1 != nil { - return ret, errors.Trace(err1) - } - err = dec.FromFloat64(f) - default: - return invalidConv(d, target.Tp) - } - var err1 error - dec, err1 = ProduceDecWithSpecifiedTp(dec, target, sc) - if err == nil && err1 != nil { - err = err1 - } - if dec.negative && mysql.HasUnsignedFlag(target.Flag) { - *dec = zeroMyDecimal - if err == nil { - err = ErrOverflow.GenByArgs("DECIMAL", fmt.Sprintf("(%d, %d)", target.Flen, target.Decimal)) - } - } - ret.SetValue(dec) - return ret, errors.Trace(err) -} - -// ProduceDecWithSpecifiedTp produces a new decimal according to `flen` and `decimal`. -func ProduceDecWithSpecifiedTp(dec *MyDecimal, tp *FieldType, sc *stmtctx.StatementContext) (_ *MyDecimal, err error) { - flen, decimal := tp.Flen, tp.Decimal - if flen != UnspecifiedLength && decimal != UnspecifiedLength { - if flen < decimal { - return nil, ErrMBiggerThanD.GenByArgs("") - } - prec, frac := dec.PrecisionAndFrac() - if !dec.IsZero() && prec-frac > flen-decimal { - dec = NewMaxOrMinDec(dec.IsNegative(), flen, decimal) - // select (cast 111 as decimal(1)) causes a warning in MySQL. - err = ErrOverflow.GenByArgs("DECIMAL", fmt.Sprintf("(%d, %d)", flen, decimal)) - } else if frac != decimal { - old := *dec - err = dec.Round(dec, decimal, ModeHalfEven) - if err != nil { - return nil, errors.Trace(err) - } - if !dec.IsZero() && frac > decimal && dec.Compare(&old) != 0 { - if sc.InInsertStmt || sc.InUpdateOrDeleteStmt { - // fix https://github.com/pingcap/tidb/issues/3895 - // fix https://github.com/pingcap/tidb/issues/5532 - sc.AppendWarning(ErrTruncated) - err = nil - } else { - err = sc.HandleTruncate(ErrTruncated) - } - } - } - } - - if ErrOverflow.Equal(err) { - // TODO: warnErr need to be ErrWarnDataOutOfRange - err = sc.HandleOverflow(err, err) - } - unsigned := mysql.HasUnsignedFlag(tp.Flag) - if unsigned && dec.IsNegative() { - dec = dec.FromUint(0) - } - return dec, errors.Trace(err) -} - -func (d *Datum) convertToMysqlYear(sc *stmtctx.StatementContext, target *FieldType) (Datum, error) { - var ( - ret Datum - y int64 - err error - ) - switch d.k { - case KindString, KindBytes: - y, err = StrToInt(sc, d.GetString()) - if err != nil { - return ret, errors.Trace(err) - } - case KindMysqlTime: - y = int64(d.GetMysqlTime().Time.Year()) - case KindMysqlDuration: - y = int64(time.Now().Year()) - default: - ret, err = d.convertToInt(sc, NewFieldType(mysql.TypeLonglong)) - if err != nil { - return invalidConv(d, target.Tp) - } - y = ret.GetInt64() - } - y, err = AdjustYear(y) - if err != nil { - return invalidConv(d, target.Tp) - } - ret.SetInt64(y) - return ret, nil -} - -func (d *Datum) convertToMysqlBit(sc *stmtctx.StatementContext, target *FieldType) (Datum, error) { - var ret Datum - var uintValue uint64 - var err error - switch d.k { - case KindString, KindBytes: - uintValue, err = BinaryLiteral(d.b).ToInt(sc) - default: - uintDatum, err1 := d.convertToUint(sc, target) - uintValue, err = uintDatum.GetUint64(), err1 - } - if target.Flen < 64 && uintValue >= 1<<(uint64(target.Flen)) { - return Datum{}, errors.Trace(ErrOverflow.GenByArgs("BIT", fmt.Sprintf("(%d)", target.Flen))) - } - byteSize := (target.Flen + 7) >> 3 - ret.SetMysqlBit(NewBinaryLiteralFromUint(uintValue, byteSize)) - return ret, errors.Trace(err) -} - -func (d *Datum) convertToMysqlEnum(sc *stmtctx.StatementContext, target *FieldType) (Datum, error) { - var ( - ret Datum - e Enum - err error - ) - switch d.k { - case KindString, KindBytes: - e, err = ParseEnumName(target.Elems, d.GetString()) - default: - var uintDatum Datum - uintDatum, err = d.convertToUint(sc, target) - if err != nil { - return ret, errors.Trace(err) - } - e, err = ParseEnumValue(target.Elems, uintDatum.GetUint64()) - } - if err != nil { - err = errors.Wrap(err, ErrTruncated) - } - ret.SetValue(e) - return ret, err -} - -func (d *Datum) convertToMysqlSet(sc *stmtctx.StatementContext, target *FieldType) (Datum, error) { - var ( - ret Datum - s Set - err error - ) - switch d.k { - case KindString, KindBytes: - s, err = ParseSetName(target.Elems, d.GetString()) - default: - var uintDatum Datum - uintDatum, err = d.convertToUint(sc, target) - if err != nil { - return ret, errors.Trace(err) - } - s, err = ParseSetValue(target.Elems, uintDatum.GetUint64()) - } - - if err != nil { - return invalidConv(d, target.Tp) - } - ret.SetValue(s) - return ret, nil -} - -func (d *Datum) convertToMysqlJSON(sc *stmtctx.StatementContext, target *FieldType) (ret Datum, err error) { - switch d.k { - case KindString, KindBytes: - var j json.BinaryJSON - if j, err = json.ParseBinaryFromString(d.GetString()); err == nil { - ret.SetMysqlJSON(j) - } - case KindInt64: - i64 := d.GetInt64() - ret.SetMysqlJSON(json.CreateBinary(i64)) - case KindUint64: - u64 := d.GetUint64() - ret.SetMysqlJSON(json.CreateBinary(u64)) - case KindFloat32, KindFloat64: - f64 := d.GetFloat64() - ret.SetMysqlJSON(json.CreateBinary(f64)) - case KindMysqlDecimal: - var f64 float64 - if f64, err = d.GetMysqlDecimal().ToFloat64(); err == nil { - ret.SetMysqlJSON(json.CreateBinary(f64)) - } - case KindMysqlJSON: - ret = *d - default: - var s string - if s, err = d.ToString(); err == nil { - // TODO: fix precision of MysqlTime. For example, - // On MySQL 5.7 CAST(NOW() AS JSON) -> "2011-11-11 11:11:11.111111", - // But now we can only return "2011-11-11 11:11:11". - ret.SetMysqlJSON(json.CreateBinary(s)) - } - } - return ret, errors.Trace(err) -} - -// ToBool converts to a bool. -// We will use 1 for true, and 0 for false. -func (d *Datum) ToBool(sc *stmtctx.StatementContext) (int64, error) { - var err error - isZero := false - switch d.Kind() { - case KindInt64: - isZero = d.GetInt64() == 0 - case KindUint64: - isZero = d.GetUint64() == 0 - case KindFloat32: - isZero = RoundFloat(d.GetFloat64()) == 0 - case KindFloat64: - isZero = RoundFloat(d.GetFloat64()) == 0 - case KindString, KindBytes: - iVal, err1 := StrToInt(sc, d.GetString()) - isZero, err = iVal == 0, err1 - case KindMysqlTime: - isZero = d.GetMysqlTime().IsZero() - case KindMysqlDuration: - isZero = d.GetMysqlDuration().Duration == 0 - case KindMysqlDecimal: - v, err1 := d.GetMysqlDecimal().ToFloat64() - isZero, err = RoundFloat(v) == 0, err1 - case KindMysqlEnum: - isZero = d.GetMysqlEnum().ToNumber() == 0 - case KindMysqlSet: - isZero = d.GetMysqlSet().ToNumber() == 0 - case KindBinaryLiteral, KindMysqlBit: - val, err1 := d.GetBinaryLiteral().ToInt(sc) - isZero, err = val == 0, err1 - default: - return 0, errors.Errorf("cannot convert %v(type %T) to bool", d.GetValue(), d.GetValue()) - } - var ret int64 - if isZero { - ret = 0 - } else { - ret = 1 - } - if err != nil { - return ret, errors.Trace(err) - } - return ret, nil -} - -// ConvertDatumToDecimal converts datum to decimal. -func ConvertDatumToDecimal(sc *stmtctx.StatementContext, d Datum) (*MyDecimal, error) { - dec := new(MyDecimal) - var err error - switch d.Kind() { - case KindInt64: - dec.FromInt(d.GetInt64()) - case KindUint64: - dec.FromUint(d.GetUint64()) - case KindFloat32: - err = dec.FromFloat64(float64(d.GetFloat32())) - case KindFloat64: - err = dec.FromFloat64(d.GetFloat64()) - case KindString: - err = sc.HandleTruncate(dec.FromString(d.GetBytes())) - case KindMysqlDecimal: - *dec = *d.GetMysqlDecimal() - case KindMysqlEnum: - dec.FromUint(d.GetMysqlEnum().Value) - case KindMysqlSet: - dec.FromUint(d.GetMysqlSet().Value) - case KindBinaryLiteral, KindMysqlBit: - val, err1 := d.GetBinaryLiteral().ToInt(sc) - dec.FromUint(val) - err = err1 - case KindMysqlJSON: - f, err1 := ConvertJSONToFloat(sc, d.GetMysqlJSON()) - if err1 != nil { - return nil, errors.Trace(err1) - } - err = dec.FromFloat64(f) - default: - err = fmt.Errorf("can't convert %v to decimal", d.GetValue()) - } - return dec, errors.Trace(err) -} - -// ToDecimal converts to a decimal. -func (d *Datum) ToDecimal(sc *stmtctx.StatementContext) (*MyDecimal, error) { - switch d.Kind() { - case KindMysqlTime: - return d.GetMysqlTime().ToNumber(), nil - case KindMysqlDuration: - return d.GetMysqlDuration().ToNumber(), nil - default: - return ConvertDatumToDecimal(sc, *d) - } -} - -// ToInt64 converts to a int64. -func (d *Datum) ToInt64(sc *stmtctx.StatementContext) (int64, error) { - return d.toSignedInteger(sc, mysql.TypeLonglong) -} - -func (d *Datum) toSignedInteger(sc *stmtctx.StatementContext, tp byte) (int64, error) { - lowerBound := SignedLowerBound[tp] - upperBound := SignedUpperBound[tp] - switch d.Kind() { - case KindInt64: - return ConvertIntToInt(d.GetInt64(), lowerBound, upperBound, tp) - case KindUint64: - return ConvertUintToInt(d.GetUint64(), upperBound, tp) - case KindFloat32: - return ConvertFloatToInt(float64(d.GetFloat32()), lowerBound, upperBound, tp) - case KindFloat64: - return ConvertFloatToInt(d.GetFloat64(), lowerBound, upperBound, tp) - case KindString, KindBytes: - iVal, err := StrToInt(sc, d.GetString()) - iVal, err2 := ConvertIntToInt(iVal, lowerBound, upperBound, tp) - if err == nil { - err = err2 - } - return iVal, errors.Trace(err) - case KindMysqlTime: - // 2011-11-10 11:11:11.999999 -> 20111110111112 - // 2011-11-10 11:59:59.999999 -> 20111110120000 - t, err := d.GetMysqlTime().RoundFrac(sc, DefaultFsp) - if err != nil { - return 0, errors.Trace(err) - } - ival, err := t.ToNumber().ToInt() - ival, err2 := ConvertIntToInt(ival, lowerBound, upperBound, tp) - if err == nil { - err = err2 - } - return ival, errors.Trace(err) - case KindMysqlDuration: - // 11:11:11.999999 -> 111112 - // 11:59:59.999999 -> 120000 - dur, err := d.GetMysqlDuration().RoundFrac(DefaultFsp) - if err != nil { - return 0, errors.Trace(err) - } - ival, err := dur.ToNumber().ToInt() - ival, err2 := ConvertIntToInt(ival, lowerBound, upperBound, tp) - if err == nil { - err = err2 - } - return ival, errors.Trace(err) - case KindMysqlDecimal: - var to MyDecimal - err := d.GetMysqlDecimal().Round(&to, 0, ModeHalfEven) - ival, err1 := to.ToInt() - if err == nil { - err = err1 - } - ival, err2 := ConvertIntToInt(ival, lowerBound, upperBound, tp) - if err == nil { - err = err2 - } - return ival, errors.Trace(err) - case KindMysqlEnum: - fval := d.GetMysqlEnum().ToNumber() - return ConvertFloatToInt(fval, lowerBound, upperBound, tp) - case KindMysqlSet: - fval := d.GetMysqlSet().ToNumber() - return ConvertFloatToInt(fval, lowerBound, upperBound, tp) - case KindMysqlJSON: - return ConvertJSONToInt(sc, d.GetMysqlJSON(), false) - case KindBinaryLiteral, KindMysqlBit: - val, err := d.GetBinaryLiteral().ToInt(sc) - return int64(val), errors.Trace(err) - default: - return 0, errors.Errorf("cannot convert %v(type %T) to int64", d.GetValue(), d.GetValue()) - } -} - -// ToFloat64 converts to a float64 -func (d *Datum) ToFloat64(sc *stmtctx.StatementContext) (float64, error) { - switch d.Kind() { - case KindInt64: - return float64(d.GetInt64()), nil - case KindUint64: - return float64(d.GetUint64()), nil - case KindFloat32: - return float64(d.GetFloat32()), nil - case KindFloat64: - return d.GetFloat64(), nil - case KindString: - return StrToFloat(sc, d.GetString()) - case KindBytes: - return StrToFloat(sc, string(d.GetBytes())) - case KindMysqlTime: - f, err := d.GetMysqlTime().ToNumber().ToFloat64() - return f, errors.Trace(err) - case KindMysqlDuration: - f, err := d.GetMysqlDuration().ToNumber().ToFloat64() - return f, errors.Trace(err) - case KindMysqlDecimal: - f, err := d.GetMysqlDecimal().ToFloat64() - return f, errors.Trace(err) - case KindMysqlEnum: - return d.GetMysqlEnum().ToNumber(), nil - case KindMysqlSet: - return d.GetMysqlSet().ToNumber(), nil - case KindBinaryLiteral, KindMysqlBit: - val, err := d.GetBinaryLiteral().ToInt(sc) - return float64(val), errors.Trace(err) - case KindMysqlJSON: - f, err := ConvertJSONToFloat(sc, d.GetMysqlJSON()) - return f, errors.Trace(err) - default: - return 0, errors.Errorf("cannot convert %v(type %T) to float64", d.GetValue(), d.GetValue()) - } -} - -// ToString gets the string representation of the datum. -func (d *Datum) ToString() (string, error) { - switch d.Kind() { - case KindInt64: - return strconv.FormatInt(d.GetInt64(), 10), nil - case KindUint64: - return strconv.FormatUint(d.GetUint64(), 10), nil - case KindFloat32: - return strconv.FormatFloat(float64(d.GetFloat32()), 'f', -1, 32), nil - case KindFloat64: - return strconv.FormatFloat(d.GetFloat64(), 'f', -1, 64), nil - case KindString: - return d.GetString(), nil - case KindBytes: - return d.GetString(), nil - case KindMysqlTime: - return d.GetMysqlTime().String(), nil - case KindMysqlDuration: - return d.GetMysqlDuration().String(), nil - case KindMysqlDecimal: - return d.GetMysqlDecimal().String(), nil - case KindMysqlEnum: - return d.GetMysqlEnum().String(), nil - case KindMysqlSet: - return d.GetMysqlSet().String(), nil - case KindMysqlJSON: - return d.GetMysqlJSON().String(), nil - case KindBinaryLiteral, KindMysqlBit: - return d.GetBinaryLiteral().ToString(), nil - default: - return "", errors.Errorf("cannot convert %v(type %T) to string", d.GetValue(), d.GetValue()) - } -} - -// ToBytes gets the bytes representation of the datum. -func (d *Datum) ToBytes() ([]byte, error) { - switch d.k { - case KindString, KindBytes: - return d.GetBytes(), nil - default: - str, err := d.ToString() - if err != nil { - return nil, errors.Trace(err) - } - return []byte(str), nil - } -} - -// ToMysqlJSON is similar to convertToMysqlJSON, except the -// latter parses from string, but the former uses it as primitive. -func (d *Datum) ToMysqlJSON() (j json.BinaryJSON, err error) { - var in interface{} - switch d.Kind() { - case KindMysqlJSON: - j = d.GetMysqlJSON() - return - case KindInt64: - in = d.GetInt64() - case KindUint64: - in = d.GetUint64() - case KindFloat32, KindFloat64: - in = d.GetFloat64() - case KindMysqlDecimal: - in, err = d.GetMysqlDecimal().ToFloat64() - case KindString, KindBytes: - in = d.GetString() - case KindBinaryLiteral, KindMysqlBit: - in = d.GetBinaryLiteral().ToString() - case KindNull: - in = nil - default: - in, err = d.ToString() - } - if err != nil { - err = errors.Trace(err) - return - } - j = json.CreateBinary(in) - return -} - -func invalidConv(d *Datum, tp byte) (Datum, error) { - return Datum{}, errors.Errorf("cannot convert datum from %s to type %s.", TypeStr(d.Kind()), TypeStr(tp)) -} - -func (d *Datum) convergeType(hasUint, hasDecimal, hasFloat *bool) (x Datum) { - x = *d - switch d.Kind() { - case KindUint64: - *hasUint = true - case KindFloat32: - f := d.GetFloat32() - x.SetFloat64(float64(f)) - *hasFloat = true - case KindFloat64: - *hasFloat = true - case KindMysqlDecimal: - *hasDecimal = true - } - return x -} - -// CoerceDatum changes type. -// If a or b is Float, changes the both to Float. -// Else if a or b is Decimal, changes the both to Decimal. -// Else if a or b is Uint and op is not div, mod, or intDiv changes the both to Uint. -func CoerceDatum(sc *stmtctx.StatementContext, a, b Datum) (x, y Datum, err error) { - if a.IsNull() || b.IsNull() { - return x, y, nil - } - var hasUint, hasDecimal, hasFloat bool - x = a.convergeType(&hasUint, &hasDecimal, &hasFloat) - y = b.convergeType(&hasUint, &hasDecimal, &hasFloat) - if hasFloat { - switch x.Kind() { - case KindInt64: - x.SetFloat64(float64(x.GetInt64())) - case KindUint64: - x.SetFloat64(float64(x.GetUint64())) - case KindMysqlEnum: - x.SetFloat64(x.GetMysqlEnum().ToNumber()) - case KindMysqlSet: - x.SetFloat64(x.GetMysqlSet().ToNumber()) - case KindMysqlDecimal: - var fval float64 - fval, err = x.ToFloat64(sc) - if err != nil { - return x, y, errors.Trace(err) - } - x.SetFloat64(fval) - } - switch y.Kind() { - case KindInt64: - y.SetFloat64(float64(y.GetInt64())) - case KindUint64: - y.SetFloat64(float64(y.GetUint64())) - case KindBinaryLiteral, KindMysqlBit: - var fval uint64 - fval, err = y.GetBinaryLiteral().ToInt(sc) - if err != nil { - return x, y, errors.Trace(err) - } - y.SetFloat64(float64(fval)) - case KindMysqlEnum: - y.SetFloat64(y.GetMysqlEnum().ToNumber()) - case KindMysqlSet: - y.SetFloat64(y.GetMysqlSet().ToNumber()) - case KindMysqlDecimal: - var fval float64 - fval, err = y.ToFloat64(sc) - if err != nil { - return x, y, errors.Trace(err) - } - y.SetFloat64(fval) - } - } else if hasDecimal { - var dec *MyDecimal - dec, err = ConvertDatumToDecimal(sc, x) - if err != nil { - return x, y, errors.Trace(err) - } - x.SetMysqlDecimal(dec) - dec, err = ConvertDatumToDecimal(sc, y) - if err != nil { - return x, y, errors.Trace(err) - } - y.SetMysqlDecimal(dec) - } - return -} - -// NewDatum creates a new Datum from an interface{}. -func NewDatum(in interface{}) (d Datum) { - switch x := in.(type) { - case []interface{}: - d.SetValue(MakeDatums(x...)) - default: - d.SetValue(in) - } - return d -} - -// NewIntDatum creates a new Datum from an int64 value. -func NewIntDatum(i int64) (d Datum) { - d.SetInt64(i) - return d -} - -// NewUintDatum creates a new Datum from an uint64 value. -func NewUintDatum(i uint64) (d Datum) { - d.SetUint64(i) - return d -} - -// NewBytesDatum creates a new Datum from a byte slice. -func NewBytesDatum(b []byte) (d Datum) { - d.SetBytes(b) - return d -} - -// NewStringDatum creates a new Datum from a string. -func NewStringDatum(s string) (d Datum) { - d.SetString(s) - return d -} - -// NewFloat64Datum creates a new Datum from a float64 value. -func NewFloat64Datum(f float64) (d Datum) { - d.SetFloat64(f) - return d -} - -// NewFloat32Datum creates a new Datum from a float32 value. -func NewFloat32Datum(f float32) (d Datum) { - d.SetFloat32(f) - return d -} - -// NewDurationDatum creates a new Datum from a Duration value. -func NewDurationDatum(dur Duration) (d Datum) { - d.SetMysqlDuration(dur) - return d -} - -// NewTimeDatum creates a new Time from a Time value. -func NewTimeDatum(t Time) (d Datum) { - d.SetMysqlTime(t) - return d -} - -// NewDecimalDatum creates a new Datum form a MyDecimal value. -func NewDecimalDatum(dec *MyDecimal) (d Datum) { - d.SetMysqlDecimal(dec) - return d -} - -// NewBinaryLiteralDatum creates a new BinaryLiteral Datum for a BinaryLiteral value. -func NewBinaryLiteralDatum(b BinaryLiteral) (d Datum) { - d.SetBinaryLiteral(b) - return d -} - -// NewMysqlBitDatum creates a new MysqlBit Datum for a BinaryLiteral value. -func NewMysqlBitDatum(b BinaryLiteral) (d Datum) { - d.SetMysqlBit(b) - return d -} - -// MakeDatums creates datum slice from interfaces. -func MakeDatums(args ...interface{}) []Datum { - datums := make([]Datum, len(args)) - for i, v := range args { - datums[i] = NewDatum(v) - } - return datums -} - -// MinNotNullDatum returns a datum represents minimum not null value. -func MinNotNullDatum() Datum { - return Datum{k: KindMinNotNull} -} - -// MaxValueDatum returns a datum represents max value. -func MaxValueDatum() Datum { - return Datum{k: KindMaxValue} -} - -// EqualDatums compare if a and b contains the same datum values. -func EqualDatums(sc *stmtctx.StatementContext, a []Datum, b []Datum) (bool, error) { - if len(a) != len(b) { - return false, nil - } - if a == nil && b == nil { - return true, nil - } - if a == nil || b == nil { - return false, nil - } - for i, ai := range a { - v, err := ai.CompareDatum(sc, &b[i]) - if err != nil { - return false, errors.Trace(err) - } - if v != 0 { - return false, nil - } - } - return true, nil -} - -// SortDatums sorts a slice of datum. -func SortDatums(sc *stmtctx.StatementContext, datums []Datum) error { - sorter := datumsSorter{datums: datums, sc: sc} - sort.Sort(&sorter) - return sorter.err -} - -type datumsSorter struct { - datums []Datum - sc *stmtctx.StatementContext - err error -} - -func (ds *datumsSorter) Len() int { - return len(ds.datums) -} - -func (ds *datumsSorter) Less(i, j int) bool { - cmp, err := ds.datums[i].CompareDatum(ds.sc, &ds.datums[j]) - if err != nil { - ds.err = errors.Trace(err) - return true - } - return cmp < 0 -} - -func (ds *datumsSorter) Swap(i, j int) { - ds.datums[i], ds.datums[j] = ds.datums[j], ds.datums[i] -} - -func handleTruncateError(sc *stmtctx.StatementContext) error { - if sc.IgnoreTruncate { - return nil - } - if !sc.TruncateAsWarning { - return ErrTruncated - } - sc.AppendWarning(ErrTruncated) - return nil -} - -// DatumsToString converts several datums to formatted string. -func DatumsToString(datums []Datum, handleNULL bool) (string, error) { - var strs []string - for _, datum := range datums { - if datum.Kind() == KindNull && handleNULL { - strs = append(strs, "NULL") - continue - } - str, err := datum.ToString() - if err != nil { - return "", errors.Trace(err) - } - strs = append(strs, str) - } - size := len(datums) - if size > 1 { - strs[0] = "(" + strs[0] - strs[size-1] = strs[size-1] + ")" - } - return strings.Join(strs, ", "), nil -} - -// CopyDatum returns a new copy of the datum. -// TODO: Abandon this function. -func CopyDatum(datum Datum) Datum { - return *datum.Copy() -} diff --git a/vendor/github.com/pingcap/tidb/types/datum_eval.go b/vendor/github.com/pingcap/tidb/types/datum_eval.go deleted file mode 100644 index 0206790..0000000 --- a/vendor/github.com/pingcap/tidb/types/datum_eval.go +++ /dev/null @@ -1,568 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -import ( - "math" - - "github.com/cznic/mathutil" - "github.com/juju/errors" - "github.com/pingcap/tidb/parser/opcode" - "github.com/pingcap/tidb/sessionctx/stmtctx" -) - -// CoerceArithmetic converts datum to appropriate datum for arithmetic computing. -func CoerceArithmetic(sc *stmtctx.StatementContext, a Datum) (d Datum, err error) { - switch a.Kind() { - case KindString, KindBytes: - // MySQL will convert string to float for arithmetic operation - f, err := StrToFloat(sc, a.GetString()) - if err != nil { - return d, errors.Trace(err) - } - d.SetFloat64(f) - return d, errors.Trace(err) - case KindMysqlTime: - // if time has no precision, return int64 - t := a.GetMysqlTime() - de := t.ToNumber() - if t.Fsp == 0 { - iVal, err := de.ToInt() - if err != nil { - return d, errors.Trace(err) - } - d.SetInt64(iVal) - return d, nil - } - d.SetMysqlDecimal(de) - return d, nil - case KindMysqlDuration: - // if duration has no precision, return int64 - du := a.GetMysqlDuration() - de := du.ToNumber() - if du.Fsp == 0 { - iVal, err := de.ToInt() - if err != nil { - return d, errors.Trace(err) - } - d.SetInt64(iVal) - return d, nil - } - d.SetMysqlDecimal(de) - return d, nil - case KindBinaryLiteral, KindMysqlBit: - val, err1 := a.GetBinaryLiteral().ToInt(sc) - d.SetUint64(val) - return d, err1 - case KindMysqlEnum: - d.SetFloat64(a.GetMysqlEnum().ToNumber()) - return d, nil - case KindMysqlSet: - d.SetFloat64(a.GetMysqlSet().ToNumber()) - return d, nil - default: - return a, nil - } -} - -// ComputePlus computes the result of a+b. -func ComputePlus(a, b Datum) (d Datum, err error) { - switch a.Kind() { - case KindInt64: - switch b.Kind() { - case KindInt64: - r, err1 := AddInt64(a.GetInt64(), b.GetInt64()) - d.SetInt64(r) - return d, errors.Trace(err1) - case KindUint64: - r, err1 := AddInteger(b.GetUint64(), a.GetInt64()) - d.SetUint64(r) - return d, errors.Trace(err1) - } - case KindUint64: - switch b.Kind() { - case KindInt64: - r, err1 := AddInteger(a.GetUint64(), b.GetInt64()) - d.SetUint64(r) - return d, errors.Trace(err1) - case KindUint64: - r, err1 := AddUint64(a.GetUint64(), b.GetUint64()) - d.SetUint64(r) - return d, errors.Trace(err1) - } - case KindFloat64: - switch b.Kind() { - case KindFloat64: - r := a.GetFloat64() + b.GetFloat64() - d.SetFloat64(r) - return d, nil - } - case KindMysqlDecimal: - switch b.Kind() { - case KindMysqlDecimal: - r := new(MyDecimal) - err = DecimalAdd(a.GetMysqlDecimal(), b.GetMysqlDecimal(), r) - d.SetMysqlDecimal(r) - d.SetFrac(mathutil.Max(a.Frac(), b.Frac())) - return d, err - } - } - _, err = InvOp2(a.GetValue(), b.GetValue(), opcode.Plus) - return d, err -} - -// ComputeMinus computes the result of a-b. -func ComputeMinus(a, b Datum) (d Datum, err error) { - switch a.Kind() { - case KindInt64: - switch b.Kind() { - case KindInt64: - r, err1 := SubInt64(a.GetInt64(), b.GetInt64()) - d.SetInt64(r) - return d, errors.Trace(err1) - case KindUint64: - r, err1 := SubIntWithUint(a.GetInt64(), b.GetUint64()) - d.SetUint64(r) - return d, errors.Trace(err1) - } - case KindUint64: - switch b.Kind() { - case KindInt64: - r, err1 := SubUintWithInt(a.GetUint64(), b.GetInt64()) - d.SetUint64(r) - return d, errors.Trace(err1) - case KindUint64: - r, err1 := SubUint64(a.GetUint64(), b.GetUint64()) - d.SetUint64(r) - return d, errors.Trace(err1) - } - case KindFloat64: - switch b.Kind() { - case KindFloat64: - r := a.GetFloat64() - b.GetFloat64() - d.SetFloat64(r) - return d, nil - } - case KindMysqlDecimal: - switch b.Kind() { - case KindMysqlDecimal: - r := new(MyDecimal) - err = DecimalSub(a.GetMysqlDecimal(), b.GetMysqlDecimal(), r) - d.SetMysqlDecimal(r) - return d, err - } - } - _, err = InvOp2(a.GetValue(), b.GetValue(), opcode.Minus) - return d, errors.Trace(err) -} - -// ComputeMul computes the result of a*b. -func ComputeMul(a, b Datum) (d Datum, err error) { - switch a.Kind() { - case KindInt64: - switch b.Kind() { - case KindInt64: - r, err1 := MulInt64(a.GetInt64(), b.GetInt64()) - d.SetInt64(r) - return d, errors.Trace(err1) - case KindUint64: - r, err1 := MulInteger(b.GetUint64(), a.GetInt64()) - d.SetUint64(r) - return d, errors.Trace(err1) - } - case KindUint64: - switch b.Kind() { - case KindInt64: - r, err1 := MulInteger(a.GetUint64(), b.GetInt64()) - d.SetUint64(r) - return d, errors.Trace(err1) - case KindUint64: - r, err1 := MulUint64(a.GetUint64(), b.GetUint64()) - d.SetUint64(r) - return d, errors.Trace(err1) - } - case KindFloat64: - switch b.Kind() { - case KindFloat64: - r := a.GetFloat64() * b.GetFloat64() - d.SetFloat64(r) - return d, nil - } - case KindMysqlDecimal: - switch b.Kind() { - case KindMysqlDecimal: - r := new(MyDecimal) - err = DecimalMul(a.GetMysqlDecimal(), b.GetMysqlDecimal(), r) - d.SetMysqlDecimal(r) - return d, nil - } - } - - _, err = InvOp2(a.GetValue(), b.GetValue(), opcode.Mul) - return d, errors.Trace(err) -} - -// ComputeDiv computes the result of a/b. -func ComputeDiv(sc *stmtctx.StatementContext, a, b Datum) (d Datum, err error) { - // MySQL support integer division Div and division operator / - // we use opcode.Div for division operator and will use another for integer division later. - // for division operator, we will use float64 for calculation. - switch a.Kind() { - case KindFloat64: - y, err1 := b.ToFloat64(sc) - if err1 != nil { - return d, errors.Trace(err1) - } - - if y == 0 { - return d, nil - } - - x := a.GetFloat64() - d.SetFloat64(x / y) - return d, nil - default: - // the scale of the result is the scale of the first operand plus - // the value of the div_precision_increment system variable (which is 4 by default) - // we will use 4 here - xa, err1 := a.ToDecimal(sc) - if err != nil { - return d, errors.Trace(err1) - } - - xb, err1 := b.ToDecimal(sc) - if err1 != nil { - return d, errors.Trace(err1) - } - // division by zero return null - to := new(MyDecimal) - err = DecimalDiv(xa, xb, to, DivFracIncr) - if err != ErrDivByZero { - d.SetMysqlDecimal(to) - } else { - err = nil - } - return d, err - } -} - -// ComputeMod computes the result of a mod b. -func ComputeMod(sc *stmtctx.StatementContext, a, b Datum) (d Datum, err error) { - switch a.Kind() { - case KindInt64: - x := a.GetInt64() - switch b.Kind() { - case KindInt64: - y := b.GetInt64() - if y == 0 { - return d, nil - } - d.SetInt64(x % y) - return d, nil - case KindUint64: - y := b.GetUint64() - if y == 0 { - return d, nil - } else if x < 0 { - d.SetInt64(-int64(uint64(-x) % y)) - // first is int64, return int64. - return d, nil - } - d.SetInt64(int64(uint64(x) % y)) - return d, nil - } - case KindUint64: - x := a.GetUint64() - switch b.Kind() { - case KindInt64: - y := b.GetInt64() - if y == 0 { - return d, nil - } else if y < 0 { - // first is uint64, return uint64. - d.SetUint64(x % uint64(-y)) - return d, nil - } - d.SetUint64(x % uint64(y)) - return d, nil - case KindUint64: - y := b.GetUint64() - if y == 0 { - return d, nil - } - d.SetUint64(x % y) - return d, nil - } - case KindFloat64: - x := a.GetFloat64() - switch b.Kind() { - case KindFloat64: - y := b.GetFloat64() - if y == 0 { - return d, nil - } - d.SetFloat64(math.Mod(x, y)) - return d, nil - } - case KindMysqlDecimal: - x := a.GetMysqlDecimal() - switch b.Kind() { - case KindMysqlDecimal: - y := b.GetMysqlDecimal() - to := new(MyDecimal) - err = DecimalMod(x, y, to) - if err != ErrDivByZero { - d.SetMysqlDecimal(to) - } else { - // div by zero returns nil without error. - err = nil - } - return d, err - } - } - _, err = InvOp2(a.GetValue(), b.GetValue(), opcode.Mod) - return d, errors.Trace(err) -} - -// ComputeIntDiv computes the result of a / b, both a and b are integer. -func ComputeIntDiv(sc *stmtctx.StatementContext, a, b Datum) (d Datum, err error) { - switch a.Kind() { - case KindInt64: - x := a.GetInt64() - switch b.Kind() { - case KindInt64: - y := b.GetInt64() - if y == 0 { - return d, nil - } - r, err1 := DivInt64(x, y) - d.SetInt64(r) - return d, errors.Trace(err1) - case KindUint64: - y := b.GetUint64() - if y == 0 { - return d, nil - } - r, err1 := DivIntWithUint(x, y) - d.SetUint64(r) - return d, errors.Trace(err1) - } - case KindUint64: - x := a.GetUint64() - switch b.Kind() { - case KindInt64: - y := b.GetInt64() - if y == 0 { - return d, nil - } - r, err1 := DivUintWithInt(x, y) - d.SetUint64(r) - return d, errors.Trace(err1) - case KindUint64: - y := b.GetUint64() - if y == 0 { - return d, nil - } - d.SetUint64(x / y) - return d, nil - } - } - - // If either is not integer, use decimal to calculate - x, err := a.ToDecimal(sc) - if err != nil { - return d, errors.Trace(err) - } - - y, err := b.ToDecimal(sc) - if err != nil { - return d, errors.Trace(err) - } - to := new(MyDecimal) - err = DecimalDiv(x, y, to, DivFracIncr) - if err == ErrDivByZero { - return d, nil - } - iVal, err1 := to.ToInt() - if err == nil { - err = err1 - } - d.SetInt64(iVal) - return d, nil -} - -// decimal2RoundUint converts a MyDecimal to an uint64 after rounding. -func decimal2RoundUint(x *MyDecimal) (uint64, error) { - roundX := new(MyDecimal) - err := x.Round(roundX, 0, ModeHalfEven) - if err != nil { - return 0, errors.Trace(err) - } - var uintX uint64 - if roundX.IsNegative() { - var intX int64 - intX, err = roundX.ToInt() - if err != nil && err != ErrTruncated { - return 0, errors.Trace(err) - } - uintX = uint64(intX) - } else { - uintX, err = roundX.ToUint() - if err != nil && err != ErrTruncated { - return 0, errors.Trace(err) - } - } - - return uintX, nil -} - -// ComputeBitAnd computes the result of a & b. -func ComputeBitAnd(sc *stmtctx.StatementContext, a, b Datum) (d Datum, err error) { - aKind, bKind := a.Kind(), b.Kind() - if (aKind == KindInt64 || aKind == KindUint64) && (bKind == KindInt64 || bKind == KindUint64) { - d.SetUint64(a.GetUint64() & b.GetUint64()) - return - } - // If either is not integer, we round the operands and then use uint64 to calculate. - x, err := convertNonInt2RoundUint64(sc, a) - if err != nil { - return d, errors.Trace(err) - } - - y, err := convertNonInt2RoundUint64(sc, b) - if err != nil { - return d, errors.Trace(err) - } - - d.SetUint64(x & y) - return d, nil -} - -// ComputeBitOr computes the result of a | b. -func ComputeBitOr(sc *stmtctx.StatementContext, a, b Datum) (d Datum, err error) { - aKind, bKind := a.Kind(), b.Kind() - if (aKind == KindInt64 || aKind == KindUint64) && (bKind == KindInt64 || bKind == KindUint64) { - d.SetUint64(a.GetUint64() | b.GetUint64()) - return - } - // If either is not integer, we round the operands and then use uint64 to calculate. - x, err := convertNonInt2RoundUint64(sc, a) - if err != nil { - return d, errors.Trace(err) - } - - y, err := convertNonInt2RoundUint64(sc, b) - if err != nil { - return d, errors.Trace(err) - } - - d.SetUint64(x | y) - return d, nil -} - -// ComputeBitNeg computes the result of ~a. -func ComputeBitNeg(sc *stmtctx.StatementContext, a Datum) (d Datum, err error) { - aKind := a.Kind() - if aKind == KindInt64 || aKind == KindUint64 { - d.SetUint64(^a.GetUint64()) - return - } - // If either is not integer, we round the operands and then use uint64 to calculate. - x, err := convertNonInt2RoundUint64(sc, a) - if err != nil { - return d, errors.Trace(err) - } - - d.SetUint64(^x) - return d, nil -} - -// ComputeBitXor computes the result of a ^ b. -func ComputeBitXor(sc *stmtctx.StatementContext, a, b Datum) (d Datum, err error) { - aKind, bKind := a.Kind(), b.Kind() - if (aKind == KindInt64 || aKind == KindUint64) && (bKind == KindInt64 || bKind == KindUint64) { - d.SetUint64(a.GetUint64() ^ b.GetUint64()) - return - } - // If either is not integer, we round the operands and then use uint64 to calculate. - x, err := convertNonInt2RoundUint64(sc, a) - if err != nil { - return d, errors.Trace(err) - } - - y, err := convertNonInt2RoundUint64(sc, b) - if err != nil { - return d, errors.Trace(err) - } - - d.SetUint64(x ^ y) - return d, nil -} - -// ComputeLeftShift computes the result of a >> b. -func ComputeLeftShift(sc *stmtctx.StatementContext, a, b Datum) (d Datum, err error) { - aKind, bKind := a.Kind(), b.Kind() - if (aKind == KindInt64 || aKind == KindUint64) && (bKind == KindInt64 || bKind == KindUint64) { - d.SetUint64(a.GetUint64() << b.GetUint64()) - return - } - // If either is not integer, we round the operands and then use uint64 to calculate. - x, err := convertNonInt2RoundUint64(sc, a) - if err != nil { - return d, errors.Trace(err) - } - - y, err := convertNonInt2RoundUint64(sc, b) - if err != nil { - return d, errors.Trace(err) - } - - d.SetUint64(x << y) - return d, nil -} - -// ComputeRightShift computes the result of a << b. -func ComputeRightShift(sc *stmtctx.StatementContext, a, b Datum) (d Datum, err error) { - aKind, bKind := a.Kind(), b.Kind() - if (aKind == KindInt64 || aKind == KindUint64) && (bKind == KindInt64 || bKind == KindUint64) { - d.SetUint64(a.GetUint64() >> b.GetUint64()) - return - } - // If either is not integer, we round the operands and then use uint64 to calculate. - x, err := convertNonInt2RoundUint64(sc, a) - if err != nil { - return d, errors.Trace(err) - } - - y, err := convertNonInt2RoundUint64(sc, b) - if err != nil { - return d, errors.Trace(err) - } - - d.SetUint64(x >> y) - return d, nil -} - -// convertNonInt2RoundUint64 converts a non-integer to an uint64 -func convertNonInt2RoundUint64(sc *stmtctx.StatementContext, x Datum) (d uint64, err error) { - decimalX, err := x.ToDecimal(sc) - if err != nil { - return d, errors.Trace(err) - } - d, err = decimal2RoundUint(decimalX) - if err != nil { - return d, errors.Trace(err) - } - return -} diff --git a/vendor/github.com/pingcap/tidb/types/enum.go b/vendor/github.com/pingcap/tidb/types/enum.go deleted file mode 100644 index 4ba8e20..0000000 --- a/vendor/github.com/pingcap/tidb/types/enum.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -import ( - "strconv" - "strings" - - "github.com/juju/errors" -) - -// Enum is for MySQL enum type. -type Enum struct { - Name string - Value uint64 -} - -// String implements fmt.Stringer interface. -func (e Enum) String() string { - return e.Name -} - -// ToNumber changes enum index to float64 for numeric operation. -func (e Enum) ToNumber() float64 { - return float64(e.Value) -} - -// ParseEnumName creates a Enum with item name. -func ParseEnumName(elems []string, name string) (Enum, error) { - for i, n := range elems { - if strings.EqualFold(n, name) { - return Enum{Name: n, Value: uint64(i) + 1}, nil - } - } - - // name doesn't exist, maybe an integer? - if num, err := strconv.ParseUint(name, 0, 64); err == nil { - return ParseEnumValue(elems, num) - } - - return Enum{}, errors.Errorf("item %s is not in enum %v", name, elems) -} - -// ParseEnumValue creates a Enum with special number. -func ParseEnumValue(elems []string, number uint64) (Enum, error) { - if number == 0 || number > uint64(len(elems)) { - return Enum{}, errors.Errorf("number %d overflow enum boundary [1, %d]", number, len(elems)) - } - - return Enum{Name: elems[number-1], Value: number}, nil -} diff --git a/vendor/github.com/pingcap/tidb/types/errors.go b/vendor/github.com/pingcap/tidb/types/errors.go deleted file mode 100644 index 52558ea..0000000 --- a/vendor/github.com/pingcap/tidb/types/errors.go +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -import ( - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" -) - -var ( - // ErrDataTooLong is returned when converts a string value that is longer than field type length. - ErrDataTooLong = terror.ClassTypes.New(codeDataTooLong, "Data Too Long") - // ErrIllegalValueForType is returned when value of type is illegal. - ErrIllegalValueForType = terror.ClassTypes.New(codeIllegalValueForType, mysql.MySQLErrName[mysql.ErrIllegalValueForType]) - // ErrTruncated is returned when data has been truncated during conversion. - ErrTruncated = terror.ClassTypes.New(codeTruncated, "Data Truncated") - // ErrTruncatedWrongVal is returned when data has been truncated during conversion. - ErrTruncatedWrongVal = terror.ClassTypes.New(codeTruncatedWrongValue, msgTruncatedWrongVal) - // ErrOverflow is returned when data is out of range for a field type. - ErrOverflow = terror.ClassTypes.New(codeOverflow, msgOverflow) - // ErrDivByZero is return when do division by 0. - ErrDivByZero = terror.ClassTypes.New(codeDivByZero, "Division by 0") - // ErrTooBigDisplayWidth is return when display width out of range for column. - ErrTooBigDisplayWidth = terror.ClassTypes.New(codeTooBigDisplayWidth, "Too Big Display width") - // ErrTooBigFieldLength is return when column length too big for column. - ErrTooBigFieldLength = terror.ClassTypes.New(codeTooBigFieldLength, "Too Big Field length") - // ErrTooBigSet is returned when too many strings for column. - ErrTooBigSet = terror.ClassTypes.New(codeTooBigSet, "Too Big Set") - // ErrTooBigScale is returned when type DECIMAL/NUMERIC scale is bigger than mysql.MaxDecimalScale. - ErrTooBigScale = terror.ClassTypes.New(codeTooBigScale, mysql.MySQLErrName[mysql.ErrTooBigScale]) - // ErrTooBigPrecision is returned when type DECIMAL/NUMERIC precision is bigger than mysql.MaxDecimalWidth - ErrTooBigPrecision = terror.ClassTypes.New(codeTooBigPrecision, mysql.MySQLErrName[mysql.ErrTooBigPrecision]) - // ErrWrongFieldSpec is return when incorrect column specifier for column. - ErrWrongFieldSpec = terror.ClassTypes.New(codeWrongFieldSpec, "Wrong Field Spec") - // ErrBadNumber is return when parsing an invalid binary decimal number. - ErrBadNumber = terror.ClassTypes.New(codeBadNumber, "Bad Number") - // ErrCastAsSignedOverflow is returned when positive out-of-range integer, and convert to it's negative complement. - ErrCastAsSignedOverflow = terror.ClassTypes.New(codeUnknown, msgCastAsSignedOverflow) - // ErrCastNegIntAsUnsigned is returned when a negative integer be casted to an unsigned int. - ErrCastNegIntAsUnsigned = terror.ClassTypes.New(codeUnknown, msgCastNegIntAsUnsigned) - // ErrInvalidDefault is returned when meet a invalid default value. - ErrInvalidDefault = terror.ClassTypes.New(codeInvalidDefault, "Invalid default value for '%s'") - // ErrMBiggerThanD is returned when precision less than the scale. - ErrMBiggerThanD = terror.ClassTypes.New(codeMBiggerThanD, mysql.MySQLErrName[mysql.ErrMBiggerThanD]) - // ErrWarnDataOutOfRange is returned when the value in a numeric column that is outside the permissible range of the column data type. - // See https://dev.mysql.com/doc/refman/5.5/en/out-of-range-and-overflow.html for details - ErrWarnDataOutOfRange = terror.ClassTypes.New(codeDataOutOfRange, mysql.MySQLErrName[mysql.ErrWarnDataOutOfRange]) -) - -const ( - codeBadNumber terror.ErrCode = 1 - - codeDataTooLong = terror.ErrCode(mysql.ErrDataTooLong) - codeIllegalValueForType = terror.ErrCode(mysql.ErrIllegalValueForType) - codeTruncated = terror.ErrCode(mysql.WarnDataTruncated) - codeOverflow = terror.ErrCode(mysql.ErrDataOutOfRange) - codeDivByZero = terror.ErrCode(mysql.ErrDivisionByZero) - codeTooBigDisplayWidth = terror.ErrCode(mysql.ErrTooBigDisplaywidth) - codeTooBigFieldLength = terror.ErrCode(mysql.ErrTooBigFieldlength) - codeTooBigSet = terror.ErrCode(mysql.ErrTooBigSet) - codeTooBigScale = terror.ErrCode(mysql.ErrTooBigScale) - codeTooBigPrecision = terror.ErrCode(mysql.ErrTooBigPrecision) - codeWrongFieldSpec = terror.ErrCode(mysql.ErrWrongFieldSpec) - codeTruncatedWrongValue = terror.ErrCode(mysql.ErrTruncatedWrongValue) - codeUnknown = terror.ErrCode(mysql.ErrUnknown) - codeInvalidDefault = terror.ErrCode(mysql.ErrInvalidDefault) - codeMBiggerThanD = terror.ErrCode(mysql.ErrMBiggerThanD) - codeDataOutOfRange = terror.ErrCode(mysql.ErrWarnDataOutOfRange) -) - -var ( - msgOverflow = mysql.MySQLErrName[mysql.ErrDataOutOfRange] - msgTruncatedWrongVal = mysql.MySQLErrName[mysql.ErrTruncatedWrongValue] - msgCastAsSignedOverflow = "Cast to signed converted positive out-of-range integer to it's negative complement" - msgCastNegIntAsUnsigned = "Cast to unsigned converted negative integer to it's positive complement" -) - -func init() { - typesMySQLErrCodes := map[terror.ErrCode]uint16{ - codeDataTooLong: mysql.ErrDataTooLong, - codeIllegalValueForType: mysql.ErrIllegalValueForType, - codeTruncated: mysql.WarnDataTruncated, - codeOverflow: mysql.ErrDataOutOfRange, - codeDivByZero: mysql.ErrDivisionByZero, - codeTooBigDisplayWidth: mysql.ErrTooBigDisplaywidth, - codeTooBigFieldLength: mysql.ErrTooBigFieldlength, - codeTooBigSet: mysql.ErrTooBigSet, - codeTooBigScale: mysql.ErrTooBigScale, - codeTooBigPrecision: mysql.ErrTooBigPrecision, - codeWrongFieldSpec: mysql.ErrWrongFieldSpec, - codeTruncatedWrongValue: mysql.ErrTruncatedWrongValue, - codeUnknown: mysql.ErrUnknown, - codeInvalidDefault: mysql.ErrInvalidDefault, - codeMBiggerThanD: mysql.ErrMBiggerThanD, - codeDataOutOfRange: mysql.ErrWarnDataOutOfRange, - } - terror.ErrClassToMySQLCodes[terror.ClassTypes] = typesMySQLErrCodes -} diff --git a/vendor/github.com/pingcap/tidb/types/etc.go b/vendor/github.com/pingcap/tidb/types/etc.go deleted file mode 100644 index 1c36e68..0000000 --- a/vendor/github.com/pingcap/tidb/types/etc.go +++ /dev/null @@ -1,186 +0,0 @@ -// Copyright 2014 The ql Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSES/QL-LICENSE file. - -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -import ( - "io" - "strings" - - "github.com/juju/errors" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser/opcode" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/util/charset" -) - -// IsTypeBlob returns a boolean indicating whether the tp is a blob type. -func IsTypeBlob(tp byte) bool { - switch tp { - case mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeBlob, mysql.TypeLongBlob: - return true - default: - return false - } -} - -// IsTypeChar returns a boolean indicating -// whether the tp is the char type like a string type or a varchar type. -func IsTypeChar(tp byte) bool { - return tp == mysql.TypeString || tp == mysql.TypeVarchar -} - -// IsTypeVarchar returns a boolean indicating -// whether the tp is the varchar type like a varstring type or a varchar type. -func IsTypeVarchar(tp byte) bool { - return tp == mysql.TypeVarString || tp == mysql.TypeVarchar -} - -// IsTypeUnspecified returns a boolean indicating whether the tp is the Unspecified type. -func IsTypeUnspecified(tp byte) bool { - return tp == mysql.TypeUnspecified -} - -// IsTypePrefixable returns a boolean indicating -// whether an index on a column with the tp can be defined with a prefix. -func IsTypePrefixable(tp byte) bool { - return IsTypeBlob(tp) || IsTypeChar(tp) -} - -// IsTypeFractionable returns a boolean indicating -// whether the tp can has time fraction. -func IsTypeFractionable(tp byte) bool { - return tp == mysql.TypeDatetime || tp == mysql.TypeDuration || tp == mysql.TypeTimestamp -} - -// IsTypeTime returns a boolean indicating -// whether the tp is time type like datetime, date or timestamp. -func IsTypeTime(tp byte) bool { - return tp == mysql.TypeDatetime || tp == mysql.TypeDate || tp == mysql.TypeTimestamp -} - -// IsTypeFloat returns a boolean indicating whether the tp is floating-point type. -func IsTypeFloat(tp byte) bool { - return tp == mysql.TypeFloat || tp == mysql.TypeDouble -} - -// IsTemporalWithDate returns a boolean indicating -// whether the tp is time type with date. -func IsTemporalWithDate(tp byte) bool { - return IsTypeTime(tp) -} - -// IsBinaryStr returns a boolean indicating -// whether the field type is a binary string type. -func IsBinaryStr(ft *FieldType) bool { - if ft.Collate == charset.CollationBin && (IsTypeChar(ft.Tp) || IsTypeBlob(ft.Tp) || IsTypeVarchar(ft.Tp) || IsTypeUnspecified(ft.Tp)) { - return true - } - return false -} - -// IsNonBinaryStr returns a boolean indicating -// whether the field type is a non-binary string type. -func IsNonBinaryStr(ft *FieldType) bool { - if ft.Collate != charset.CollationBin && (IsTypeChar(ft.Tp) || IsTypeBlob(ft.Tp) || IsTypeVarchar(ft.Tp) || IsTypeUnspecified(ft.Tp)) { - return true - } - return false -} - -var type2Str = map[byte]string{ - mysql.TypeBit: "bit", - mysql.TypeBlob: "text", - mysql.TypeDate: "date", - mysql.TypeDatetime: "datetime", - mysql.TypeDecimal: "unspecified", - mysql.TypeNewDecimal: "decimal", - mysql.TypeDouble: "double", - mysql.TypeEnum: "enum", - mysql.TypeFloat: "float", - mysql.TypeGeometry: "geometry", - mysql.TypeInt24: "mediumint", - mysql.TypeJSON: "json", - mysql.TypeLong: "int", - mysql.TypeLonglong: "bigint", - mysql.TypeLongBlob: "longtext", - mysql.TypeMediumBlob: "mediumtext", - mysql.TypeNull: "null", - mysql.TypeSet: "set", - mysql.TypeShort: "smallint", - mysql.TypeString: "char", - mysql.TypeDuration: "time", - mysql.TypeTimestamp: "timestamp", - mysql.TypeTiny: "tinyint", - mysql.TypeTinyBlob: "tinytext", - mysql.TypeVarchar: "varchar", - mysql.TypeVarString: "var_string", - mysql.TypeYear: "year", -} - -// TypeStr converts tp to a string. -func TypeStr(tp byte) (r string) { - return type2Str[tp] -} - -// TypeToStr converts a field to a string. -// It is used for converting Text to Blob, -// or converting Char to Binary. -// Args: -// tp: type enum -// cs: charset -func TypeToStr(tp byte, cs string) (r string) { - ts := type2Str[tp] - if cs != charset.CharsetBin { - return ts - } - if IsTypeBlob(tp) { - ts = strings.Replace(ts, "text", "blob", 1) - } else if IsTypeChar(tp) { - ts = strings.Replace(ts, "char", "binary", 1) - } - return ts -} - -// EOFAsNil filtrates errors, -// If err is equal to io.EOF returns nil. -func EOFAsNil(err error) error { - if terror.ErrorEqual(err, io.EOF) { - return nil - } - return errors.Trace(err) -} - -// InvOp2 returns an invalid operation error. -func InvOp2(x, y interface{}, o opcode.Op) (interface{}, error) { - return nil, errors.Errorf("Invalid operation: %v %v %v (mismatched types %T and %T)", x, o, y, x, y) -} - -// overflow returns an overflowed error. -func overflow(v interface{}, tp byte) error { - return ErrOverflow.Gen("constant %v overflows %s", v, TypeStr(tp)) -} - -// IsTypeTemporal checks if a type is a temporal type. -func IsTypeTemporal(tp byte) bool { - switch tp { - case mysql.TypeDuration, mysql.TypeDatetime, mysql.TypeTimestamp, - mysql.TypeDate, mysql.TypeNewDate: - return true - } - return false -} diff --git a/vendor/github.com/pingcap/tidb/types/eval_type.go b/vendor/github.com/pingcap/tidb/types/eval_type.go deleted file mode 100644 index 4777595..0000000 --- a/vendor/github.com/pingcap/tidb/types/eval_type.go +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -// EvalType indicates the specified types that arguments and result of a built-in function should be. -type EvalType byte - -const ( - // ETInt represents type INT in evaluation. - ETInt EvalType = iota - // ETReal represents type REAL in evaluation. - ETReal - // ETDecimal represents type DECIMAL in evaluation. - ETDecimal - // ETString represents type STRING in evaluation. - ETString - // ETDatetime represents type DATETIME in evaluation. - ETDatetime - // ETTimestamp represents type TIMESTAMP in evaluation. - ETTimestamp - // ETDuration represents type DURATION in evaluation. - ETDuration - // ETJson represents type JSON in evaluation. - ETJson -) - -// IsStringKind returns true for ETString, ETDatetime, ETTimestamp, ETDuration, ETJson EvalTypes. -func (et EvalType) IsStringKind() bool { - return et == ETString || et == ETDatetime || - et == ETTimestamp || et == ETDuration || et == ETJson -} diff --git a/vendor/github.com/pingcap/tidb/types/field_type.go b/vendor/github.com/pingcap/tidb/types/field_type.go deleted file mode 100644 index c478a21..0000000 --- a/vendor/github.com/pingcap/tidb/types/field_type.go +++ /dev/null @@ -1,1421 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -import ( - "fmt" - "io" - "strconv" - "strings" - - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/types/json" - "github.com/pingcap/tidb/util/charset" - "github.com/pingcap/tidb/util/format" -) - -// UnspecifiedLength is unspecified length. -const ( - UnspecifiedLength = -1 -) - -// FieldType records field type information. -type FieldType struct { - Tp byte - Flag uint - Flen int - Decimal int - Charset string - Collate string - // Elems is the element list for enum and set type. - Elems []string -} - -// NewFieldType returns a FieldType, -// with a type and other information about field type. -func NewFieldType(tp byte) *FieldType { - return &FieldType{ - Tp: tp, - Flen: UnspecifiedLength, - Decimal: UnspecifiedLength, - } -} - -// Equal checks whether two FieldType objects are equal. -func (ft *FieldType) Equal(other *FieldType) bool { - // We do not need to compare `ft.Flag == other.Flag` when wrapping cast upon an Expression. - partialEqual := ft.Tp == other.Tp && - ft.Flen == other.Flen && - ft.Decimal == other.Decimal && - ft.Charset == other.Charset && - ft.Collate == other.Collate - if !partialEqual || len(ft.Elems) != len(other.Elems) { - return false - } - for i := range ft.Elems { - if ft.Elems[i] != other.Elems[i] { - return false - } - } - return true -} - -// AggFieldType aggregates field types for a multi-argument function like `IF`, `IFNULL`, `COALESCE` -// whose return type is determined by the arguments' FieldTypes. -// Aggregation is performed by MergeFieldType function. -func AggFieldType(tps []*FieldType) *FieldType { - var currType FieldType - for i, t := range tps { - if i == 0 && currType.Tp == mysql.TypeUnspecified { - currType = *t - continue - } - mtp := MergeFieldType(currType.Tp, t.Tp) - currType.Tp = mtp - } - - return &currType -} - -// AggregateEvalType aggregates arguments' EvalType of a multi-argument function. -func AggregateEvalType(fts []*FieldType, flag *uint) EvalType { - var ( - aggregatedEvalType = ETString - unsigned bool - gotFirst bool - gotBinString bool - ) - lft := fts[0] - for _, ft := range fts { - if ft.Tp == mysql.TypeNull { - continue - } - et := ft.EvalType() - rft := ft - if (IsTypeBlob(ft.Tp) || IsTypeVarchar(ft.Tp) || IsTypeChar(ft.Tp)) && mysql.HasBinaryFlag(ft.Flag) { - gotBinString = true - } - if !gotFirst { - gotFirst = true - aggregatedEvalType = et - unsigned = mysql.HasUnsignedFlag(ft.Flag) - } else { - aggregatedEvalType = mergeEvalType(aggregatedEvalType, et, lft, rft, unsigned, mysql.HasUnsignedFlag(ft.Flag)) - unsigned = unsigned && mysql.HasUnsignedFlag(ft.Flag) - } - lft = rft - } - setTypeFlag(flag, mysql.UnsignedFlag, unsigned) - setTypeFlag(flag, mysql.BinaryFlag, !aggregatedEvalType.IsStringKind() || gotBinString) - return aggregatedEvalType -} - -func mergeEvalType(lhs, rhs EvalType, lft, rft *FieldType, isLHSUnsigned, isRHSUnsigned bool) EvalType { - if lft.Tp == mysql.TypeUnspecified || rft.Tp == mysql.TypeUnspecified { - if lft.Tp == rft.Tp { - return ETString - } - if lft.Tp == mysql.TypeUnspecified { - lhs = rhs - } else { - rhs = lhs - } - } - if lhs.IsStringKind() || rhs.IsStringKind() { - return ETString - } else if lhs == ETReal || rhs == ETReal { - return ETReal - } else if lhs == ETDecimal || rhs == ETDecimal || isLHSUnsigned != isRHSUnsigned { - return ETDecimal - } - return ETInt -} - -func setTypeFlag(flag *uint, flagItem uint, on bool) { - if on { - *flag |= flagItem - } else { - *flag &= ^flagItem - } -} - -// EvalType gets the type in evaluation. -func (ft *FieldType) EvalType() EvalType { - switch ft.Tp { - case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong, - mysql.TypeBit, mysql.TypeYear: - return ETInt - case mysql.TypeFloat, mysql.TypeDouble: - return ETReal - case mysql.TypeNewDecimal: - return ETDecimal - case mysql.TypeDate, mysql.TypeDatetime: - return ETDatetime - case mysql.TypeTimestamp: - return ETTimestamp - case mysql.TypeDuration: - return ETDuration - case mysql.TypeJSON: - return ETJson - } - return ETString -} - -// Hybrid checks whether a type is a hybrid type, which can represent different types of value in specific context. -func (ft *FieldType) Hybrid() bool { - return ft.Tp == mysql.TypeEnum || ft.Tp == mysql.TypeBit || ft.Tp == mysql.TypeSet -} - -// Init initializes the FieldType data. -func (ft *FieldType) Init(tp byte) { - ft.Tp = tp - ft.Flen = UnspecifiedLength - ft.Decimal = UnspecifiedLength -} - -// CompactStr only considers Tp/CharsetBin/Flen/Deimal. -// This is used for showing column type in infoschema. -func (ft *FieldType) CompactStr() string { - ts := TypeToStr(ft.Tp, ft.Charset) - suffix := "" - - defaultFlen, defaultDecimal := mysql.GetDefaultFieldLengthAndDecimal(ft.Tp) - isFlenNotDefault := ft.Flen != defaultFlen && ft.Flen != 0 && ft.Flen != UnspecifiedLength - isDecimalNotDefault := ft.Decimal != defaultDecimal && ft.Decimal != 0 && ft.Decimal != UnspecifiedLength - - // displayFlen and displayDecimal are flen and decimal values with `-1` substituted with default value. - displayFlen, displayDecimal := ft.Flen, ft.Decimal - if displayFlen == 0 || displayFlen == UnspecifiedLength { - displayFlen = defaultFlen - } - if displayDecimal == 0 || displayDecimal == UnspecifiedLength { - displayDecimal = defaultDecimal - } - - switch ft.Tp { - case mysql.TypeEnum, mysql.TypeSet: - // Format is ENUM ('e1', 'e2') or SET ('e1', 'e2') - es := make([]string, 0, len(ft.Elems)) - for _, e := range ft.Elems { - e = format.OutputFormat(e) - es = append(es, e) - } - suffix = fmt.Sprintf("('%s')", strings.Join(es, "','")) - case mysql.TypeTimestamp, mysql.TypeDatetime, mysql.TypeDuration: - if isDecimalNotDefault { - suffix = fmt.Sprintf("(%d)", displayDecimal) - } - case mysql.TypeDouble, mysql.TypeFloat: - // 1. Flen Not Default, Decimal Not Default -> Valid - // 2. Flen Not Default, Decimal Default (-1) -> Invalid - // 3. Flen Default, Decimal Not Default -> Valid - // 4. Flen Default, Decimal Default -> Valid (hide) - if isDecimalNotDefault { - suffix = fmt.Sprintf("(%d,%d)", displayFlen, displayDecimal) - } - case mysql.TypeNewDecimal: - if isFlenNotDefault || isDecimalNotDefault { - suffix = fmt.Sprintf("(%d", displayFlen) - if isDecimalNotDefault { - suffix += fmt.Sprintf(",%d", displayDecimal) - } - suffix += ")" - } - case mysql.TypeBit, mysql.TypeShort, mysql.TypeTiny, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong, mysql.TypeVarchar, mysql.TypeString, mysql.TypeVarString: - // Flen is always shown. - suffix = fmt.Sprintf("(%d)", displayFlen) - } - return ts + suffix -} - -// InfoSchemaStr joins the CompactStr with unsigned flag and -// returns a string. -func (ft *FieldType) InfoSchemaStr() string { - suffix := "" - if mysql.HasUnsignedFlag(ft.Flag) { - suffix = " unsigned" - } - return ft.CompactStr() + suffix -} - -// String joins the information of FieldType and returns a string. -// Note: when flen or decimal is unspecified, this function will use the default value instead of -1. -func (ft *FieldType) String() string { - strs := []string{ft.CompactStr()} - if mysql.HasUnsignedFlag(ft.Flag) { - strs = append(strs, "UNSIGNED") - } - if mysql.HasZerofillFlag(ft.Flag) { - strs = append(strs, "ZEROFILL") - } - if mysql.HasBinaryFlag(ft.Flag) && ft.Tp != mysql.TypeString { - strs = append(strs, "BINARY") - } - - if IsTypeChar(ft.Tp) || IsTypeBlob(ft.Tp) { - if ft.Charset != "" && ft.Charset != charset.CharsetBin { - strs = append(strs, fmt.Sprintf("CHARACTER SET %s", ft.Charset)) - } - if ft.Collate != "" && ft.Collate != charset.CharsetBin { - strs = append(strs, fmt.Sprintf("COLLATE %s", ft.Collate)) - } - } - - return strings.Join(strs, " ") -} - -// FormatAsCastType is used for write AST back to string. -func (ft *FieldType) FormatAsCastType(w io.Writer) { - switch ft.Tp { - case mysql.TypeVarString: - if ft.Charset == charset.CharsetBin && ft.Collate == charset.CollationBin { - fmt.Fprint(w, "BINARY") - } else { - fmt.Fprint(w, "CHAR") - } - if ft.Flen != UnspecifiedLength { - fmt.Fprintf(w, "(%d)", ft.Flen) - } - if ft.Flag&mysql.BinaryFlag != 0 { - fmt.Fprint(w, " BINARY") - } - if ft.Charset != charset.CharsetBin && ft.Charset != charset.CharsetUTF8 { - fmt.Fprintf(w, " %s", ft.Charset) - } - case mysql.TypeDate: - fmt.Fprint(w, "DATE") - case mysql.TypeDatetime: - fmt.Fprint(w, "DATETIME") - if ft.Decimal > 0 { - fmt.Fprintf(w, "(%d)", ft.Decimal) - } - case mysql.TypeNewDecimal: - fmt.Fprint(w, "DECIMAL") - if ft.Flen > 0 && ft.Decimal > 0 { - fmt.Fprintf(w, "(%d, %d)", ft.Flen, ft.Decimal) - } else if ft.Flen > 0 { - fmt.Fprintf(w, "(%d)", ft.Flen) - } - case mysql.TypeDuration: - fmt.Fprint(w, "TIME") - if ft.Decimal > 0 { - fmt.Fprintf(w, "(%d)", ft.Decimal) - } - case mysql.TypeLonglong: - if ft.Flag&mysql.UnsignedFlag != 0 { - fmt.Fprint(w, "UNSIGNED") - } else { - fmt.Fprint(w, "SIGNED") - } - case mysql.TypeJSON: - fmt.Fprint(w, "JSON") - } -} - -// DefaultParamTypeForValue returns the default FieldType for the parameterized value. -func DefaultParamTypeForValue(value interface{}, tp *FieldType) { - switch value.(type) { - case nil: - tp.Tp = mysql.TypeUnspecified - tp.Flen = UnspecifiedLength - tp.Decimal = UnspecifiedLength - default: - DefaultTypeForValue(value, tp) - } -} - -// DefaultTypeForValue returns the default FieldType for the value. -func DefaultTypeForValue(value interface{}, tp *FieldType) { - switch x := value.(type) { - case nil: - tp.Tp = mysql.TypeNull - tp.Flen = 0 - tp.Decimal = 0 - SetBinChsClnFlag(tp) - case bool: - tp.Tp = mysql.TypeLonglong - tp.Flen = 1 - tp.Decimal = 0 - tp.Flag |= mysql.IsBooleanFlag - SetBinChsClnFlag(tp) - case int: - tp.Tp = mysql.TypeLonglong - tp.Flen = len(strconv.FormatInt(int64(x), 10)) - tp.Decimal = 0 - SetBinChsClnFlag(tp) - case int64: - tp.Tp = mysql.TypeLonglong - tp.Flen = len(strconv.FormatInt(x, 10)) - tp.Decimal = 0 - SetBinChsClnFlag(tp) - case uint64: - tp.Tp = mysql.TypeLonglong - tp.Flag |= mysql.UnsignedFlag - tp.Flen = len(strconv.FormatUint(x, 10)) - tp.Decimal = 0 - SetBinChsClnFlag(tp) - case string: - tp.Tp = mysql.TypeVarString - // TODO: tp.Flen should be len(x) * 3 (max bytes length of CharsetUTF8) - tp.Flen = len(x) - tp.Decimal = UnspecifiedLength - tp.Charset = mysql.DefaultCharset - tp.Collate = mysql.DefaultCollationName - case float64: - tp.Tp = mysql.TypeDouble - s := strconv.FormatFloat(x, 'f', -1, 64) - tp.Flen = len(s) - tp.Decimal = UnspecifiedLength - SetBinChsClnFlag(tp) - case []byte: - tp.Tp = mysql.TypeBlob - tp.Flen = len(x) - tp.Decimal = UnspecifiedLength - SetBinChsClnFlag(tp) - case BitLiteral: - tp.Tp = mysql.TypeVarString - tp.Flen = len(x) - tp.Decimal = 0 - SetBinChsClnFlag(tp) - case HexLiteral: - tp.Tp = mysql.TypeVarString - tp.Flen = len(x) - tp.Decimal = 0 - tp.Flag |= mysql.UnsignedFlag - SetBinChsClnFlag(tp) - case BinaryLiteral: - tp.Tp = mysql.TypeBit - tp.Flen = len(x) * 8 - tp.Decimal = 0 - SetBinChsClnFlag(tp) - tp.Flag &= ^mysql.BinaryFlag - tp.Flag |= mysql.UnsignedFlag - case Time: - tp.Tp = x.Type - switch x.Type { - case mysql.TypeDate: - tp.Flen = mysql.MaxDateWidth - tp.Decimal = UnspecifiedLength - case mysql.TypeDatetime, mysql.TypeTimestamp: - tp.Flen = mysql.MaxDatetimeWidthNoFsp - if x.Fsp > DefaultFsp { // consider point('.') and the fractional part. - tp.Flen += x.Fsp + 1 - } - tp.Decimal = x.Fsp - } - SetBinChsClnFlag(tp) - case Duration: - tp.Tp = mysql.TypeDuration - tp.Flen = len(x.String()) - if x.Fsp > DefaultFsp { // consider point('.') and the fractional part. - tp.Flen = x.Fsp + 1 - } - tp.Decimal = x.Fsp - SetBinChsClnFlag(tp) - case *MyDecimal: - tp.Tp = mysql.TypeNewDecimal - tp.Flen = len(x.ToString()) - tp.Decimal = int(x.digitsFrac) - SetBinChsClnFlag(tp) - case Enum: - tp.Tp = mysql.TypeEnum - tp.Flen = len(x.Name) - tp.Decimal = UnspecifiedLength - SetBinChsClnFlag(tp) - case Set: - tp.Tp = mysql.TypeSet - tp.Flen = len(x.Name) - tp.Decimal = UnspecifiedLength - SetBinChsClnFlag(tp) - case json.BinaryJSON: - tp.Tp = mysql.TypeJSON - tp.Flen = UnspecifiedLength - tp.Decimal = 0 - tp.Charset = charset.CharsetBin - tp.Collate = charset.CollationBin - default: - tp.Tp = mysql.TypeUnspecified - tp.Flen = UnspecifiedLength - tp.Decimal = UnspecifiedLength - } -} - -// DefaultCharsetForType returns the default charset/collation for mysql type. -func DefaultCharsetForType(tp byte) (string, string) { - switch tp { - case mysql.TypeVarString, mysql.TypeString, mysql.TypeVarchar: - // Default charset for string types is utf8. - return mysql.DefaultCharset, mysql.DefaultCollationName - } - return charset.CharsetBin, charset.CollationBin -} - -// MergeFieldType merges two MySQL type to a new type. -// This is used in hybrid field type expression. -// For example "select case c when 1 then 2 when 2 then 'tidb' from t;" -// The result field type of the case expression is the merged type of the two when clause. -// See https://github.com/mysql/mysql-server/blob/5.7/sql/field.cc#L1042 -func MergeFieldType(a byte, b byte) byte { - ia := getFieldTypeIndex(a) - ib := getFieldTypeIndex(b) - return fieldTypeMergeRules[ia][ib] -} - -func getFieldTypeIndex(tp byte) int { - itp := int(tp) - if itp < fieldTypeTearFrom { - return itp - } - return fieldTypeTearFrom + itp - fieldTypeTearTo - 1 -} - -const ( - fieldTypeTearFrom = int(mysql.TypeBit) + 1 - fieldTypeTearTo = int(mysql.TypeJSON) - 1 - fieldTypeNum = fieldTypeTearFrom + (255 - fieldTypeTearTo) -) - -var fieldTypeMergeRules = [fieldTypeNum][fieldTypeNum]byte{ - /* mysql.TypeDecimal -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeNewDecimal, mysql.TypeNewDecimal, - //mysql.TypeShort mysql.TypeLong - mysql.TypeNewDecimal, mysql.TypeNewDecimal, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeDouble, mysql.TypeDouble, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeNewDecimal, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeDecimal, mysql.TypeDecimal, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<244> - mysql.TypeVarchar, - //mysql.TypeJSON - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeNewDecimal, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeTiny -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeNewDecimal, mysql.TypeTiny, - //mysql.TypeShort mysql.TypeLong - mysql.TypeShort, mysql.TypeLong, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeFloat, mysql.TypeDouble, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeTiny, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeLonglong, mysql.TypeInt24, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeTiny, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<244> - mysql.TypeVarchar, - //mysql.TypeJSON - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeNewDecimal, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeShort -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeNewDecimal, mysql.TypeShort, - //mysql.TypeShort mysql.TypeLong - mysql.TypeShort, mysql.TypeLong, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeFloat, mysql.TypeDouble, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeShort, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeLonglong, mysql.TypeInt24, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeShort, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<244> - mysql.TypeVarchar, - //mysql.TypeJSON - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeNewDecimal, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeLong -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeNewDecimal, mysql.TypeLong, - //mysql.TypeShort mysql.TypeLong - mysql.TypeLong, mysql.TypeLong, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeDouble, mysql.TypeDouble, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeLong, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeLonglong, mysql.TypeLong, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeLong, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<244> - mysql.TypeVarchar, - //mysql.TypeJSON - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeNewDecimal, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeFloat -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeDouble, mysql.TypeFloat, - //mysql.TypeShort mysql.TypeLong - mysql.TypeFloat, mysql.TypeDouble, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeFloat, mysql.TypeDouble, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeFloat, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeFloat, mysql.TypeFloat, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeFloat, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<244> - mysql.TypeVarchar, - //mysql.TypeJSON - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeDouble, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeDouble -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeDouble, mysql.TypeDouble, - //mysql.TypeShort mysql.TypeLong - mysql.TypeDouble, mysql.TypeDouble, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeDouble, mysql.TypeDouble, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeDouble, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeDouble, mysql.TypeDouble, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeDouble, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<244> - mysql.TypeVarchar, - //mysql.TypeJSON - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeDouble, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeNull -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeNewDecimal, mysql.TypeTiny, - //mysql.TypeShort mysql.TypeLong - mysql.TypeShort, mysql.TypeLong, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeFloat, mysql.TypeDouble, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeNull, mysql.TypeTimestamp, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeLonglong, mysql.TypeLonglong, - //mysql.TypeDate mysql.TypeTime - mysql.TypeDate, mysql.TypeDuration, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeDatetime, mysql.TypeYear, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeNewDate, mysql.TypeVarchar, - //mysql.TypeBit <16>-<244> - mysql.TypeBit, - //mysql.TypeJSON - mysql.TypeJSON, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeNewDecimal, mysql.TypeEnum, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeSet, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeGeometry, - }, - /* mysql.TypeTimestamp -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeShort mysql.TypeLong - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeTimestamp, mysql.TypeTimestamp, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDate mysql.TypeTime - mysql.TypeDatetime, mysql.TypeDatetime, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeDatetime, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeNewDate, mysql.TypeVarchar, - //mysql.TypeBit <16>-<244> - mysql.TypeVarchar, - //mysql.TypeJSON - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeLonglong -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeNewDecimal, mysql.TypeLonglong, - //mysql.TypeShort mysql.TypeLong - mysql.TypeLonglong, mysql.TypeLonglong, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeDouble, mysql.TypeDouble, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeLonglong, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeLonglong, mysql.TypeLong, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeLonglong, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeNewDate, mysql.TypeVarchar, - //mysql.TypeBit <16>-<244> - mysql.TypeVarchar, - //mysql.TypeJSON - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeNewDecimal, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeInt24 -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeNewDecimal, mysql.TypeInt24, - //mysql.TypeShort mysql.TypeLong - mysql.TypeInt24, mysql.TypeLong, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeFloat, mysql.TypeDouble, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeInt24, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeLonglong, mysql.TypeInt24, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeInt24, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeNewDate, mysql.TypeVarchar, - //mysql.TypeBit <16>-<244> - mysql.TypeVarchar, - //mysql.TypeJSON - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeNewDecimal, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeDate -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeShort mysql.TypeLong - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeDate, mysql.TypeDatetime, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDate mysql.TypeTime - mysql.TypeDate, mysql.TypeDatetime, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeDatetime, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeNewDate, mysql.TypeVarchar, - //mysql.TypeBit <16>-<244> - mysql.TypeVarchar, - //mysql.TypeJSON - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeTime -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeShort mysql.TypeLong - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeDuration, mysql.TypeDatetime, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDate mysql.TypeTime - mysql.TypeDatetime, mysql.TypeDuration, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeDatetime, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeNewDate, mysql.TypeVarchar, - //mysql.TypeBit <16>-<244> - mysql.TypeVarchar, - //mysql.TypeJSON - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeDatetime -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeShort mysql.TypeLong - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeDatetime, mysql.TypeDatetime, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDate mysql.TypeTime - mysql.TypeDatetime, mysql.TypeDatetime, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeDatetime, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeNewDate, mysql.TypeVarchar, - //mysql.TypeBit <16>-<244> - mysql.TypeVarchar, - //mysql.TypeJSON - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeYear -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeDecimal, mysql.TypeTiny, - //mysql.TypeShort mysql.TypeLong - mysql.TypeShort, mysql.TypeLong, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeFloat, mysql.TypeDouble, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeYear, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeLonglong, mysql.TypeInt24, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeYear, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<244> - mysql.TypeVarchar, - //mysql.TypeJSON - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeNewDecimal, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeNewDate -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeShort mysql.TypeLong - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeNewDate, mysql.TypeDatetime, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDate mysql.TypeTime - mysql.TypeNewDate, mysql.TypeDatetime, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeDatetime, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeNewDate, mysql.TypeVarchar, - //mysql.TypeBit <16>-<244> - mysql.TypeVarchar, - //mysql.TypeJSON - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeVarchar -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeShort mysql.TypeLong - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<244> - mysql.TypeVarchar, - //mysql.TypeJSON - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeVarchar, mysql.TypeVarchar, - }, - /* mysql.TypeBit -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeShort mysql.TypeLong - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeBit, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<244> - mysql.TypeBit, - //mysql.TypeJSON - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeJSON -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeShort mysql.TypeLong - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNewFloat mysql.TypeDouble - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeJSON, mysql.TypeVarchar, - //mysql.TypeLongLONG mysql.TypeInt24 - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDate MYSQL_TYPE_TIME - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime MYSQL_TYPE_YEAR - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<244> - mysql.TypeVarchar, - //mysql.TypeJSON - mysql.TypeJSON, - //mysql.TypeNewDecimal MYSQL_TYPE_ENUM - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeLongBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeLongBlob, mysql.TypeVarchar, - //mysql.TypeString MYSQL_TYPE_GEOMETRY - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeNewDecimal -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeNewDecimal, mysql.TypeNewDecimal, - //mysql.TypeShort mysql.TypeLong - mysql.TypeNewDecimal, mysql.TypeNewDecimal, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeDouble, mysql.TypeDouble, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeNewDecimal, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeNewDecimal, mysql.TypeNewDecimal, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeNewDecimal, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<244> - mysql.TypeVarchar, - //mysql.TypeJSON - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeNewDecimal, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeEnum -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeShort mysql.TypeLong - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeEnum, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<244> - mysql.TypeVarchar, - //mysql.TypeJSON - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeSet -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeShort mysql.TypeLong - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeSet, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<244> - mysql.TypeVarchar, - //mysql.TypeJSON - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeTinyBlob -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeTinyBlob, mysql.TypeTinyBlob, - //mysql.TypeShort mysql.TypeLong - mysql.TypeTinyBlob, mysql.TypeTinyBlob, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeTinyBlob, mysql.TypeTinyBlob, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeTinyBlob, mysql.TypeTinyBlob, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeTinyBlob, mysql.TypeTinyBlob, - //mysql.TypeDate mysql.TypeTime - mysql.TypeTinyBlob, mysql.TypeTinyBlob, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeTinyBlob, mysql.TypeTinyBlob, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeTinyBlob, mysql.TypeTinyBlob, - //mysql.TypeBit <16>-<244> - mysql.TypeTinyBlob, - //mysql.TypeJSON - mysql.TypeLongBlob, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeTinyBlob, mysql.TypeTinyBlob, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeTinyBlob, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeTinyBlob, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeTinyBlob, mysql.TypeTinyBlob, - }, - /* mysql.TypeMediumBlob -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeMediumBlob, mysql.TypeMediumBlob, - //mysql.TypeShort mysql.TypeLong - mysql.TypeMediumBlob, mysql.TypeMediumBlob, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeMediumBlob, mysql.TypeMediumBlob, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeMediumBlob, mysql.TypeMediumBlob, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeMediumBlob, mysql.TypeMediumBlob, - //mysql.TypeDate mysql.TypeTime - mysql.TypeMediumBlob, mysql.TypeMediumBlob, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeMediumBlob, mysql.TypeMediumBlob, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeMediumBlob, mysql.TypeMediumBlob, - //mysql.TypeBit <16>-<244> - mysql.TypeMediumBlob, - //mysql.TypeJSON - mysql.TypeLongBlob, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeMediumBlob, mysql.TypeMediumBlob, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeMediumBlob, mysql.TypeMediumBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeMediumBlob, mysql.TypeMediumBlob, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeMediumBlob, mysql.TypeMediumBlob, - }, - /* mysql.TypeLongBlob -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeShort mysql.TypeLong - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeDate mysql.TypeTime - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeBit <16>-<244> - mysql.TypeLongBlob, - //mysql.TypeJSON - mysql.TypeLongBlob, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeLongBlob, mysql.TypeLongBlob, - }, - /* mysql.TypeBlob -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeBlob, mysql.TypeBlob, - //mysql.TypeShort mysql.TypeLong - mysql.TypeBlob, mysql.TypeBlob, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeBlob, mysql.TypeBlob, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeBlob, mysql.TypeBlob, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeBlob, mysql.TypeBlob, - //mysql.TypeDate mysql.TypeTime - mysql.TypeBlob, mysql.TypeBlob, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeBlob, mysql.TypeBlob, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeBlob, mysql.TypeBlob, - //mysql.TypeBit <16>-<244> - mysql.TypeBlob, - //mysql.TypeJSON - mysql.TypeLongBlob, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeBlob, mysql.TypeBlob, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeBlob, mysql.TypeBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeBlob, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeBlob, mysql.TypeBlob, - }, - /* mysql.TypeVarString -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeShort mysql.TypeLong - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<244> - mysql.TypeVarchar, - //mysql.TypeJSON - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeVarchar, mysql.TypeVarchar, - }, - /* mysql.TypeString -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeString, mysql.TypeString, - //mysql.TypeShort mysql.TypeLong - mysql.TypeString, mysql.TypeString, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeString, mysql.TypeString, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeString, mysql.TypeString, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeString, mysql.TypeString, - //mysql.TypeDate mysql.TypeTime - mysql.TypeString, mysql.TypeString, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeString, mysql.TypeString, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeString, mysql.TypeVarchar, - //mysql.TypeBit <16>-<244> - mysql.TypeString, - //mysql.TypeJSON - mysql.TypeString, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeString, mysql.TypeString, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeString, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeString, - }, - /* mysql.TypeGeometry -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeShort mysql.TypeLong - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeGeometry, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<244> - mysql.TypeVarchar, - //mysql.TypeJSON - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeGeometry, - }, -} - -// SetBinChsClnFlag sets charset, collation as 'binary' and adds binaryFlag to FieldType. -func SetBinChsClnFlag(ft *FieldType) { - ft.Charset = charset.CharsetBin - ft.Collate = charset.CollationBin - ft.Flag |= mysql.BinaryFlag -} diff --git a/vendor/github.com/pingcap/tidb/types/fsp.go b/vendor/github.com/pingcap/tidb/types/fsp.go deleted file mode 100644 index f962a4d..0000000 --- a/vendor/github.com/pingcap/tidb/types/fsp.go +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -import ( - "math" - "strconv" - "strings" - - "github.com/juju/errors" -) - -const ( - // UnspecifiedFsp is the unspecified fractional seconds part. - UnspecifiedFsp = -1 - // MaxFsp is the maximum digit of fractional seconds part. - MaxFsp = 6 - // MinFsp is the minimum digit of fractional seconds part. - MinFsp = 0 - // DefaultFsp is the default digit of fractional seconds part. - // MySQL use 0 as the default Fsp. - DefaultFsp = 0 -) - -// CheckFsp checks whether fsp is in valid range. -func CheckFsp(fsp int) (int, error) { - if fsp == UnspecifiedFsp { - return DefaultFsp, nil - } - if fsp < MinFsp || fsp > MaxFsp { - return DefaultFsp, errors.Errorf("Invalid fsp %d", fsp) - } - return fsp, nil -} - -// ParseFrac parses the input string according to fsp, returns the microsecond, -// and also a bool value to indice overflow. eg: -// "999" fsp=2 will overflow. -func ParseFrac(s string, fsp int) (v int, overflow bool, err error) { - if len(s) == 0 { - return 0, false, nil - } - - fsp, err = CheckFsp(fsp) - if err != nil { - return 0, false, errors.Trace(err) - } - - if fsp >= len(s) { - tmp, e := strconv.ParseInt(s, 10, 64) - if e != nil { - return 0, false, errors.Trace(e) - } - v = int(float64(tmp) * math.Pow10(MaxFsp-len(s))) - return - } - - // Round when fsp < string length. - tmp, e := strconv.ParseInt(s[:fsp+1], 10, 64) - if e != nil { - return 0, false, errors.Trace(e) - } - tmp = (tmp + 5) / 10 - - if float64(tmp) >= math.Pow10(fsp) { - // overflow - return 0, true, nil - } - - // Get the final frac, with 6 digit number - // 1236 round 3 -> 124 -> 124000 - // 0312 round 2 -> 3 -> 30000 - // 999 round 2 -> 100 -> overflow - v = int(float64(tmp) * math.Pow10(MaxFsp-fsp)) - return -} - -// alignFrac is used to generate alignment frac, like `100` -> `100000` -func alignFrac(s string, fsp int) string { - sl := len(s) - if sl < fsp { - return s + strings.Repeat("0", fsp-sl) - } - - return s -} diff --git a/vendor/github.com/pingcap/tidb/types/helper.go b/vendor/github.com/pingcap/tidb/types/helper.go deleted file mode 100644 index 9b4734f..0000000 --- a/vendor/github.com/pingcap/tidb/types/helper.go +++ /dev/null @@ -1,194 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -import ( - "math" - "strings" - "unicode" - - "github.com/juju/errors" -) - -// RoundFloat rounds float val to the nearest integer value with float64 format, like MySQL Round function. -// RoundFloat uses default rounding mode, see https://dev.mysql.com/doc/refman/5.7/en/precision-math-rounding.html -// so rounding use "round half away from zero". -// e.g, 1.5 -> 2, -1.5 -> -2. -func RoundFloat(f float64) float64 { - if math.Abs(f) < 0.5 { - return 0 - } - - return math.Trunc(f + math.Copysign(0.5, f)) -} - -// Round rounds the argument f to dec decimal places. -// dec defaults to 0 if not specified. dec can be negative -// to cause dec digits left of the decimal point of the -// value f to become zero. -func Round(f float64, dec int) float64 { - shift := math.Pow10(dec) - tmp := f * shift - if math.IsInf(tmp, 0) { - return f - } - return RoundFloat(tmp) / shift -} - -// Truncate truncates the argument f to dec decimal places. -// dec defaults to 0 if not specified. dec can be negative -// to cause dec digits left of the decimal point of the -// value f to become zero. -func Truncate(f float64, dec int) float64 { - shift := math.Pow10(dec) - tmp := f * shift - if math.IsInf(tmp, 0) { - return f - } - return math.Trunc(tmp) / shift -} - -func getMaxFloat(flen int, decimal int) float64 { - intPartLen := flen - decimal - f := math.Pow10(intPartLen) - f -= math.Pow10(-decimal) - return f -} - -// TruncateFloat tries to truncate f. -// If the result exceeds the max/min float that flen/decimal allowed, returns the max/min float allowed. -func TruncateFloat(f float64, flen int, decimal int) (float64, error) { - if math.IsNaN(f) { - // nan returns 0 - return 0, ErrOverflow.GenByArgs("DOUBLE", "") - } - - maxF := getMaxFloat(flen, decimal) - - if !math.IsInf(f, 0) { - f = Round(f, decimal) - } - - var err error - if f > maxF { - f = maxF - err = ErrOverflow.GenByArgs("DOUBLE", "") - } else if f < -maxF { - f = -maxF - err = ErrOverflow.GenByArgs("DOUBLE", "") - } - - return f, errors.Trace(err) -} - -func isSpace(c byte) bool { - return c == ' ' || c == '\t' -} - -func isDigit(c byte) bool { - return c >= '0' && c <= '9' -} - -func myMax(a, b int) int { - if a > b { - return a - } - return b -} - -func myMaxInt8(a, b int8) int8 { - if a > b { - return a - } - return b -} - -func myMin(a, b int) int { - if a < b { - return a - } - return b -} - -func myMinInt8(a, b int8) int8 { - if a < b { - return a - } - return b -} - -const ( - maxUint = uint64(math.MaxUint64) - uintCutOff = maxUint/uint64(10) + 1 - intCutOff = uint64(math.MaxInt64) + 1 -) - -// strToInt converts a string to an integer in best effort. -func strToInt(str string) (int64, error) { - str = strings.TrimSpace(str) - if len(str) == 0 { - return 0, ErrTruncated - } - negative := false - i := 0 - if str[i] == '-' { - negative = true - i++ - } else if str[i] == '+' { - i++ - } - - var ( - err error - hasNum = false - ) - r := uint64(0) - for ; i < len(str); i++ { - if !unicode.IsDigit(rune(str[i])) { - err = ErrTruncated - break - } - hasNum = true - if r >= uintCutOff { - r = 0 - err = errors.Trace(ErrBadNumber) - break - } - r = r * uint64(10) - - r1 := r + uint64(str[i]-'0') - if r1 < r || r1 > maxUint { - r = 0 - err = errors.Trace(ErrBadNumber) - break - } - r = r1 - } - if !hasNum { - err = ErrTruncated - } - - if !negative && r >= intCutOff { - return math.MaxInt64, errors.Trace(ErrBadNumber) - } - - if negative && r > intCutOff { - return math.MinInt64, errors.Trace(ErrBadNumber) - } - - if negative { - r = -r - } - return int64(r), err -} diff --git a/vendor/github.com/pingcap/tidb/types/json/binary.go b/vendor/github.com/pingcap/tidb/types/json/binary.go deleted file mode 100644 index 0f403aa..0000000 --- a/vendor/github.com/pingcap/tidb/types/json/binary.go +++ /dev/null @@ -1,619 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package json - -import ( - "bytes" - "encoding/binary" - "encoding/json" - "fmt" - "math" - "reflect" - "sort" - "strconv" - "strings" - "unicode/utf8" - - "github.com/juju/errors" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/util/hack" -) - -/* - The binary JSON format from MySQL 5.7 is as follows: - - JSON doc ::= type value - type ::= - 0x01 | // large JSON object - 0x03 | // large JSON array - 0x04 | // literal (true/false/null) - 0x05 | // int16 - 0x06 | // uint16 - 0x07 | // int32 - 0x08 | // uint32 - 0x09 | // int64 - 0x0a | // uint64 - 0x0b | // double - 0x0c | // utf8mb4 string - - value ::= - object | - array | - literal | - number | - string | - - object ::= element-count size key-entry* value-entry* key* value* - - array ::= element-count size value-entry* value* - - // number of members in object or number of elements in array - element-count ::= uint32 - - // number of bytes in the binary representation of the object or array - size ::= uint32 - - key-entry ::= key-offset key-length - - key-offset ::= uint32 - - key-length ::= uint16 // key length must be less than 64KB - - value-entry ::= type offset-or-inlined-value - - // This field holds either the offset to where the value is stored, - // or the value itself if it is small enough to be inlined (that is, - // if it is a JSON literal or a small enough [u]int). - offset-or-inlined-value ::= uint32 - - key ::= utf8mb4-data - - literal ::= - 0x00 | // JSON null literal - 0x01 | // JSON true literal - 0x02 | // JSON false literal - - number ::= .... // little-endian format for [u]int(16|32|64), whereas - // double is stored in a platform-independent, eight-byte - // format using float8store() - - string ::= data-length utf8mb4-data - - data-length ::= uint8* // If the high bit of a byte is 1, the length - // field is continued in the next byte, - // otherwise it is the last byte of the length - // field. So we need 1 byte to represent - // lengths up to 127, 2 bytes to represent - // lengths up to 16383, and so on... -*/ - -// BinaryJSON represents a binary encoded JSON object. -// It can be randomly accessed without deserialization. -type BinaryJSON struct { - TypeCode TypeCode - Value []byte -} - -// String implements fmt.Stringer interface. -func (bj BinaryJSON) String() string { - out, err := bj.MarshalJSON() - terror.Log(err) - return string(out) -} - -// Copy makes a copy of the BinaryJSON -func (bj BinaryJSON) Copy() BinaryJSON { - buf := make([]byte, len(bj.Value)) - copy(buf, bj.Value) - return BinaryJSON{TypeCode: bj.TypeCode, Value: buf} -} - -// MarshalJSON implements the json.Marshaler interface. -func (bj BinaryJSON) MarshalJSON() ([]byte, error) { - buf := make([]byte, 0, len(bj.Value)*3/2) - return bj.marshalTo(buf) -} - -func (bj BinaryJSON) marshalTo(buf []byte) ([]byte, error) { - switch bj.TypeCode { - case TypeCodeString: - return marshalStringTo(buf, bj.GetString()), nil - case TypeCodeLiteral: - return marshalLiteralTo(buf, bj.Value[0]), nil - case TypeCodeInt64: - return strconv.AppendInt(buf, bj.GetInt64(), 10), nil - case TypeCodeUint64: - return strconv.AppendUint(buf, bj.GetUint64(), 10), nil - case TypeCodeFloat64: - return bj.marshalFloat64To(buf) - case TypeCodeArray: - return bj.marshalArrayTo(buf) - case TypeCodeObject: - return bj.marshalObjTo(buf) - } - return buf, nil -} - -// GetInt64 gets the int64 value. -func (bj BinaryJSON) GetInt64() int64 { - return int64(endian.Uint64(bj.Value)) -} - -// GetUint64 gets the uint64 value. -func (bj BinaryJSON) GetUint64() uint64 { - return endian.Uint64(bj.Value) -} - -// GetFloat64 gets the float64 value. -func (bj BinaryJSON) GetFloat64() float64 { - return math.Float64frombits(bj.GetUint64()) -} - -// GetString gets the string value. -func (bj BinaryJSON) GetString() []byte { - strLen, lenLen := uint64(bj.Value[0]), 1 - if strLen >= utf8.RuneSelf { - strLen, lenLen = binary.Uvarint(bj.Value) - } - return bj.Value[lenLen : lenLen+int(strLen)] -} - -func (bj BinaryJSON) getElemCount() int { - return int(endian.Uint32(bj.Value)) -} - -func (bj BinaryJSON) arrayGetElem(idx int) BinaryJSON { - return bj.valEntryGet(headerSize + idx*valEntrySize) -} - -func (bj BinaryJSON) objectGetKey(i int) []byte { - keyOff := int(endian.Uint32(bj.Value[headerSize+i*keyEntrySize:])) - keyLen := int(endian.Uint16(bj.Value[headerSize+i*keyEntrySize+keyLenOff:])) - return bj.Value[keyOff : keyOff+keyLen] -} - -func (bj BinaryJSON) objectGetVal(i int) BinaryJSON { - elemCount := bj.getElemCount() - return bj.valEntryGet(headerSize + elemCount*keyEntrySize + i*valEntrySize) -} - -func (bj BinaryJSON) valEntryGet(valEntryOff int) BinaryJSON { - tpCode := bj.Value[valEntryOff] - valOff := endian.Uint32(bj.Value[valEntryOff+valTypeSize:]) - switch tpCode { - case TypeCodeLiteral: - return BinaryJSON{TypeCode: TypeCodeLiteral, Value: bj.Value[valEntryOff+valTypeSize : valEntryOff+valTypeSize+1]} - case TypeCodeUint64, TypeCodeInt64, TypeCodeFloat64: - return BinaryJSON{TypeCode: tpCode, Value: bj.Value[valOff : valOff+8]} - case TypeCodeString: - strLen, lenLen := uint64(bj.Value[valOff]), 1 - if strLen >= utf8.RuneSelf { - strLen, lenLen = binary.Uvarint(bj.Value[valOff:]) - } - totalLen := uint32(lenLen) + uint32(strLen) - return BinaryJSON{TypeCode: tpCode, Value: bj.Value[valOff : valOff+totalLen]} - } - dataSize := endian.Uint32(bj.Value[valOff+dataSizeOff:]) - return BinaryJSON{TypeCode: tpCode, Value: bj.Value[valOff : valOff+dataSize]} -} - -func (bj BinaryJSON) marshalFloat64To(buf []byte) ([]byte, error) { - // NOTE: copied from Go standard library. - f := bj.GetFloat64() - if math.IsInf(f, 0) || math.IsNaN(f) { - return buf, &json.UnsupportedValueError{Str: strconv.FormatFloat(f, 'g', -1, 64)} - } - - // Convert as if by ES6 number to string conversion. - // This matches most other JSON generators. - // See golang.org/issue/6384 and golang.org/issue/14135. - // Like fmt %g, but the exponent cutoffs are different - // and exponents themselves are not padded to two digits. - abs := math.Abs(f) - ffmt := byte('f') - // Note: Must use float32 comparisons for underlying float32 value to get precise cutoffs right. - if abs != 0 { - if abs < 1e-6 || abs >= 1e21 { - ffmt = 'e' - } - } - buf = strconv.AppendFloat(buf, f, ffmt, -1, 64) - if ffmt == 'e' { - // clean up e-09 to e-9 - n := len(buf) - if n >= 4 && buf[n-4] == 'e' && buf[n-3] == '-' && buf[n-2] == '0' { - buf[n-2] = buf[n-1] - buf = buf[:n-1] - } - } - return buf, nil -} - -func (bj BinaryJSON) marshalArrayTo(buf []byte) ([]byte, error) { - elemCount := int(endian.Uint32(bj.Value)) - buf = append(buf, '[') - for i := 0; i < elemCount; i++ { - if i != 0 { - buf = append(buf, ',') - } - var err error - buf, err = bj.arrayGetElem(i).marshalTo(buf) - if err != nil { - return nil, errors.Trace(err) - } - } - return append(buf, ']'), nil -} - -func (bj BinaryJSON) marshalObjTo(buf []byte) ([]byte, error) { - elemCount := int(endian.Uint32(bj.Value)) - buf = append(buf, '{') - for i := 0; i < elemCount; i++ { - if i != 0 { - buf = append(buf, ',') - } - buf = marshalStringTo(buf, bj.objectGetKey(i)) - buf = append(buf, ':') - var err error - buf, err = bj.objectGetVal(i).marshalTo(buf) - if err != nil { - return nil, errors.Trace(err) - } - } - return append(buf, '}'), nil -} - -func marshalStringTo(buf, s []byte) []byte { - // NOTE: copied from Go standard library. - // NOTE: keep in sync with string above. - buf = append(buf, '"') - start := 0 - for i := 0; i < len(s); { - if b := s[i]; b < utf8.RuneSelf { - if htmlSafeSet[b] { - i++ - continue - } - if start < i { - buf = append(buf, s[start:i]...) - } - switch b { - case '\\', '"': - buf = append(buf, '\\', b) - case '\n': - buf = append(buf, '\\', 'n') - case '\r': - buf = append(buf, '\\', 'r') - case '\t': - buf = append(buf, '\\', 't') - default: - // This encodes bytes < 0x20 except for \t, \n and \r. - // If escapeHTML is set, it also escapes <, >, and & - // because they can lead to security holes when - // user-controlled strings are rendered into JSON - // and served to some browsers. - buf = append(buf, `\u00`...) - buf = append(buf, hexChars[b>>4], hexChars[b&0xF]) - } - i++ - start = i - continue - } - c, size := utf8.DecodeRune(s[i:]) - if c == utf8.RuneError && size == 1 { - if start < i { - buf = append(buf, s[start:i]...) - } - buf = append(buf, `\ufffd`...) - i += size - start = i - continue - } - // U+2028 is LINE SEPARATOR. - // U+2029 is PARAGRAPH SEPARATOR. - // They are both technically valid characters in JSON strings, - // but don't work in JSONP, which has to be evaluated as JavaScript, - // and can lead to security holes there. It is valid JSON to - // escape them, so we do so unconditionally. - // See http://timelessrepo.com/json-isnt-a-javascript-subset for discussion. - if c == '\u2028' || c == '\u2029' { - if start < i { - buf = append(buf, s[start:i]...) - } - buf = append(buf, `\u202`...) - buf = append(buf, hexChars[c&0xF]) - i += size - start = i - continue - } - i += size - } - if start < len(s) { - buf = append(buf, s[start:]...) - } - buf = append(buf, '"') - return buf -} - -func (bj BinaryJSON) marshalValueEntryTo(buf []byte, entryOff int) ([]byte, error) { - tpCode := bj.Value[entryOff] - switch tpCode { - case TypeCodeLiteral: - buf = marshalLiteralTo(buf, bj.Value[entryOff+1]) - default: - offset := endian.Uint32(bj.Value[entryOff+1:]) - tmp := BinaryJSON{TypeCode: tpCode, Value: bj.Value[offset:]} - var err error - buf, err = tmp.marshalTo(buf) - if err != nil { - return nil, errors.Trace(err) - } - } - return buf, nil -} - -func marshalLiteralTo(b []byte, litType byte) []byte { - switch litType { - case LiteralFalse: - return append(b, "false"...) - case LiteralTrue: - return append(b, "true"...) - case LiteralNil: - return append(b, "null"...) - } - return b -} - -// ParseBinaryFromString parses a json from string. -func ParseBinaryFromString(s string) (bj BinaryJSON, err error) { - if len(s) == 0 { - err = ErrInvalidJSONText.GenByArgs("The document is empty") - return - } - if err = bj.UnmarshalJSON(hack.Slice(s)); err != nil { - err = ErrInvalidJSONText.GenByArgs(err) - } - return -} - -// UnmarshalJSON implements the json.Unmarshaler interface. -func (bj *BinaryJSON) UnmarshalJSON(data []byte) error { - var decoder = json.NewDecoder(bytes.NewReader(data)) - decoder.UseNumber() - var in interface{} - err := decoder.Decode(&in) - if err != nil { - return errors.Trace(err) - } - buf := make([]byte, 0, len(data)) - var typeCode TypeCode - typeCode, buf, err = appendBinary(buf, in) - if err != nil { - return errors.Trace(err) - } - bj.TypeCode = typeCode - bj.Value = buf - return nil -} - -// CreateBinary creates a BinaryJSON from interface. -func CreateBinary(in interface{}) BinaryJSON { - typeCode, buf, err := appendBinary(nil, in) - if err != nil { - panic(err) - } - return BinaryJSON{TypeCode: typeCode, Value: buf} -} - -func appendBinary(buf []byte, in interface{}) (TypeCode, []byte, error) { - var typeCode byte - var err error - switch x := in.(type) { - case nil: - typeCode = TypeCodeLiteral - buf = append(buf, LiteralNil) - case bool: - typeCode = TypeCodeLiteral - if x { - buf = append(buf, LiteralTrue) - } else { - buf = append(buf, LiteralFalse) - } - case int64: - typeCode = TypeCodeInt64 - buf = appendBinaryUint64(buf, uint64(x)) - case uint64: - typeCode = TypeCodeUint64 - buf = appendBinaryUint64(buf, x) - case float64: - typeCode = TypeCodeFloat64 - buf = appendBinaryFloat64(buf, x) - case json.Number: - typeCode, buf, err = appendBinaryNumber(buf, x) - if err != nil { - return typeCode, nil, errors.Trace(err) - } - case string: - typeCode = TypeCodeString - buf = appendBinaryString(buf, x) - case BinaryJSON: - typeCode = x.TypeCode - buf = append(buf, x.Value...) - case []interface{}: - typeCode = TypeCodeArray - buf, err = appendBinaryArray(buf, x) - if err != nil { - return typeCode, nil, errors.Trace(err) - } - case map[string]interface{}: - typeCode = TypeCodeObject - buf, err = appendBinaryObject(buf, x) - if err != nil { - return typeCode, nil, errors.Trace(err) - } - default: - msg := fmt.Sprintf(unknownTypeErrorMsg, reflect.TypeOf(in)) - err = errors.New(msg) - } - return typeCode, buf, err -} - -func appendZero(buf []byte, length int) []byte { - var tmp [8]byte - rem := length % 8 - loop := length / 8 - for i := 0; i < loop; i++ { - buf = append(buf, tmp[:]...) - } - for i := 0; i < rem; i++ { - buf = append(buf, 0) - } - return buf -} - -func appendUint32(buf []byte, v uint32) []byte { - var tmp [4]byte - endian.PutUint32(tmp[:], v) - return append(buf, tmp[:]...) -} - -func appendBinaryNumber(buf []byte, x json.Number) (TypeCode, []byte, error) { - var typeCode TypeCode - if strings.ContainsAny(string(x), "Ee.") { - typeCode = TypeCodeFloat64 - f64, err := x.Float64() - if err != nil { - return typeCode, nil, errors.Trace(err) - } - buf = appendBinaryFloat64(buf, f64) - } else { - typeCode = TypeCodeInt64 - i64, err := x.Int64() - if err != nil { - typeCode = TypeCodeFloat64 - f64, err := x.Float64() - if err != nil { - return typeCode, nil, errors.Trace(err) - } - buf = appendBinaryFloat64(buf, f64) - } else { - buf = appendBinaryUint64(buf, uint64(i64)) - } - } - return typeCode, buf, nil -} - -func appendBinaryString(buf []byte, v string) []byte { - begin := len(buf) - buf = appendZero(buf, binary.MaxVarintLen64) - lenLen := binary.PutUvarint(buf[begin:], uint64(len(v))) - buf = buf[:len(buf)-binary.MaxVarintLen64+lenLen] - buf = append(buf, v...) - return buf -} - -func appendBinaryFloat64(buf []byte, v float64) []byte { - off := len(buf) - buf = appendZero(buf, 8) - endian.PutUint64(buf[off:], math.Float64bits(v)) - return buf -} - -func appendBinaryUint64(buf []byte, v uint64) []byte { - off := len(buf) - buf = appendZero(buf, 8) - endian.PutUint64(buf[off:], v) - return buf -} - -func appendBinaryArray(buf []byte, array []interface{}) ([]byte, error) { - docOff := len(buf) - buf = appendUint32(buf, uint32(len(array))) - buf = appendZero(buf, dataSizeOff) - valEntryBegin := len(buf) - buf = appendZero(buf, len(array)*valEntrySize) - for i, val := range array { - var err error - buf, err = appendBinaryValElem(buf, docOff, valEntryBegin+i*valEntrySize, val) - if err != nil { - return nil, errors.Trace(err) - } - } - docSize := len(buf) - docOff - endian.PutUint32(buf[docOff+dataSizeOff:], uint32(docSize)) - return buf, nil -} - -func appendBinaryValElem(buf []byte, docOff, valEntryOff int, val interface{}) ([]byte, error) { - var typeCode TypeCode - var err error - elemDocOff := len(buf) - typeCode, buf, err = appendBinary(buf, val) - if err != nil { - return nil, errors.Trace(err) - } - switch typeCode { - case TypeCodeLiteral: - litCode := buf[elemDocOff] - buf = buf[:elemDocOff] - buf[valEntryOff] = TypeCodeLiteral - buf[valEntryOff+1] = litCode - return buf, nil - } - buf[valEntryOff] = typeCode - valOff := elemDocOff - docOff - endian.PutUint32(buf[valEntryOff+1:], uint32(valOff)) - return buf, nil -} - -type field struct { - key string - val interface{} -} - -func appendBinaryObject(buf []byte, x map[string]interface{}) ([]byte, error) { - docOff := len(buf) - buf = appendUint32(buf, uint32(len(x))) - buf = appendZero(buf, dataSizeOff) - keyEntryBegin := len(buf) - buf = appendZero(buf, len(x)*keyEntrySize) - valEntryBegin := len(buf) - buf = appendZero(buf, len(x)*valEntrySize) - - fields := make([]field, 0, len(x)) - for key, val := range x { - fields = append(fields, field{key: key, val: val}) - } - sort.Slice(fields, func(i, j int) bool { - return fields[i].key < fields[j].key - }) - for i, field := range fields { - keyEntryOff := keyEntryBegin + i*keyEntrySize - keyOff := len(buf) - docOff - keyLen := uint32(len(field.key)) - endian.PutUint32(buf[keyEntryOff:], uint32(keyOff)) - endian.PutUint16(buf[keyEntryOff+keyLenOff:], uint16(keyLen)) - buf = append(buf, field.key...) - } - for i, field := range fields { - var err error - buf, err = appendBinaryValElem(buf, docOff, valEntryBegin+i*valEntrySize, field.val) - if err != nil { - return nil, errors.Trace(err) - } - } - docSize := len(buf) - docOff - endian.PutUint32(buf[docOff+dataSizeOff:], uint32(docSize)) - return buf, nil -} diff --git a/vendor/github.com/pingcap/tidb/types/json/binary_functions.go b/vendor/github.com/pingcap/tidb/types/json/binary_functions.go deleted file mode 100644 index 4f9d58e..0000000 --- a/vendor/github.com/pingcap/tidb/types/json/binary_functions.go +++ /dev/null @@ -1,691 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package json - -import ( - "bytes" - "encoding/binary" - "encoding/hex" - "fmt" - "sort" - "unicode/utf8" - "unsafe" - - "github.com/juju/errors" - "github.com/pingcap/tidb/util/hack" -) - -// Type returns type of BinaryJSON as string. -func (bj BinaryJSON) Type() string { - switch bj.TypeCode { - case TypeCodeObject: - return "OBJECT" - case TypeCodeArray: - return "ARRAY" - case TypeCodeLiteral: - switch bj.Value[0] { - case LiteralNil: - return "NULL" - default: - return "BOOLEAN" - } - case TypeCodeInt64: - return "INTEGER" - case TypeCodeUint64: - return "UNSIGNED INTEGER" - case TypeCodeFloat64: - return "DOUBLE" - case TypeCodeString: - return "STRING" - default: - msg := fmt.Sprintf(unknownTypeCodeErrorMsg, bj.TypeCode) - panic(msg) - } -} - -// Unquote is for JSON_UNQUOTE. -func (bj BinaryJSON) Unquote() (string, error) { - switch bj.TypeCode { - case TypeCodeString: - s, err := unquoteString(hack.String(bj.GetString())) - if err != nil { - return "", errors.Trace(err) - } - // Remove prefix and suffix '"'. - slen := len(s) - if slen > 1 { - head, tail := s[0], s[slen-1] - if head == '"' && tail == '"' { - return s[1 : slen-1], nil - } - } - return s, nil - default: - return bj.String(), nil - } -} - -// unquoteString recognizes the escape sequences shown in: -// https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#json-unquote-character-escape-sequences -func unquoteString(s string) (string, error) { - ret := new(bytes.Buffer) - for i := 0; i < len(s); i++ { - if s[i] == '\\' { - i++ - if i == len(s) { - return "", errors.New("Missing a closing quotation mark in string") - } - switch s[i] { - case '"': - ret.WriteByte('"') - case 'b': - ret.WriteByte('\b') - case 'f': - ret.WriteByte('\f') - case 'n': - ret.WriteByte('\n') - case 'r': - ret.WriteByte('\r') - case 't': - ret.WriteByte('\t') - case '\\': - ret.WriteByte('\\') - case 'u': - if i+5 > len(s) { - return "", errors.Errorf("Invalid unicode: %s", s[i+1:]) - } - char, size, err := decodeEscapedUnicode(hack.Slice(s[i+1 : i+5])) - if err != nil { - return "", errors.Trace(err) - } - ret.Write(char[0:size]) - i += 5 - default: - // For all other escape sequences, backslash is ignored. - ret.WriteByte(s[i]) - } - } else { - ret.WriteByte(s[i]) - } - } - return ret.String(), nil -} - -// decodeEscapedUnicode decodes unicode into utf8 bytes specified in RFC 3629. -// According RFC 3629, the max length of utf8 characters is 4 bytes. -// And MySQL use 4 bytes to represent the unicode which must be in [0, 65536). -func decodeEscapedUnicode(s []byte) (char [4]byte, size int, err error) { - size, err = hex.Decode(char[0:2], s) - if err != nil || size != 2 { - // The unicode must can be represented in 2 bytes. - return char, 0, errors.Trace(err) - } - var unicode uint16 - err = binary.Read(bytes.NewReader(char[0:2]), binary.BigEndian, &unicode) - if err != nil { - return char, 0, errors.Trace(err) - } - size = utf8.RuneLen(rune(unicode)) - utf8.EncodeRune(char[0:size], rune(unicode)) - return -} - -// Extract receives several path expressions as arguments, matches them in bj, and returns: -// ret: target JSON matched any path expressions. maybe autowrapped as an array. -// found: true if any path expressions matched. -func (bj BinaryJSON) Extract(pathExprList []PathExpression) (ret BinaryJSON, found bool) { - buf := make([]BinaryJSON, 0, 1) - for _, pathExpr := range pathExprList { - buf = bj.extractTo(buf, pathExpr) - } - if len(buf) == 0 { - found = false - } else if len(pathExprList) == 1 && len(buf) == 1 { - // If pathExpr contains asterisks, len(elemList) won't be 1 - // even if len(pathExprList) equals to 1. - found = true - ret = buf[0] - } else { - found = true - ret = buildBinaryArray(buf) - } - return -} - -func (bj BinaryJSON) extractTo(buf []BinaryJSON, pathExpr PathExpression) []BinaryJSON { - if len(pathExpr.legs) == 0 { - return append(buf, bj) - } - currentLeg, subPathExpr := pathExpr.popOneLeg() - if currentLeg.typ == pathLegIndex { - if bj.TypeCode != TypeCodeArray { - if currentLeg.arrayIndex <= 0 { - buf = bj.extractTo(buf, subPathExpr) - } - return buf - } - elemCount := bj.getElemCount() - if currentLeg.arrayIndex == arrayIndexAsterisk { - for i := 0; i < elemCount; i++ { - buf = bj.arrayGetElem(i).extractTo(buf, subPathExpr) - } - } else if currentLeg.arrayIndex < elemCount { - buf = bj.arrayGetElem(currentLeg.arrayIndex).extractTo(buf, subPathExpr) - } - } else if currentLeg.typ == pathLegKey && bj.TypeCode == TypeCodeObject { - elemCount := bj.getElemCount() - if currentLeg.dotKey == "*" { - for i := 0; i < elemCount; i++ { - buf = bj.objectGetVal(i).extractTo(buf, subPathExpr) - } - } else { - child, ok := bj.objectSearchKey(hack.Slice(currentLeg.dotKey)) - if ok { - buf = child.extractTo(buf, subPathExpr) - } - } - } else if currentLeg.typ == pathLegDoubleAsterisk { - buf = bj.extractTo(buf, subPathExpr) - if bj.TypeCode == TypeCodeArray { - elemCount := bj.getElemCount() - for i := 0; i < elemCount; i++ { - buf = bj.arrayGetElem(i).extractTo(buf, pathExpr) - } - } else if bj.TypeCode == TypeCodeObject { - elemCount := bj.getElemCount() - for i := 0; i < elemCount; i++ { - buf = bj.objectGetVal(i).extractTo(buf, pathExpr) - } - } - } - return buf -} - -func (bj BinaryJSON) objectSearchKey(key []byte) (BinaryJSON, bool) { - elemCount := bj.getElemCount() - idx := sort.Search(elemCount, func(i int) bool { - return bytes.Compare(bj.objectGetKey(i), key) >= 0 - }) - if idx < elemCount && bytes.Compare(bj.objectGetKey(idx), key) == 0 { - return bj.objectGetVal(idx), true - } - return BinaryJSON{}, false -} - -func buildBinaryArray(elems []BinaryJSON) BinaryJSON { - totalSize := headerSize + len(elems)*valEntrySize - for _, elem := range elems { - if elem.TypeCode != TypeCodeLiteral { - totalSize += len(elem.Value) - } - } - buf := make([]byte, headerSize+len(elems)*valEntrySize, totalSize) - endian.PutUint32(buf, uint32(len(elems))) - endian.PutUint32(buf[dataSizeOff:], uint32(totalSize)) - buf = buildBinaryElements(buf, headerSize, elems) - return BinaryJSON{TypeCode: TypeCodeArray, Value: buf} -} - -func buildBinaryElements(buf []byte, entryStart int, elems []BinaryJSON) []byte { - for i, elem := range elems { - buf[entryStart+i*valEntrySize] = elem.TypeCode - if elem.TypeCode == TypeCodeLiteral { - buf[entryStart+i*valEntrySize+valTypeSize] = elem.Value[0] - } else { - endian.PutUint32(buf[entryStart+i*valEntrySize+valTypeSize:], uint32(len(buf))) - buf = append(buf, elem.Value...) - } - } - return buf -} - -func buildBinaryObject(keys [][]byte, elems []BinaryJSON) BinaryJSON { - totalSize := headerSize + len(elems)*(keyEntrySize+valEntrySize) - for i, elem := range elems { - if elem.TypeCode != TypeCodeLiteral { - totalSize += len(elem.Value) - } - totalSize += len(keys[i]) - } - buf := make([]byte, headerSize+len(elems)*(keyEntrySize+valEntrySize), totalSize) - endian.PutUint32(buf, uint32(len(elems))) - endian.PutUint32(buf[dataSizeOff:], uint32(totalSize)) - for i, key := range keys { - endian.PutUint32(buf[headerSize+i*keyEntrySize:], uint32(len(buf))) - endian.PutUint16(buf[headerSize+i*keyEntrySize+keyLenOff:], uint16(len(key))) - buf = append(buf, key...) - } - entryStart := headerSize + len(elems)*keyEntrySize - buf = buildBinaryElements(buf, entryStart, elems) - return BinaryJSON{TypeCode: TypeCodeObject, Value: buf} -} - -// Modify modifies a JSON object by insert, replace or set. -// All path expressions cannot contain * or ** wildcard. -// If any error occurs, the input won't be changed. -func (bj BinaryJSON) Modify(pathExprList []PathExpression, values []BinaryJSON, mt ModifyType) (retj BinaryJSON, err error) { - if len(pathExprList) != len(values) { - // TODO: should return 1582(42000) - return retj, errors.New("Incorrect parameter count") - } - for _, pathExpr := range pathExprList { - if pathExpr.flags.containsAnyAsterisk() { - // TODO: should return 3149(42000) - return retj, errors.New("Invalid path expression") - } - } - for i := 0; i < len(pathExprList); i++ { - pathExpr, value := pathExprList[i], values[i] - modifier := &binaryModifier{bj: bj} - switch mt { - case ModifyInsert: - bj = modifier.insert(pathExpr, value) - case ModifyReplace: - bj = modifier.replace(pathExpr, value) - case ModifySet: - bj = modifier.set(pathExpr, value) - } - } - return bj, nil -} - -// Remove removes the elements indicated by pathExprList from JSON. -func (bj BinaryJSON) Remove(pathExprList []PathExpression) (BinaryJSON, error) { - for _, pathExpr := range pathExprList { - if len(pathExpr.legs) == 0 { - // TODO: should return 3153(42000) - return bj, errors.New("Invalid path expression") - } - if pathExpr.flags.containsAnyAsterisk() { - // TODO: should return 3149(42000) - return bj, errors.New("Invalid path expression") - } - modifer := &binaryModifier{bj: bj} - bj = modifer.remove(pathExpr) - } - return bj, nil -} - -type binaryModifier struct { - bj BinaryJSON - modifyPtr *byte - modifyValue BinaryJSON -} - -func (bm *binaryModifier) set(path PathExpression, newBj BinaryJSON) BinaryJSON { - result := make([]BinaryJSON, 0, 1) - result = bm.bj.extractTo(result, path) - if len(result) > 0 { - bm.modifyPtr = &result[0].Value[0] - bm.modifyValue = newBj - return bm.rebuild() - } - bm.doInsert(path, newBj) - return bm.rebuild() -} - -func (bm *binaryModifier) replace(path PathExpression, newBj BinaryJSON) BinaryJSON { - result := make([]BinaryJSON, 0, 1) - result = bm.bj.extractTo(result, path) - if len(result) == 0 { - return bm.bj - } - bm.modifyPtr = &result[0].Value[0] - bm.modifyValue = newBj - return bm.rebuild() -} - -func (bm *binaryModifier) insert(path PathExpression, newBj BinaryJSON) BinaryJSON { - result := make([]BinaryJSON, 0, 1) - result = bm.bj.extractTo(result, path) - if len(result) > 0 { - return bm.bj - } - bm.doInsert(path, newBj) - return bm.rebuild() -} - -// doInsert inserts the newBj to its parent, and builds the new parent. -func (bm *binaryModifier) doInsert(path PathExpression, newBj BinaryJSON) { - parentPath, lastLeg := path.popOneLastLeg() - result := make([]BinaryJSON, 0, 1) - result = bm.bj.extractTo(result, parentPath) - if len(result) == 0 { - return - } - parentBj := result[0] - if lastLeg.typ == pathLegIndex { - bm.modifyPtr = &parentBj.Value[0] - if parentBj.TypeCode != TypeCodeArray { - bm.modifyValue = buildBinaryArray([]BinaryJSON{parentBj, newBj}) - return - } - elemCount := parentBj.getElemCount() - elems := make([]BinaryJSON, 0, elemCount+1) - for i := 0; i < elemCount; i++ { - elems = append(elems, parentBj.arrayGetElem(i)) - } - elems = append(elems, newBj) - bm.modifyValue = buildBinaryArray(elems) - return - } - if parentBj.TypeCode != TypeCodeObject { - return - } - bm.modifyPtr = &parentBj.Value[0] - elemCount := parentBj.getElemCount() - insertKey := hack.Slice(lastLeg.dotKey) - insertIdx := sort.Search(elemCount, func(i int) bool { - return bytes.Compare(parentBj.objectGetKey(i), insertKey) >= 0 - }) - keys := make([][]byte, 0, elemCount+1) - elems := make([]BinaryJSON, 0, elemCount+1) - for i := 0; i < elemCount; i++ { - if i == insertIdx { - keys = append(keys, insertKey) - elems = append(elems, newBj) - } - keys = append(keys, parentBj.objectGetKey(i)) - elems = append(elems, parentBj.objectGetVal(i)) - } - if insertIdx == elemCount { - keys = append(keys, insertKey) - elems = append(elems, newBj) - } - bm.modifyValue = buildBinaryObject(keys, elems) -} - -func (bm *binaryModifier) remove(path PathExpression) BinaryJSON { - result := make([]BinaryJSON, 0, 1) - result = bm.bj.extractTo(result, path) - if len(result) == 0 { - return bm.bj - } - bm.doRemove(path) - return bm.rebuild() -} - -func (bm *binaryModifier) doRemove(path PathExpression) { - parentPath, lastLeg := path.popOneLastLeg() - result := make([]BinaryJSON, 0, 1) - result = bm.bj.extractTo(result, parentPath) - if len(result) == 0 { - return - } - parentBj := result[0] - if lastLeg.typ == pathLegIndex { - if parentBj.TypeCode != TypeCodeArray { - return - } - bm.modifyPtr = &parentBj.Value[0] - elemCount := parentBj.getElemCount() - elems := make([]BinaryJSON, 0, elemCount-1) - for i := 0; i < elemCount; i++ { - if i != lastLeg.arrayIndex { - elems = append(elems, parentBj.arrayGetElem(i)) - } - } - bm.modifyValue = buildBinaryArray(elems) - return - } - if parentBj.TypeCode != TypeCodeObject { - return - } - bm.modifyPtr = &parentBj.Value[0] - elemCount := parentBj.getElemCount() - removeKey := hack.Slice(lastLeg.dotKey) - keys := make([][]byte, 0, elemCount+1) - elems := make([]BinaryJSON, 0, elemCount+1) - for i := 0; i < elemCount; i++ { - key := parentBj.objectGetKey(i) - if !bytes.Equal(key, removeKey) { - keys = append(keys, parentBj.objectGetKey(i)) - elems = append(elems, parentBj.objectGetVal(i)) - } - } - bm.modifyValue = buildBinaryObject(keys, elems) -} - -// rebuild merges the old and the modified JSON into a new BinaryJSON -func (bm *binaryModifier) rebuild() BinaryJSON { - buf := make([]byte, 0, len(bm.bj.Value)+len(bm.modifyValue.Value)) - value, tpCode := bm.rebuildTo(buf) - return BinaryJSON{TypeCode: tpCode, Value: value} -} - -func (bm *binaryModifier) rebuildTo(buf []byte) ([]byte, TypeCode) { - if bm.modifyPtr == &bm.bj.Value[0] { - bm.modifyPtr = nil - return append(buf, bm.modifyValue.Value...), bm.modifyValue.TypeCode - } else if bm.modifyPtr == nil { - return append(buf, bm.bj.Value...), bm.bj.TypeCode - } - bj := bm.bj - switch bj.TypeCode { - case TypeCodeLiteral, TypeCodeInt64, TypeCodeUint64, TypeCodeFloat64, TypeCodeString: - return append(buf, bj.Value...), bj.TypeCode - } - docOff := len(buf) - elemCount := bj.getElemCount() - var valEntryStart int - if bj.TypeCode == TypeCodeArray { - copySize := headerSize + elemCount*valEntrySize - valEntryStart = headerSize - buf = append(buf, bj.Value[:copySize]...) - } else { - copySize := headerSize + elemCount*(keyEntrySize+valEntrySize) - valEntryStart = headerSize + elemCount*keyEntrySize - buf = append(buf, bj.Value[:copySize]...) - if elemCount > 0 { - firstKeyOff := int(endian.Uint32(bj.Value[headerSize:])) - lastKeyOff := int(endian.Uint32(bj.Value[headerSize+(elemCount-1)*keyEntrySize:])) - lastKeyLen := int(endian.Uint16(bj.Value[headerSize+(elemCount-1)*keyEntrySize+keyLenOff:])) - buf = append(buf, bj.Value[firstKeyOff:lastKeyOff+lastKeyLen]...) - } - } - for i := 0; i < elemCount; i++ { - valEntryOff := valEntryStart + i*valEntrySize - elem := bj.valEntryGet(valEntryOff) - bm.bj = elem - var tpCode TypeCode - valOff := len(buf) - docOff - buf, tpCode = bm.rebuildTo(buf) - buf[docOff+valEntryOff] = tpCode - if tpCode == TypeCodeLiteral { - lastIdx := len(buf) - 1 - endian.PutUint32(buf[docOff+valEntryOff+valTypeSize:], uint32(buf[lastIdx])) - buf = buf[:lastIdx] - } else { - endian.PutUint32(buf[docOff+valEntryOff+valTypeSize:], uint32(valOff)) - } - } - endian.PutUint32(buf[docOff+dataSizeOff:], uint32(len(buf)-docOff)) - return buf, bj.TypeCode -} - -// floatEpsilon is the acceptable error quantity when comparing two float numbers. -const floatEpsilon = 1.e-8 - -// compareFloat64 returns an integer comparing the float64 x to y, -// allowing precision loss. -func compareFloat64PrecisionLoss(x, y float64) int { - if x-y < floatEpsilon && y-x < floatEpsilon { - return 0 - } else if x-y < 0 { - return -1 - } - return 1 -} - -// CompareBinary compares two binary json objects. Returns -1 if left < right, -// 0 if left == right, else returns 1. -func CompareBinary(left, right BinaryJSON) int { - precedence1 := jsonTypePrecedences[left.Type()] - precedence2 := jsonTypePrecedences[right.Type()] - var cmp int - if precedence1 == precedence2 { - if precedence1 == jsonTypePrecedences["NULL"] { - // for JSON null. - cmp = 0 - } - switch left.TypeCode { - case TypeCodeLiteral: - // false is less than true. - cmp = int(right.Value[0]) - int(left.Value[0]) - case TypeCodeInt64, TypeCodeUint64, TypeCodeFloat64: - leftFloat := i64AsFloat64(left.GetInt64(), left.TypeCode) - rightFloat := i64AsFloat64(right.GetInt64(), right.TypeCode) - cmp = compareFloat64PrecisionLoss(leftFloat, rightFloat) - case TypeCodeString: - cmp = bytes.Compare(left.GetString(), right.GetString()) - case TypeCodeArray: - leftCount := left.getElemCount() - rightCount := right.getElemCount() - for i := 0; i < leftCount && i < rightCount; i++ { - elem1 := left.arrayGetElem(i) - elem2 := right.arrayGetElem(i) - cmp = CompareBinary(elem1, elem2) - if cmp != 0 { - return cmp - } - } - cmp = leftCount - rightCount - case TypeCodeObject: - // only equal is defined on two json objects. - // larger and smaller are not defined. - cmp = bytes.Compare(left.Value, right.Value) - } - } else { - cmp = precedence1 - precedence2 - } - return cmp -} - -func i64AsFloat64(i64 int64, typeCode TypeCode) float64 { - switch typeCode { - case TypeCodeLiteral, TypeCodeInt64: - return float64(i64) - case TypeCodeUint64: - u64 := *(*uint64)(unsafe.Pointer(&i64)) - return float64(u64) - case TypeCodeFloat64: - return *(*float64)(unsafe.Pointer(&i64)) - default: - msg := fmt.Sprintf(unknownTypeCodeErrorMsg, typeCode) - panic(msg) - } -} - -// MergeBinary merges multiple BinaryJSON into one according the following rules: -// 1) adjacent arrays are merged to a single array; -// 2) adjacent object are merged to a single object; -// 3) a scalar value is autowrapped as an array before merge; -// 4) an adjacent array and object are merged by autowrapping the object as an array. -func MergeBinary(bjs []BinaryJSON) BinaryJSON { - var remain = bjs - var objects []BinaryJSON - var results []BinaryJSON - for len(remain) > 0 { - if remain[0].TypeCode != TypeCodeObject { - results = append(results, remain[0]) - remain = remain[1:] - } else { - objects, remain = getAdjacentObjects(remain) - results = append(results, mergeBinaryObject(objects)) - } - } - if len(results) == 1 { - return results[0] - } - return mergeBinaryArray(results) -} - -func getAdjacentObjects(bjs []BinaryJSON) (objects, remain []BinaryJSON) { - for i := 0; i < len(bjs); i++ { - if bjs[i].TypeCode != TypeCodeObject { - return bjs[:i], bjs[i:] - } - } - return bjs, nil -} - -func mergeBinaryArray(elems []BinaryJSON) BinaryJSON { - buf := make([]BinaryJSON, 0, len(elems)) - for i := 0; i < len(elems); i++ { - elem := elems[i] - if elem.TypeCode != TypeCodeArray { - buf = append(buf, elem) - } else { - childCount := elem.getElemCount() - for j := 0; j < childCount; j++ { - buf = append(buf, elem.arrayGetElem(j)) - } - } - } - return buildBinaryArray(buf) -} - -func mergeBinaryObject(objects []BinaryJSON) BinaryJSON { - keyValMap := make(map[string]BinaryJSON) - keys := make([][]byte, 0, len(keyValMap)) - for _, obj := range objects { - elemCount := obj.getElemCount() - for i := 0; i < elemCount; i++ { - key := obj.objectGetKey(i) - val := obj.objectGetVal(i) - if old, ok := keyValMap[string(key)]; ok { - keyValMap[string(key)] = MergeBinary([]BinaryJSON{old, val}) - } else { - keyValMap[string(key)] = val - keys = append(keys, key) - } - } - } - sort.Slice(keys, func(i, j int) bool { - return bytes.Compare(keys[i], keys[j]) < 0 - }) - values := make([]BinaryJSON, len(keys)) - for i, key := range keys { - values[i] = keyValMap[string(key)] - } - return buildBinaryObject(keys, values) -} - -// PeekBytesAsJSON trys to peek some bytes from b, until -// we can deserialize a JSON from those bytes. -func PeekBytesAsJSON(b []byte) (n int, err error) { - if len(b) <= 0 { - err = errors.New("Cant peek from empty bytes") - return - } - switch c := TypeCode(b[0]); c { - case TypeCodeObject, TypeCodeArray: - if len(b) >= valTypeSize+headerSize { - size := endian.Uint32(b[valTypeSize+dataSizeOff:]) - n = valTypeSize + int(size) - return - } - case TypeCodeString: - strLen, lenLen := binary.Uvarint(b[valTypeSize:]) - return valTypeSize + int(strLen) + lenLen, nil - case TypeCodeInt64, TypeCodeUint64, TypeCodeFloat64: - n = valTypeSize + 8 - return - case TypeCodeLiteral: - n = valTypeSize + 1 - return - } - err = errors.New("Invalid JSON bytes") - return -} diff --git a/vendor/github.com/pingcap/tidb/types/json/constants.go b/vendor/github.com/pingcap/tidb/types/json/constants.go deleted file mode 100644 index 83e2f4a..0000000 --- a/vendor/github.com/pingcap/tidb/types/json/constants.go +++ /dev/null @@ -1,223 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package json - -import ( - "encoding/binary" - "unicode/utf8" - - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" -) - -// TypeCode indicates JSON type. -type TypeCode = byte - -const ( - // TypeCodeObject indicates the JSON is an object. - TypeCodeObject TypeCode = 0x01 - // TypeCodeArray indicates the JSON is an array. - TypeCodeArray TypeCode = 0x03 - // TypeCodeLiteral indicates the JSON is a literal. - TypeCodeLiteral TypeCode = 0x04 - // TypeCodeInt64 indicates the JSON is a signed integer. - TypeCodeInt64 TypeCode = 0x09 - // TypeCodeUint64 indicates the JSON is a unsigned integer. - TypeCodeUint64 TypeCode = 0x0a - // TypeCodeFloat64 indicates the JSON is a double float number. - TypeCodeFloat64 TypeCode = 0x0b - // TypeCodeString indicates the JSON is a string. - TypeCodeString TypeCode = 0x0c -) - -const ( - // LiteralNil represents JSON null. - LiteralNil byte = 0x00 - // LiteralTrue represents JSON true. - LiteralTrue byte = 0x01 - // LiteralFalse represents JSON false. - LiteralFalse byte = 0x02 -) - -const unknownTypeCodeErrorMsg = "unknown type code: %d" -const unknownTypeErrorMsg = "unknown type: %s" - -// htmlSafeSet holds the value true if the ASCII character with the given -// array position can be safely represented inside a JSON string, embedded -// inside of HTML