func()

in nimo-full-check/checker/document-checker.go [294:349]


func (dc *DocumentChecker) checkOutline() error {
	// describe dynamodb table
	out, err := dc.sourceConn.DescribeTable(&dynamodb.DescribeTableInput{
		TableName: aws.String(dc.ns.Collection),
	})
	if err != nil {
		return fmt.Errorf("describe table failed[%v]", err)
	}

	LOG.Info("describe table[%v] result: %v", dc.ns.Collection, out)

	// 1. check total number
	// dynamo count
	dynamoCount := out.Table.ItemCount

	// mongo count
	cnt, err := dc.mongoClient.Client.Database(dc.ns.Database).Collection(dc.ns.Collection).CountDocuments(context.Background(), bson.M{})
	if err != nil {
		return fmt.Errorf("get mongo count failed[%v]", err)
	}

	if *dynamoCount != cnt {
		// return fmt.Errorf("dynamo count[%v] != mongo count[%v]", *dynamoCount, cnt)
		LOG.Warn("dynamo count[%v] != mongo count[%v]", *dynamoCount, cnt)
	}

	// set sampler
	dc.sampler = NewSample(conf.Opts.Sample, cnt)

	// 2. check index
	// TODO

	// parse index
	// parse primary key with sort key
	allIndexes := out.Table.AttributeDefinitions
	primaryIndexes := out.Table.KeySchema

	// parse index type
	parseMap := shakeUtils.ParseIndexType(allIndexes)
	primaryKey, sortKey, err := shakeUtils.ParsePrimaryAndSortKey(primaryIndexes, parseMap)
	if err != nil {
		return fmt.Errorf("parse primary and sort key failed[%v]", err)
	}
	dc.primaryKeyWithType = KeyUnion{
		name:  primaryKey,
		tp:    parseMap[primaryKey],
		union: fmt.Sprintf("%s.%s", primaryKey, parseMap[primaryKey]),
	}
	dc.sortKeyWithType = KeyUnion{
		name:  sortKey,
		tp:    parseMap[sortKey],
		union: fmt.Sprintf("%s.%s", sortKey, parseMap[sortKey]),
	}

	return nil
}