func (sk *SrvKeyspace) UnmarshalBson(buf *bytes.Buffer) { bson.Next(buf, 4) kind := bson.NextByte(buf) for kind != bson.EOO { keyName := bson.ReadCString(buf) switch keyName { case "Partitions": sk.Partitions = DecodeKeyspacePartitionMap(buf, kind) case "Shards": sk.Shards = DecodeSrvShardArray(buf, kind) case "TabletTypes": sk.TabletTypes = DecodeTabletTypeArray(buf, kind) case "ShardingColumnName": sk.ShardingColumnName = bson.DecodeString(buf, kind) case "ShardingColumnType": sk.ShardingColumnType = key.KeyspaceIdType(bson.DecodeString(buf, kind)) case "ServedFrom": sk.ServedFrom = DecodeServedFrom(buf, kind) default: panic(bson.NewBsonError("Unrecognized tag %s", keyName)) } kind = bson.NextByte(buf) } }
func multisnapshotCmd(mysqld *mysqlctl.Mysqld, subFlags *flag.FlagSet, args []string) { concurrency := subFlags.Int("concurrency", 8, "how many compression jobs to run simultaneously") spec := subFlags.String("spec", "-", "shard specification") tablesString := subFlags.String("tables", "", "dump only this comma separated list of tables") skipSlaveRestart := subFlags.Bool("skip-slave-restart", false, "after the snapshot is done, do not restart slave replication") maximumFilesize := subFlags.Uint64("maximum-file-size", 128*1024*1024, "the maximum size for an uncompressed data file") keyType := subFlags.String("key_type", "uint64", "type of the key column") subFlags.Parse(args) if subFlags.NArg() != 2 { log.Fatalf("action multisnapshot requires <db name> <key name>") } shards, err := key.ParseShardingSpec(*spec) if err != nil { log.Fatalf("multisnapshot failed: %v", err) } var tables []string if *tablesString != "" { tables = strings.Split(*tablesString, ",") } kit := key.KeyspaceIdType(*keyType) if !key.IsKeyspaceIdTypeInList(kit, key.AllKeyspaceIdTypes) { log.Fatalf("invalid key_type") } filenames, err := mysqld.CreateMultiSnapshot(shards, subFlags.Arg(0), subFlags.Arg(1), kit, tabletAddr, false, *concurrency, tables, *skipSlaveRestart, *maximumFilesize, nil) if err != nil { log.Fatalf("multisnapshot failed: %v", err) } else { log.Infof("manifest locations: %v", filenames) } }
func (sk *SrvKeyspace) UnmarshalBson(buf *bytes.Buffer, kind byte) { bson.VerifyObject(kind) bson.Next(buf, 4) kind = bson.NextByte(buf) for kind != bson.EOO { keyName := bson.ReadCString(buf) switch keyName { case "Partitions": sk.Partitions = DecodeKeyspacePartitionMap(buf, kind) case "Shards": sk.Shards = DecodeSrvShardArray(buf, kind) case "TabletTypes": sk.TabletTypes = DecodeTabletTypeArray(buf, kind) case "ShardingColumnName": sk.ShardingColumnName = bson.DecodeString(buf, kind) case "ShardingColumnType": sk.ShardingColumnType = key.KeyspaceIdType(bson.DecodeString(buf, kind)) case "ServedFrom": sk.ServedFrom = DecodeServedFrom(buf, kind) default: bson.Skip(buf, kind) } kind = bson.NextByte(buf) } }