예제 #1
0
파일: srvshard.go 프로젝트: qinbo/vitess
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)
	}
}
예제 #2
0
파일: mysqlctl.go 프로젝트: qinbo/vitess
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)
	}
}
예제 #3
0
파일: srvshard.go 프로젝트: rudyLi/vitess
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)
	}
}