mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-06 23:56:37 +08:00
merge(wavelet): honor Use() order when reconciling plugins
Pull the core reconcile rescan so admin migrations run before OpenFlare server seeds that insert into w_schedules.
This commit is contained in:
@@ -300,6 +300,9 @@ func (a *App) reconcileLocked() error {
|
|||||||
return fmt.Errorf("core: load fiber %q failed: %w", f.Name(), err)
|
return fmt.Errorf("core: load fiber %q failed: %w", f.Name(), err)
|
||||||
}
|
}
|
||||||
progress = true
|
progress = true
|
||||||
|
// Rescan from the head of the Use() list so earlier pending
|
||||||
|
// plugins run before later ones that became ready in this pass.
|
||||||
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !progress {
|
if !progress {
|
||||||
|
|||||||
@@ -98,6 +98,38 @@ func TestFiber_ConfluenceAndReactiveActivation(t *testing.T) {
|
|||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestReconcileAppliesEarlierConsumersBeforeLaterOnes(t *testing.T) {
|
||||||
|
app := core.NewApp()
|
||||||
|
var order []string
|
||||||
|
early := &orderPlugin{name: "early-consumer", order: &order, inject: []reflect.Type{reflect.TypeFor[MockServiceA]()}}
|
||||||
|
provider := &orderPlugin{name: "provider", order: &order, provide: true}
|
||||||
|
late := &orderPlugin{name: "late-consumer", order: &order, inject: []reflect.Type{reflect.TypeFor[MockServiceA]()}}
|
||||||
|
app.Use(early, provider, late)
|
||||||
|
|
||||||
|
require.NoError(t, app.Start(context.Background()))
|
||||||
|
assert.Equal(t, []string{"provider", "early-consumer", "late-consumer"}, order)
|
||||||
|
require.NoError(t, app.Stop())
|
||||||
|
}
|
||||||
|
|
||||||
|
type orderPlugin struct {
|
||||||
|
name string
|
||||||
|
order *[]string
|
||||||
|
inject []reflect.Type
|
||||||
|
provide bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *orderPlugin) Name() string { return p.name }
|
||||||
|
|
||||||
|
func (p *orderPlugin) Inject() []reflect.Type { return p.inject }
|
||||||
|
|
||||||
|
func (p *orderPlugin) Apply(ctx *core.Context) error {
|
||||||
|
*p.order = append(*p.order, p.name)
|
||||||
|
if p.provide {
|
||||||
|
core.Provide[MockServiceA](ctx, &mockServiceAImpl{})
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func TestFiber_UnsatisfiedDependencyReturnsError(t *testing.T) {
|
func TestFiber_UnsatisfiedDependencyReturnsError(t *testing.T) {
|
||||||
app := core.NewApp()
|
app := core.NewApp()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user