Skip to content

Commit

Permalink
Merge pull request juju#18783 from manadart/dqlite-removal-domain
Browse files Browse the repository at this point in the history
juju#18783

Adds the skeleton service, state and factory method for the `removal` domain.

There is no domain functionality at this point.
  • Loading branch information
jujubot authored Feb 4, 2025
2 parents b85a572 + d82ae67 commit 15e049a
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 0 deletions.
50 changes: 50 additions & 0 deletions domain/removal/service/service.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
// Copyright 2025 Canonical Ltd.
// Licensed under the AGPLv3, see LICENCE file for details.

package service

import (
"github.com/juju/juju/core/changestream"
"github.com/juju/juju/core/logger"
"github.com/juju/juju/core/watcher"
"github.com/juju/juju/core/watcher/eventsource"
)

// State describes retrieval and persistence methods for entity removal.
type State interface{}

// WatcherFactory describes methods for creating watchers.
type WatcherFactory interface {
// NewNamespaceWatcher returns a new namespace watcher
// for events based on the input change mask.
NewNamespaceWatcher(string, changestream.ChangeType, eventsource.NamespaceQuery) (watcher.StringsWatcher, error)
}

// Service provides the API for working with entity removal.
type Service struct {
st State
logger logger.Logger
}

// WatchableService provides the API for working with entity removal,
// including the ability to create watchers.
type WatchableService struct {
Service
watcherFactory WatcherFactory
}

// NewWatchableService creates a new WatchableService
// for working with entity removal.
func NewWatchableService(
st State,
watcherFactory WatcherFactory,
logger logger.Logger,
) *WatchableService {
return &WatchableService{
Service: Service{
st: st,
logger: logger,
},
watcherFactory: watcherFactory,
}
}
24 changes: 24 additions & 0 deletions domain/removal/state/state.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// Copyright 2025 Canonical Ltd.
// Licensed under the AGPLv3, see LICENCE file for details.

package state

import (
"github.com/juju/juju/core/database"
"github.com/juju/juju/core/logger"
"github.com/juju/juju/domain"
)

// State provides persistence and retrieval associated with entity removal.
type State struct {
*domain.StateBase
logger logger.Logger
}

// NewState returns a new state reference.
func NewState(factory database.TxnRunnerFactory, logger logger.Logger) *State {
return &State{
StateBase: domain.NewStateBase(factory),
logger: logger,
}
}
14 changes: 14 additions & 0 deletions domain/services/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ import (
proxy "github.com/juju/juju/domain/proxy/service"
relationservice "github.com/juju/juju/domain/relation/service"
relationstate "github.com/juju/juju/domain/relation/state"
removalservice "github.com/juju/juju/domain/removal/service"
removalstate "github.com/juju/juju/domain/removal/state"
resourceservice "github.com/juju/juju/domain/resource/service"
resourcestate "github.com/juju/juju/domain/resource/state"
secretservice "github.com/juju/juju/domain/secret/service"
Expand Down Expand Up @@ -388,6 +390,18 @@ func (s *ModelServices) Relation() *relationservice.WatchableService {
)
}

// Removal returns the service for working
// with entity removals in the current model.
func (s *ModelServices) Removal() *removalservice.WatchableService {
log := s.logger.Child("removal")

return removalservice.NewWatchableService(
removalstate.NewState(changestream.NewTxnRunnerFactory(s.modelDB), log),
s.modelWatcherFactory("removal"),
log,
)
}

// Stub returns the stub service. A special service which collects temporary
// methods required to wire together domains which are not completely implemented
// or wired up.
Expand Down

0 comments on commit 15e049a

Please sign in to comment.