Create migration script from sources to providers for LevelDB
This commit is contained in:
parent
5e9d6e3478
commit
e3fb589cd7
|
@ -47,12 +47,16 @@ type LevelDBStorage struct {
|
|||
}
|
||||
|
||||
// NewMySQLStorage establishes the connection to the database
|
||||
func NewLevelDBStorage(path string) (*LevelDBStorage, error) {
|
||||
if db, err := leveldb.OpenFile(path, nil); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return &LevelDBStorage{db}, nil
|
||||
func NewLevelDBStorage(path string) (s *LevelDBStorage, err error) {
|
||||
var db *leveldb.DB
|
||||
|
||||
db, err = leveldb.OpenFile(path, nil)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
s = &LevelDBStorage{db}
|
||||
return
|
||||
}
|
||||
|
||||
func (s *LevelDBStorage) Tidy() error {
|
||||
|
|
|
@ -0,0 +1,89 @@
|
|||
// Copyright or © or Copr. happyDNS (2021)
|
||||
//
|
||||
// contact@happydns.org
|
||||
//
|
||||
// This software is a computer program whose purpose is to provide a modern
|
||||
// interface to interact with DNS systems.
|
||||
//
|
||||
// This software is governed by the CeCILL license under French law and abiding
|
||||
// by the rules of distribution of free software. You can use, modify and/or
|
||||
// redistribute the software under the terms of the CeCILL license as
|
||||
// circulated by CEA, CNRS and INRIA at the following URL
|
||||
// "http://www.cecill.info".
|
||||
//
|
||||
// As a counterpart to the access to the source code and rights to copy, modify
|
||||
// and redistribute granted by the license, users are provided only with a
|
||||
// limited warranty and the software's author, the holder of the economic
|
||||
// rights, and the successive licensors have only limited liability.
|
||||
//
|
||||
// In this respect, the user's attention is drawn to the risks associated with
|
||||
// loading, using, modifying and/or developing or reproducing the software by
|
||||
// the user in light of its specific status of free software, that may mean
|
||||
// that it is complicated to manipulate, and that also therefore means that it
|
||||
// is reserved for developers and experienced professionals having in-depth
|
||||
// computer knowledge. Users are therefore encouraged to load and test the
|
||||
// software's suitability as regards their requirements in conditions enabling
|
||||
// the security of their systems and/or data to be ensured and, more generally,
|
||||
// to use and operate it in the same conditions as regards security.
|
||||
//
|
||||
// The fact that you are presently reading this means that you have had
|
||||
// knowledge of the CeCILL license and that you accept its terms.
|
||||
|
||||
package database
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
)
|
||||
|
||||
type sourceMeta struct {
|
||||
Type string `json:"_srctype"`
|
||||
Id int64 `json:"_id"`
|
||||
OwnerId int64 `json:"_ownerid"`
|
||||
Comment string `json:"_comment,omitempty"`
|
||||
}
|
||||
|
||||
func migrateFrom0(s *LevelDBStorage) (err error) {
|
||||
iter := s.search("source-")
|
||||
defer iter.Release()
|
||||
|
||||
for iter.Next() {
|
||||
src := iter.Value()
|
||||
|
||||
var srcMeta sourceMeta
|
||||
err = decodeData(iter.Value(), &srcMeta)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
newType := ""
|
||||
|
||||
switch srcMeta.Type {
|
||||
case "ddns.DDNSServer":
|
||||
newType = "DDNSServer"
|
||||
case "gandi.GandiAPI":
|
||||
newType = "GandiAPI"
|
||||
case "ovh.OVHAPI":
|
||||
newType = "OVHAPI"
|
||||
default:
|
||||
// Keep other source type to update in future version
|
||||
continue
|
||||
}
|
||||
|
||||
if newType != "" {
|
||||
bytes.Replace(src, []byte(srcMeta.Type), []byte(newType), 1)
|
||||
}
|
||||
|
||||
newKey := bytes.Replace(iter.Key(), []byte("source-"), []byte("provider-"), 1)
|
||||
err = s.put(string(newKey), src)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
err = s.delete(string(iter.Key()))
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
|
@ -35,7 +35,9 @@ import ()
|
|||
|
||||
type LevelDBMigrationFunc func(s *LevelDBStorage) error
|
||||
|
||||
var migrations []LevelDBMigrationFunc = []LevelDBMigrationFunc{}
|
||||
var migrations []LevelDBMigrationFunc = []LevelDBMigrationFunc{
|
||||
migrateFrom0,
|
||||
}
|
||||
|
||||
func (s *LevelDBStorage) DoMigration() (err error) {
|
||||
found := false
|
||||
|
|
Loading…
Reference in New Issue