2023-10-30 16:48:02 +03:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2023-10-30 18:30:23 +03:00
|
|
|
"sync"
|
|
|
|
|
2023-10-30 16:48:02 +03:00
|
|
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/container"
|
|
|
|
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
|
2023-11-16 10:58:55 +03:00
|
|
|
"git.frostfs.info/TrueCloudLab/policy-engine/pkg/engine"
|
|
|
|
"git.frostfs.info/TrueCloudLab/policy-engine/pkg/engine/inmemory"
|
2023-10-30 16:48:02 +03:00
|
|
|
)
|
|
|
|
|
|
|
|
type apeChainSourceImpl struct {
|
2023-10-30 18:30:23 +03:00
|
|
|
mtx sync.Mutex
|
2023-11-16 10:58:55 +03:00
|
|
|
localChainStorage map[cid.ID]engine.LocalOverrideEngine
|
2023-10-30 16:48:02 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
func NewAPESource() container.AccessPolicyEngineChainSource {
|
|
|
|
return &apeChainSourceImpl{
|
2023-11-16 10:58:55 +03:00
|
|
|
localChainStorage: make(map[cid.ID]engine.LocalOverrideEngine),
|
2023-10-30 16:48:02 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var _ container.AccessPolicyEngineChainSource = (*apeChainSourceImpl)(nil)
|
|
|
|
|
2023-11-16 10:58:55 +03:00
|
|
|
func (c *apeChainSourceImpl) GetChainSource(cid cid.ID) (engine.LocalOverrideEngine, error) {
|
2023-10-30 18:30:23 +03:00
|
|
|
c.mtx.Lock()
|
|
|
|
defer c.mtx.Unlock()
|
|
|
|
|
2023-10-30 16:48:02 +03:00
|
|
|
s, ok := c.localChainStorage[cid]
|
|
|
|
if ok {
|
|
|
|
return s, nil
|
|
|
|
}
|
2023-11-16 10:58:55 +03:00
|
|
|
c.localChainStorage[cid] = inmemory.NewInMemoryLocalOverrides()
|
2023-10-30 16:48:02 +03:00
|
|
|
return c.localChainStorage[cid], nil
|
|
|
|
}
|