swarm: schemas and migrations (#17813)

This commit is contained in:
Anton Evangelatov
2018-10-03 14:31:59 +02:00
committed by GitHub
parent 14bef9a2db
commit 303b99663e
7 changed files with 81 additions and 34 deletions

View File

@@ -184,3 +184,42 @@ func (ls *LocalStore) Iterator(from uint64, to uint64, po uint8, f func(Address,
func (ls *LocalStore) Close() {
ls.DbStore.Close()
}
// Migrate checks the datastore schema vs the runtime schema, and runs migrations if they don't match
func (ls *LocalStore) Migrate() error {
schema, err := ls.DbStore.GetSchema()
if err != nil {
log.Error(err.Error())
return err
}
log.Debug("found schema", "schema", schema, "runtime-schema", CurrentDbSchema)
if schema != CurrentDbSchema {
// run migrations
if schema == "" {
log.Debug("running migrations for", "schema", schema, "runtime-schema", CurrentDbSchema)
cleanupFunc := func(c *chunk) bool {
// if one of the ls.Validators passes, it means a chunk is of particular type and it is valid
valid := false
for _, v := range ls.Validators {
if valid = v.Validate(c.Address(), c.Data()); valid {
break
}
}
return valid
}
ls.DbStore.Cleanup(cleanupFunc)
err := ls.DbStore.PutSchema(DbSchemaPurity)
if err != nil {
log.Error(err.Error())
return err
}
}
}
return nil
}