Skip to content

Commit b47ffd1

Browse files
authored
fix: extension cannot start smoothly (#810)
* fix: extension cannot start smoothly * fix the unit test failure * fix: extension cannot download --------- Co-authored-by: rick <[email protected]>
1 parent 3477034 commit b47ffd1

File tree

15 files changed

+63
-35
lines changed

15 files changed

+63
-35
lines changed

cmd/server.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -264,13 +264,12 @@ func (o *serverOption) runE(cmd *cobra.Command, args []string) (err error) {
264264
storeExtMgr := server.NewStoreExtManager(o.execer)
265265
storeExtMgr.WithDownloader(extDownloader)
266266
remoteServer := server.NewRemoteServer(loader, remote.NewGRPCloaderFromStore(), secretServer, storeExtMgr, o.configDir, o.grpcMaxRecvMsgSize)
267-
kinds, storeKindsErr := remoteServer.GetStoreKinds(ctx, nil)
268-
if storeKindsErr != nil {
269-
cmd.PrintErrf("failed to get store kinds, error: %v\n", storeKindsErr)
270-
} else {
271-
if runPluginErr := startPlugins(storeExtMgr, kinds); runPluginErr != nil {
267+
if stores, storeErr := remoteServer.GetStores(ctx, nil); storeErr == nil {
268+
if runPluginErr := startPlugins(storeExtMgr, stores); runPluginErr != nil {
272269
cmd.PrintErrf("error occurred during starting plugins, error: %v\n", runPluginErr)
273270
}
271+
} else {
272+
cmd.PrintErrf("error occurred during getting stores, error: %v\n", storeErr)
274273
}
275274

276275
// create mock server controller
@@ -438,13 +437,14 @@ func postRequestProxy(proxy string) func(w http.ResponseWriter, r *http.Request,
438437
}
439438
}
440439

441-
func startPlugins(storeExtMgr server.ExtManager, kinds *server.StoreKinds) (err error) {
442-
const socketPrefix = "unix://"
443-
444-
for _, kind := range kinds.Data {
445-
if kind.Enabled && (strings.HasPrefix(kind.Url, socketPrefix) || strings.Contains(kind.Url, ":")) {
446-
err = errors.Join(err, storeExtMgr.Start(kind.Name, kind.Url))
440+
func startPlugins(storeExtMgr server.ExtManager, stores *server.Stores) (err error) {
441+
for _, store := range stores.Data {
442+
if store.Disabled || store.Kind == nil {
443+
continue
447444
}
445+
446+
kind := store.Kind
447+
err = errors.Join(err, storeExtMgr.Start(kind.Name, kind.Url))
448448
}
449449
return
450450
}

console/atest-ui/src/App.vue

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
Share,
77
ArrowDown,
88
Guide,
9-
DataAnalysis, Help, Setting
9+
Help, Setting
1010
} from '@element-plus/icons-vue'
1111
import * as ElementPlusIcons from '@element-plus/icons-vue'
1212
import { ref, watch, getCurrentInstance} from 'vue'
@@ -152,16 +152,16 @@ API.GetMenus((menus) => {
152152
<el-icon><Guide /></el-icon>
153153
<template #title>{{ t('title.mock' )}}</template>
154154
</el-menu-item>
155-
<el-menu-item index="store">
156-
<el-icon><location /></el-icon>
157-
<template #title>{{ t('title.stores') }}</template>
158-
</el-menu-item>
159155
<span v-for="menu in extensionMenus" :key="menu.index" :index="menu.index">
160156
<el-menu-item :index="menu.index">
161157
<el-icon><component :is="ElementPlusIcons[menu.icon]" /></el-icon>
162158
<template #title>{{ menu.name }}</template>
163159
</el-menu-item>
164160
</span>
161+
<el-menu-item index="store">
162+
<el-icon><location /></el-icon>
163+
<template #title>{{ t('title.stores') }}</template>
164+
</el-menu-item>
165165
</el-menu>
166166
</el-aside>
167167

pkg/downloader/oci.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ func (d *defaultOCIDownloader) Download(image, tag, file string) (reader io.Read
135135
}
136136
}
137137

138-
err = fmt.Errorf("not found %s", file)
138+
err = fmt.Errorf("not found %s from %s", file, api)
139139
return
140140
}
141141

pkg/server/remote_server.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"path/filepath"
2929
reflect "reflect"
3030
"regexp"
31+
"runtime"
3132
"slices"
3233
"strconv"
3334
"strings"
@@ -1247,10 +1248,7 @@ func (s *server) CreateStore(ctx context.Context, in *Store) (reply *Store, err
12471248
storeFactory := testing.NewStoreFactory(s.configDir)
12481249
store := ToNormalStore(in)
12491250

1250-
if store.Kind.URL == "" {
1251-
store.Kind.URL = fmt.Sprintf("unix://%s", home.GetExtensionSocketPath(store.Kind.Name))
1252-
}
1253-
1251+
handleStore(&store)
12541252
if err = storeFactory.CreateStore(store); err == nil && s.storeExtMgr != nil {
12551253
err = s.storeExtMgr.Start(store.Kind.Name, store.Kind.URL)
12561254
}
@@ -1260,6 +1258,7 @@ func (s *server) UpdateStore(ctx context.Context, in *Store) (reply *Store, err
12601258
reply = &Store{}
12611259
storeFactory := testing.NewStoreFactory(s.configDir)
12621260
store := ToNormalStore(in)
1261+
handleStore(&store)
12631262
if err = storeFactory.UpdateStore(store); err == nil && s.storeExtMgr != nil {
12641263
// TODO need to restart extension if config was changed
12651264
err = s.storeExtMgr.Start(store.Kind.Name, store.Kind.URL)
@@ -1276,14 +1275,21 @@ func (s *server) VerifyStore(ctx context.Context, in *SimpleQuery) (reply *Exten
12761275
reply = &ExtensionStatus{}
12771276
var loader testing.Writer
12781277
if loader, err = s.getLoaderByStoreName(in.Name); err == nil && loader != nil {
1279-
readOnly, verifyErr := loader.Verify()
1278+
readOnly, version, verifyErr := loader.Verify()
12801279
reply.Ready = verifyErr == nil
1280+
reply.Version = version
12811281
reply.ReadOnly = readOnly
12821282
reply.Message = util.OKOrErrorMessage(verifyErr)
12831283
}
12841284
return
12851285
}
12861286

1287+
func handleStore(store *testing.Store) {
1288+
if store.Kind.URL == "" && runtime.GOOS != "windows" {
1289+
store.Kind.URL = fmt.Sprintf("unix://%s", home.GetExtensionSocketPath(store.Kind.Name))
1290+
}
1291+
}
1292+
12871293
// secret related interfaces
12881294
func (s *server) GetSecrets(ctx context.Context, in *Empty) (reply *Secrets, err error) {
12891295
return s.secretServer.GetSecrets(ctx, in)

pkg/server/server.pb.go

Lines changed: 12 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/server/server.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -616,6 +616,7 @@ message StoreKind {
616616
repeated StoreKindDependency dependencies = 4;
617617
string link = 5;
618618
repeated StoreKindParam params = 6;
619+
repeated string categories = 7;
619620
}
620621

621622
message StoreKindDependency {

pkg/server/store_ext_manager.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,13 +98,21 @@ func (s *storeExtManager) StartPlugin(storeKind testing.StoreKind) {
9898
}
9999

100100
func (s *storeExtManager) Start(name, socket string) (err error) {
101+
if name == "" {
102+
}
103+
104+
serverLogger.Info("start", "extension", name, "socket", socket)
101105
if v, ok := s.extStatusMap[name]; ok && v {
102106
return
103107
}
108+
104109
platformBasedName := name
105110
if s.execer.OS() == "windows" {
106111
platformBasedName += ".exe"
112+
} else {
113+
socket = fmt.Sprintf("unix://%s", home.GetExtensionSocketPath(name))
107114
}
115+
108116
targetDir := home.GetUserBinDir()
109117
targetBinaryFile := filepath.Join(targetDir, platformBasedName)
110118

@@ -118,13 +126,14 @@ func (s *storeExtManager) Start(name, socket string) (err error) {
118126
if err != nil {
119127
err = fmt.Errorf("not found extension, try to download it, error: %v", err)
120128
go func() {
121-
s.ociDownloader.WithKind("store")
122-
s.ociDownloader.WithOS(s.execer.OS())
123-
reader, dErr := s.ociDownloader.Download(name, "", "")
129+
ociDownloader := downloader.NewStoreDownloader()
130+
ociDownloader.WithKind("store")
131+
ociDownloader.WithOS(s.execer.OS())
132+
reader, dErr := ociDownloader.Download(name, "", "")
124133
if dErr != nil {
125134
serverLogger.Error(dErr, "failed to download extension", "name", name)
126135
} else {
127-
extFile := s.ociDownloader.GetTargetFile()
136+
extFile := ociDownloader.GetTargetFile()
128137

129138
targetFile := filepath.Base(extFile)
130139
if dErr = downloader.WriteTo(reader, targetDir, targetFile); dErr == nil {

pkg/testing/loader.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ type Loader interface {
2424
GetCount() int
2525
Reset()
2626

27-
Verify() (readOnly bool, err error)
27+
Verify() (readOnly bool, version string, err error)
2828
PProf(name string) []byte
2929

3030
Query(query map[string]string) (result DataResult, err error)

pkg/testing/loader_file.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -504,7 +504,7 @@ func (l *fileLoader) RenameTestSuite(oldName, newName string) (err error) {
504504
return
505505
}
506506

507-
func (l *fileLoader) Verify() (readOnly bool, err error) {
507+
func (l *fileLoader) Verify() (readOnly bool, version string, err error) {
508508
// always be okay
509509
return
510510
}

pkg/testing/loader_file_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func TestFileLoader(t *testing.T) {
5656
}
5757
tt.verify(t, loader)
5858

59-
readonly, err := loader.Verify()
59+
readonly, _, err := loader.Verify()
6060
assert.NoError(t, err)
6161
assert.False(t, readonly)
6262
})

0 commit comments

Comments
 (0)