1// Copyright 2021 The etcd Authors 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15package buckets 16 17import ( 18 "bytes" 19 20 "go.etcd.io/etcd/server/v3/mvcc/backend" 21) 22 23var ( 24 keyBucketName = []byte("key") 25 metaBucketName = []byte("meta") 26 leaseBucketName = []byte("lease") 27 alarmBucketName = []byte("alarm") 28 29 clusterBucketName = []byte("cluster") 30 31 membersBucketName = []byte("members") 32 membersRemovedBucketName = []byte("members_removed") 33 34 authBucketName = []byte("auth") 35 authUsersBucketName = []byte("authUsers") 36 authRolesBucketName = []byte("authRoles") 37 38 testBucketName = []byte("test") 39) 40 41var ( 42 Key = backend.Bucket(bucket{id: 1, name: keyBucketName, safeRangeBucket: true}) 43 Meta = backend.Bucket(bucket{id: 2, name: metaBucketName, safeRangeBucket: false}) 44 Lease = backend.Bucket(bucket{id: 3, name: leaseBucketName, safeRangeBucket: false}) 45 Alarm = backend.Bucket(bucket{id: 4, name: alarmBucketName, safeRangeBucket: false}) 46 Cluster = backend.Bucket(bucket{id: 5, name: clusterBucketName, safeRangeBucket: false}) 47 48 Members = backend.Bucket(bucket{id: 10, name: membersBucketName, safeRangeBucket: false}) 49 MembersRemoved = backend.Bucket(bucket{id: 11, name: membersRemovedBucketName, safeRangeBucket: false}) 50 51 Auth = backend.Bucket(bucket{id: 20, name: authBucketName, safeRangeBucket: false}) 52 AuthUsers = backend.Bucket(bucket{id: 21, name: authUsersBucketName, safeRangeBucket: false}) 53 AuthRoles = backend.Bucket(bucket{id: 22, name: authRolesBucketName, safeRangeBucket: false}) 54 55 Test = backend.Bucket(bucket{id: 100, name: testBucketName, safeRangeBucket: false}) 56) 57 58type bucket struct { 59 id backend.BucketID 60 name []byte 61 safeRangeBucket bool 62} 63 64func (b bucket) ID() backend.BucketID { return b.id } 65func (b bucket) Name() []byte { return b.name } 66func (b bucket) String() string { return string(b.Name()) } 67func (b bucket) IsSafeRangeBucket() bool { return b.safeRangeBucket } 68 69var ( 70 MetaConsistentIndexKeyName = []byte("consistent_index") 71 MetaTermKeyName = []byte("term") 72) 73 74// DefaultIgnores defines buckets & keys to ignore in hash checking. 75func DefaultIgnores(bucket, key []byte) bool { 76 // consistent index & term might be changed due to v2 internal sync, which 77 // is not controllable by the user. 78 return bytes.Compare(bucket, Meta.Name()) == 0 && 79 (bytes.Compare(key, MetaTermKeyName) == 0 || bytes.Compare(key, MetaConsistentIndexKeyName) == 0) 80} 81