Skip to content

Commit 07815fd

Browse files
fateleiStream29
andauthored
fix: fix lru miss init (#622)
* fix: fix lru miss init * fix: gemini review --------- Co-authored-by: Stream <Stream_2@qq.com>
1 parent f96a0f1 commit 07815fd

4 files changed

Lines changed: 19 additions & 10 deletions

File tree

.env.example

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ PLUGIN_INSTALLED_PATH=plugin
6565
# where the plugin finally running and working
6666
PLUGIN_WORKING_PATH=cwd
6767

68+
PLUGIN_ASSET_CACHE_SIZE=256
69+
6870
# persistence storage
6971
PERSISTENCE_STORAGE_PATH=persistence
7072
PERSISTENCE_STORAGE_MAX_SIZE=104857600

internal/core/plugin_manager/manager.go

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ type PluginManager struct {
4242

4343
config *app.Config
4444

45+
pluginAssetCache *lru.Cache[string, []byte]
46+
4547
// plugin lifecycle controller
4648
//
4749
// whatever it's local mode or serverless mode, all the signals and calls
@@ -71,10 +73,16 @@ func InitGlobalManager(oss oss.OSS, config *app.Config) *PluginManager {
7173
config.PluginPackageCachePath,
7274
)
7375

76+
pluginAssetCache, err := lru.New[string, []byte](int(config.PluginAssetCacheSize))
77+
if err != nil {
78+
log.Panic("init plugin asset cache failed", "error", err)
79+
}
80+
7481
manager = &PluginManager{
75-
mediaBucket: mediaBucket,
76-
packageBucket: packageBucket,
77-
installedBucket: installedBucket,
82+
mediaBucket: mediaBucket,
83+
packageBucket: packageBucket,
84+
installedBucket: installedBucket,
85+
pluginAssetCache: pluginAssetCache,
7886
controlPanel: controlpanel.NewControlPanel(
7987
config,
8088
mediaBucket,
@@ -196,26 +204,23 @@ func (c *PluginManager) NeedRedirecting(
196204
return true, nil
197205
}
198206

199-
var (
200-
pluginAssetCache *lru.Cache[string, []byte]
201-
)
202-
203207
func pluginAssetCacheKey(
204208
pluginUniqueIdentifier plugin_entities.PluginUniqueIdentifier,
205209
path string,
206210
) string {
207211
return fmt.Sprintf("%s/%s", pluginUniqueIdentifier.String(), path)
208212
}
213+
209214
func (p *PluginManager) ExtractPluginAsset(
210215
pluginUniqueIdentifier plugin_entities.PluginUniqueIdentifier,
211216
path string,
212217
) ([]byte, error) {
213218
key := pluginAssetCacheKey(pluginUniqueIdentifier, path)
214-
cached, ok := pluginAssetCache.Get(key)
219+
cached, ok := p.pluginAssetCache.Get(key)
215220
if ok {
216221
return cached, nil
217222
}
218-
pkgBytes, err := manager.GetPackage(pluginUniqueIdentifier)
223+
pkgBytes, err := p.GetPackage(pluginUniqueIdentifier)
219224
if err != nil {
220225
return nil, err
221226
}
@@ -227,6 +232,6 @@ func (p *PluginManager) ExtractPluginAsset(
227232
if err != nil {
228233
return nil, err
229234
}
230-
pluginAssetCache.Add(key, assets[path])
235+
p.pluginAssetCache.Add(key, assets[path])
231236
return assets[path], nil
232237
}

internal/types/app/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ type Config struct {
9797

9898
PluginWorkingPath string `envconfig:"PLUGIN_WORKING_PATH"` // where the plugin finally running
9999
PluginMediaCacheSize uint16 `envconfig:"PLUGIN_MEDIA_CACHE_SIZE"`
100+
PluginAssetCacheSize uint16 `envconfig:"PLUGIN_ASSET_CACHE_SIZE"`
100101
PluginMediaCachePath string `envconfig:"PLUGIN_MEDIA_CACHE_PATH"`
101102
PluginInstalledPath string `envconfig:"PLUGIN_INSTALLED_PATH" validate:"required"` // where the plugin finally installed
102103
PluginPackageCachePath string `envconfig:"PLUGIN_PACKAGE_CACHE_PATH"` // where plugin packages stored

internal/types/app/default.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ func (config *Config) SetDefault() {
2525
setDefaultInt(&config.PluginMaxExecutionTimeout, 10*60)
2626
setDefaultString(&config.PluginStorageType, oss.OSS_TYPE_LOCAL)
2727
setDefaultInt(&config.PluginMediaCacheSize, 1024)
28+
setDefaultInt(&config.PluginAssetCacheSize, 256)
2829
setDefaultInt(&config.DifyPluginServerlessConnectorLaunchTimeout, 240)
2930
setDefaultInt(&config.PluginRemoteInstallingMaxSingleTenantConn, 5)
3031
setDefaultString(&config.DBSslMode, "disable")

0 commit comments

Comments
 (0)