Skip to content

Commit 8374c73

Browse files
committed
fix: properly merge cache data when called from within a process
1 parent 4d1db25 commit 8374c73

File tree

2 files changed

+59
-6
lines changed

2 files changed

+59
-6
lines changed

cmd/internal/cache.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ func cacheSetFunc(ctx *context.Context, _ *cobra.Command, args []string) {
7979
if err != nil {
8080
ctx.Logger.FatalErr(err)
8181
}
82-
if err = s.CreateBucket(store.EnvironmentBucket()); err != nil {
82+
if _, err = s.CreateAndSetBucket(store.EnvironmentBucket()); err != nil {
8383
ctx.Logger.FatalErr(err)
8484
}
8585
defer func() {

internal/services/store/store.go

Lines changed: 58 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ func (s *BoltStore) CreateAndSetBucket(id string) (string, error) {
9393

9494
func EnvironmentBucket() string {
9595
id := RootBucket
96-
if val, set := os.LookupEnv(BucketEnv); set {
96+
if val, set := os.LookupEnv(BucketEnv); set && val != "" {
9797
id = val
9898
}
9999
replacer := strings.NewReplacer(":", "_", "/", "_", " ", "_")
@@ -163,11 +163,38 @@ func (s *BoltStore) GetKeys() ([]string, error) {
163163
if bucket == nil {
164164
return fmt.Errorf("bucket %s not found", s.processBucket)
165165
}
166-
bucket.Stats()
167-
return bucket.ForEach(func(k, _ []byte) error {
168-
keys = append(keys, string(k))
166+
167+
// Collect keys from process bucket
168+
processKeys := make(map[string]bool)
169+
err := bucket.ForEach(func(k, _ []byte) error {
170+
key := string(k)
171+
keys = append(keys, key)
172+
processKeys[key] = true
169173
return nil
170174
})
175+
if err != nil {
176+
return err
177+
}
178+
179+
// If not using root bucket, also collect keys from root bucket
180+
if s.processBucket != RootBucket {
181+
rBucket := tx.Bucket([]byte(RootBucket))
182+
if rBucket == nil {
183+
return nil
184+
}
185+
err := rBucket.ForEach(func(k, _ []byte) error {
186+
// Only add keys that aren't already in the process bucket
187+
if key := string(k); !processKeys[key] {
188+
keys = append(keys, key)
189+
}
190+
return nil
191+
})
192+
if err != nil {
193+
return err
194+
}
195+
}
196+
197+
return nil
171198
})
172199
return keys, err
173200
}
@@ -186,10 +213,36 @@ func (s *BoltStore) GetAll() (map[string]string, error) {
186213
if bucket == nil {
187214
return fmt.Errorf("bucket %s not found", s.processBucket)
188215
}
189-
return bucket.ForEach(func(k, v []byte) error {
216+
217+
// First, collect all key-value pairs from process bucket
218+
err := bucket.ForEach(func(k, v []byte) error {
190219
m[string(k)] = string(v)
191220
return nil
192221
})
222+
if err != nil {
223+
return err
224+
}
225+
226+
// If not using root bucket, also collect from root bucket
227+
if s.processBucket != RootBucket {
228+
rBucket := tx.Bucket([]byte(RootBucket))
229+
if rBucket == nil {
230+
return nil
231+
}
232+
err := rBucket.ForEach(func(k, v []byte) error {
233+
key := string(k)
234+
// Only add if key doesn't already exist in process bucket
235+
if _, exists := m[key]; !exists {
236+
m[key] = string(v)
237+
}
238+
return nil
239+
})
240+
if err != nil {
241+
return err
242+
}
243+
}
244+
245+
return nil
193246
})
194247
return m, err
195248
}

0 commit comments

Comments
 (0)