@@ -59,6 +59,10 @@ type tagStore struct {
5959 fs FileStore
6060 backends * backend.Manager
6161 writeBackManager persistedretry.Manager
62+
63+ // writeBackStrategy determines how tags are written to backend storage.
64+ // Set at initialization based on WriteThrough config.
65+ writeBackStrategy func (task persistedretry.Task ) error
6266}
6367
6468// New creates a new Store.
@@ -73,42 +77,33 @@ func New(
7377 "module" : "tagstore" ,
7478 })
7579
76- return & tagStore {
80+ s := & tagStore {
7781 config : config ,
7882 fs : fs ,
7983 backends : backends ,
8084 writeBackManager : writeBackManager ,
8185 }
86+
87+ // Set write-back strategy based on configuration
88+ if config .WriteThrough {
89+ s .writeBackStrategy = s .writeThroughStrategy
90+ } else {
91+ s .writeBackStrategy = s .asyncWriteBackStrategy
92+ }
93+
94+ return s
8295}
8396
8497func (s * tagStore ) Put (tag string , d core.Digest , writeBackDelay time.Duration ) error {
85- log .With ("tag" , tag , "digest" , d .String (), "writeback_delay" , writeBackDelay ).Debug ("Storing tag to disk" )
86-
8798 if err := s .writeTagToDisk (tag , d ); err != nil {
88- log .With ("tag" , tag , "digest" , d .String (), "error" , err ).Error ("Failed to write tag to disk" )
8999 return fmt .Errorf ("write tag to disk: %s" , err )
90100 }
91101 if _ , err := s .fs .SetCacheFileMetadata (tag , metadata .NewPersist (true )); err != nil {
92- log .With ("tag" , tag , "digest" , d .String (), "error" , err ).Error ("Failed to set persist metadata" )
93102 return fmt .Errorf ("set persist metadata: %s" , err )
94103 }
95104
96105 task := writeback .NewTask (tag , tag , writeBackDelay )
97- if s .config .WriteThrough {
98- log .With ("tag" , tag , "digest" , d .String ()).Debug ("Using write-through mode for tag" )
99- if err := s .writeBackManager .SyncExec (task ); err != nil {
100- log .With ("tag" , tag , "digest" , d .String (), "error" , err ).Error ("Failed to sync write-back tag to backend" )
101- return fmt .Errorf ("sync exec write-back task: %s" , err )
102- }
103- log .With ("tag" , tag , "digest" , d .String ()).Info ("Tag written to backend synchronously" )
104- } else {
105- log .With ("tag" , tag , "digest" , d .String (), "writeback_delay" , writeBackDelay ).Debug ("Adding async write-back task for tag" )
106- if err := s .writeBackManager .Add (task ); err != nil {
107- log .With ("tag" , tag , "digest" , d .String (), "error" , err ).Error ("Failed to add write-back task" )
108- return fmt .Errorf ("add write-back task: %s" , err )
109- }
110- }
111- return nil
106+ return s .writeBackStrategy (task )
112107}
113108
114109func (s * tagStore ) Get (tag string ) (d core.Digest , err error ) {
@@ -125,6 +120,22 @@ func (s *tagStore) Get(tag string) (d core.Digest, err error) {
125120 return d , err
126121}
127122
123+ // writeThroughStrategy writes tags synchronously to backend storage.
124+ func (s * tagStore ) writeThroughStrategy (task persistedretry.Task ) error {
125+ if err := s .writeBackManager .SyncExec (task ); err != nil {
126+ return fmt .Errorf ("sync exec write-back task: %s" , err )
127+ }
128+ return nil
129+ }
130+
131+ // asyncWriteBackStrategy queues tags for asynchronous write-back to backend storage.
132+ func (s * tagStore ) asyncWriteBackStrategy (task persistedretry.Task ) error {
133+ if err := s .writeBackManager .Add (task ); err != nil {
134+ return fmt .Errorf ("add write-back task: %s" , err )
135+ }
136+ return nil
137+ }
138+
128139func (s * tagStore ) writeTagToDisk (tag string , d core.Digest ) error {
129140 buf := bytes .NewBufferString (d .String ())
130141 if err := s .fs .CreateCacheFile (tag , buf ); err != nil && ! os .IsExist (err ) {
0 commit comments