fix: error instead of panic when enterprise tries to restore with OSS (#22019)

pull/22040/head
Sam Arnold 2021-08-03 15:56:19 -04:00 committed by GitHub
parent 733a6b4245
commit d0fe2ba2ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 8 deletions

View File

@ -26,6 +26,7 @@
- [#21947](https://github.com/influxdata/influxdb/pull/21947): fix: prevent silently dropped writes with overlapping shards
- [#21978](https://github.com/influxdata/influxdb/pull/21978): fix: restore portable backup bug
- [#21992](https://github.com/influxdata/influxdb/pull/21992): fix: systemd-start script should be executable by group and others
- [#22019](https://github.com/influxdata/influxdb/pull/22019): fix: error instead of panic when enterprise tries to restore with OSS
v1.9.2 [unreleased]
- [#21631](https://github.com/influxdata/influxdb/pull/21631): fix: group by returns multiple results per group in some circumstances

View File

@ -28,18 +28,24 @@ const (
BackupMagicHeader = 0x59590101
)
type MetaClient interface {
encoding.BinaryMarshaler
Database(name string) *meta.DatabaseInfo
}
type OSSMetaClient interface {
MetaClient
Data() meta.Data
SetData(data *meta.Data) error
}
// Service manages the listener for the snapshot endpoint.
type Service struct {
wg sync.WaitGroup
Node *influxdb.Node
MetaClient interface {
encoding.BinaryMarshaler
Database(name string) *meta.DatabaseInfo
Data() meta.Data
SetData(data *meta.Data) error
}
MetaClient MetaClient
TSDBStore interface {
BackupShard(id uint64, since time.Time, w io.Writer) error
@ -182,7 +188,15 @@ func (s *Service) updateMetaStore(conn net.Conn, bits []byte, backupDBName, rest
return fmt.Errorf("failed to decode meta: %s", err)
}
data := s.MetaClient.Data()
ossClient, ok := s.MetaClient.(OSSMetaClient)
if !ok {
if err := s.respondIDMap(conn, map[uint64]uint64{}); err != nil {
return err
}
return fmt.Errorf("updateMetaStore only supported for OSS - likely tried to restore with OSS tooling instead of influxd-ctl")
}
data := ossClient.Data()
IDMap, newDBs, err := data.ImportData(md, backupDBName, restoreDBName, backupRPName, restoreRPName)
if err != nil {
@ -192,7 +206,7 @@ func (s *Service) updateMetaStore(conn net.Conn, bits []byte, backupDBName, rest
return err
}
err = s.MetaClient.SetData(&data)
err = ossClient.SetData(&data)
if err != nil {
return err
}