Documentation ¶
Overview ¶
Package topotools contains high level functions based on vt/topo and vt/actionnode. It should not depend on anything else that's higher level. In particular, it cannot depend on:
- vt/wrangler: much higher level, wrangler depends on topotools.
- vt/tabletmanager/initiator: we don't want the various remote protocol dependencies here.
topotools is used by wrangler, so it ends up in all tools using wrangler (vtctl, vtctld, ...). It is also included by vttablet, so it contains:
- most of the logic to create a shard / keyspace (tablet's init code)
- some of the logic to perform a TabletExternallyReparented (RPC call to master vttablet to let it know it's the master).
Index ¶
- func ChangeOwnType(ctx context.Context, ts topo.Server, oldTablet *topodatapb.Tablet, ...) (*topodatapb.Tablet, error)
- func ChangeType(ctx context.Context, ts topo.Server, tabletAlias *topodatapb.TabletAlias, ...) (*topodatapb.Tablet, error)
- func CheckOwnership(oldTablet, newTablet *topodatapb.Tablet) error
- func ConfigureTabletHook(hk *hook.Hook, tabletAlias *topodatapb.TabletAlias)
- func CopyMapKeys(m interface{}, typeHint interface{}) interface{}
- func CopyMapValues(m interface{}, typeHint interface{}) interface{}
- func DeleteTablet(ctx context.Context, ts topo.Server, tablet *topodatapb.Tablet) error
- func FindTabletByIPAddrAndPort(tabletMap map[topodatapb.TabletAlias]*topo.TabletInfo, addr, portName string, ...) (topodatapb.TabletAlias, error)
- func GetAllTablets(ctx context.Context, ts topo.Server, cell string) ([]*topo.TabletInfo, error)
- func GetAllTabletsAcrossCells(ctx context.Context, ts topo.Server) ([]*topo.TabletInfo, error)
- func MapKeys(m interface{}) []interface{}
- func RebuildKeyspace(ctx context.Context, log logutil.Logger, ts topo.Server, keyspace string, ...) (err error)
- func RebuildKeyspaceLocked(ctx context.Context, log logutil.Logger, ts topo.Server, keyspace string, ...) error
- func RebuildVSchema(ctx context.Context, log logutil.Logger, ts topo.Server, cells []string) error
- func RestartSlavesExternal(ts topo.Server, log logutil.Logger, ...)
- func SortedTabletMap(tabletMap map[topodatapb.TabletAlias]*topo.TabletInfo) (map[topodatapb.TabletAlias]*topo.TabletInfo, ...)
- type OverlappingShards
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ChangeOwnType ¶
func ChangeOwnType(ctx context.Context, ts topo.Server, oldTablet *topodatapb.Tablet, newType topodatapb.TabletType) (*topodatapb.Tablet, error)
ChangeOwnType is like ChangeType, except it fails if you no longer own the tablet record, as determined by CheckOwnership().
Note that oldTablet is only used for its Alias, and to call CheckOwnership(). Other fields in oldTablet have no effect on the update, which will read the latest tablet record before setting the type (just like ChangeType() does).
If successful, the updated tablet record is returned.
func ChangeType ¶
func ChangeType(ctx context.Context, ts topo.Server, tabletAlias *topodatapb.TabletAlias, newType topodatapb.TabletType) (*topodatapb.Tablet, error)
ChangeType changes the type of the tablet. Make this external, since these transitions need to be forced from time to time.
If successful, the updated tablet record is returned.
func CheckOwnership ¶
func CheckOwnership(oldTablet, newTablet *topodatapb.Tablet) error
CheckOwnership returns nil iff the IP and port match on oldTablet and newTablet, which implies that no other tablet process has taken over the record.
func ConfigureTabletHook ¶
func ConfigureTabletHook(hk *hook.Hook, tabletAlias *topodatapb.TabletAlias)
ConfigureTabletHook configures the right parameters for a hook running locally on a tablet.
func CopyMapKeys ¶
func CopyMapKeys(m interface{}, typeHint interface{}) interface{}
CopyMapKeys copies keys from from map m into a new slice with the type specified by typeHint. Reflection can't make a new slice type just based on the key type AFAICT.
func CopyMapValues ¶
func CopyMapValues(m interface{}, typeHint interface{}) interface{}
CopyMapValues copies values from from map m into a new slice with the type specified by typeHint. Reflection can't make a new slice type just based on the key type AFAICT.
func DeleteTablet ¶
DeleteTablet removes a tablet record from the topology: - the replication data record if any - the tablet record
func FindTabletByIPAddrAndPort ¶
func FindTabletByIPAddrAndPort(tabletMap map[topodatapb.TabletAlias]*topo.TabletInfo, addr, portName string, port int32) (topodatapb.TabletAlias, error)
FindTabletByIPAddrAndPort searches within a tablet map for tablets
func GetAllTablets ¶
GetAllTablets returns a sorted list of tablets.
func GetAllTabletsAcrossCells ¶
GetAllTabletsAcrossCells returns all tablets from known cells. If it returns topo.ErrPartialResult, then the list is valid, but partial.
func MapKeys ¶
func MapKeys(m interface{}) []interface{}
MapKeys returns an array with th provided map keys.
func RebuildKeyspace ¶
func RebuildKeyspace(ctx context.Context, log logutil.Logger, ts topo.Server, keyspace string, cells []string) (err error)
RebuildKeyspace rebuilds the serving graph data while locking out other changes.
func RebuildKeyspaceLocked ¶
func RebuildKeyspaceLocked(ctx context.Context, log logutil.Logger, ts topo.Server, keyspace string, cells []string) error
RebuildKeyspaceLocked should only be used with an action lock on the keyspace - otherwise the consistency of the serving graph data can't be guaranteed.
Take data from the global keyspace and rebuild the local serving copies in each cell.
func RebuildVSchema ¶
RebuildVSchema rebuilds the SrvVSchema for the provided cell list (or all cells if cell list is empty).
func RestartSlavesExternal ¶
func RestartSlavesExternal(ts topo.Server, log logutil.Logger, slaveTabletMap, masterTabletMap map[topodatapb.TabletAlias]*topo.TabletInfo, masterElectTabletAlias *topodatapb.TabletAlias, slaveWasRestarted func(*topo.TabletInfo, *topodatapb.TabletAlias) error)
RestartSlavesExternal will tell all the slaves in the provided list that they have a new master, and also tell all the masters. The masters will be scrapped if they don't answer. We execute all the actions in parallel.
func SortedTabletMap ¶
func SortedTabletMap(tabletMap map[topodatapb.TabletAlias]*topo.TabletInfo) (map[topodatapb.TabletAlias]*topo.TabletInfo, map[topodatapb.TabletAlias]*topo.TabletInfo)
SortedTabletMap returns two maps:
- The slaveMap contains all the non-master non-scrapped hosts. This can be used as a list of slaves to fix up for reparenting
- The masterMap contains all the tablets without parents (scrapped or not). This can be used to special case the old master, and any tablet in a weird state, left over, ...
Types ¶
type OverlappingShards ¶
OverlappingShards contains sets of shards that overlap which each-other. With this library, there is no guarantee of which set will be left or right.
func FindOverlappingShards ¶
func FindOverlappingShards(ctx context.Context, ts topo.Server, keyspace string) ([]*OverlappingShards, error)
FindOverlappingShards will return an array of OverlappingShards for the provided keyspace. We do not support more than two overlapping shards (for instance, having 40-80, 40-60 and 40-50 in the same keyspace is not supported and will return an error). If shards don't perfectly overlap, they are not returned.
func OverlappingShardsForShard ¶
func OverlappingShardsForShard(os []*OverlappingShards, shardName string) *OverlappingShards
OverlappingShardsForShard returns the OverlappingShards object from the list that has he provided shard, or nil
func (*OverlappingShards) ContainsShard ¶
func (os *OverlappingShards) ContainsShard(shardName string) bool
ContainsShard returns true if either Left or Right lists contain the provided Shard.