@@ -93,7 +93,7 @@ func (s *BoltStore) CreateAndSetBucket(id string) (string, error) {
9393
9494func 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