// writeCmd sums values from the env (and possibly numeric constants) // and writes the value to the db. "c.endKey" here needs to be parsed // in the context of this command, which is a "+"-separated list of // keys from the env or numeric constants to sum. func writeCmd(c *cmd, txn *client.Txn, t *testing.T) error { sum := int64(0) for _, sp := range strings.Split(c.endKey, "+") { if constant, err := strconv.Atoi(sp); err != nil { sum += c.env[sp] } else { sum += int64(constant) } } err := txn.Put(c.getKey(), sum) c.debug = fmt.Sprintf("[%d]", sum) return err }
// incCmd adds one to the value of c.key in the env (as determined by // a previous read or write, or else assumed to be zero) and writes it // to the db. func incCmd(c *cmd, txn *client.Txn, t *testing.T) error { val, ok := c.env[c.key] if !ok { panic(fmt.Sprintf("can't increment key %q; not yet read", c.key)) } r := val + 1 if err := txn.Put(c.getKey(), r); err != nil { return err } c.env[c.key] = r c.debug = fmt.Sprintf("[%d]", r) return nil }
// Import loads some data in sstables into the database. Only the keys between // startKey and endKey are loaded. func Import( ctx context.Context, sst engine.RocksDBSstFileReader, txn *client.Txn, startKey, endKey engine.MVCCKey, ) error { var v roachpb.Value importFunc := func(kv engine.MVCCKeyValue) (bool, error) { v = roachpb.Value{RawBytes: kv.Value} v.ClearChecksum() if log.V(3) { log.Infof(ctx, "Put %s %s\n", kv.Key.Key, v.PrettyPrint()) } if err := txn.Put(kv.Key.Key, &v); err != nil { return true, err } return false, nil } return sst.Iterate(startKey, endKey, importFunc) }
func restoreTable( ctx context.Context, sst engine.RocksDBSstFileReader, txn *client.Txn, table *sqlbase.TableDescriptor, overwrite bool, ) error { log.Infof(ctx, "Restoring Table %q", table.Name) tableStartKey := roachpb.Key(sqlbase.MakeIndexKeyPrefix(table, table.PrimaryIndex.ID)) tableEndKey := tableStartKey.PrefixEnd() existingDesc, err := txn.Get(sqlbase.MakeDescMetadataKey(table.GetID())) if err != nil { return err } existingData, err := txn.Scan(tableStartKey, tableEndKey, 1) if err != nil { return err } if existingDesc.Value != nil || len(existingData) > 0 { if overwrite { // We're about to Put the descriptor, so don't bother deleting it. if err := txn.DelRange(tableStartKey, tableEndKey); err != nil { return err } } else { return errors.Errorf("table %q already exists", table.Name) } } tableDescKey := sqlbase.MakeDescMetadataKey(table.GetID()) if err := txn.Put(tableDescKey, sqlbase.WrapDescriptor(table)); err != nil { return err } return Import(ctx, sst, txn, engine.MVCCKey{Key: tableStartKey}, engine.MVCCKey{Key: tableEndKey}) }