Skip to content

Commit 036be77

Browse files
committed
Fix git ignore
1 parent a2cbfec commit 036be77

File tree

2 files changed

+125
-10
lines changed

2 files changed

+125
-10
lines changed

.gitignore

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
dist/
2-
.vscode
2+
/.vscode
33
/openrun
4-
metadata/
5-
openrun.toml
4+
/metadata/
5+
/openrun.toml
66
*.swp
77
.sw*
8-
logs/
8+
/logs/
99
.DS_Store
10-
run/
11-
app_src/
12-
config/
13-
internal/server/appspecs/
14-
internal/server/appspecs/dummy/README
15-
coverage/
10+
/run/
11+
/app_src/
12+
/config/
13+
/internal/server/appspecs/
14+
/internal/server/appspecs/dummy/README
15+
/coverage/

internal/metadata/file_cache.go

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
// Copyright (c) ClaceIO, LLC
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package metadata
5+
6+
import (
7+
"context"
8+
"database/sql"
9+
"fmt"
10+
"time"
11+
12+
"github.com/openrundev/openrun/internal/system"
13+
"github.com/openrundev/openrun/internal/types"
14+
)
15+
16+
const CURRENT_FILE_CACHE_VERSION = 1
17+
18+
// TODO : add file cleanup logic
19+
20+
type FileCache struct {
21+
db *sql.DB
22+
*types.Logger
23+
}
24+
25+
func InitFileCache(logger *types.Logger, config *types.ServerConfig) (*FileCache, error) {
26+
db, _, err := system.InitDBConnection(config.Metadata.FileCacheConnection, "filecache", system.DB_SQLITE)
27+
if err != nil {
28+
return nil, fmt.Errorf("error initializing db: %w", err)
29+
}
30+
31+
fc := FileCache{
32+
db: db,
33+
Logger: logger,
34+
}
35+
36+
err = fc.VersionUpgrade(config)
37+
if err != nil {
38+
return nil, err
39+
}
40+
return &fc, nil
41+
}
42+
43+
func (f *FileCache) VersionUpgrade(config *types.ServerConfig) error {
44+
version := 0
45+
row := f.db.QueryRow("SELECT version, last_upgraded FROM version")
46+
var dt time.Time
47+
row.Scan(&version, &dt)
48+
49+
if version < CURRENT_DB_VERSION && !config.Metadata.AutoUpgrade {
50+
return fmt.Errorf("DB autoupgrade is disabled, exiting. Server %d, DB %d", CURRENT_DB_VERSION, version)
51+
}
52+
53+
if !config.Metadata.IgnoreHigherVersion && version > CURRENT_DB_VERSION {
54+
return fmt.Errorf("DB version is newer than server version, upgrade OpenRun server version. Server %d, DB %d", CURRENT_DB_VERSION, version)
55+
}
56+
57+
if version == CURRENT_DB_VERSION {
58+
f.Info().Msg("DB version is current")
59+
return nil
60+
}
61+
62+
ctx := context.Background()
63+
tx, err := f.db.Begin()
64+
if err != nil {
65+
return err
66+
}
67+
defer tx.Rollback()
68+
69+
if version < 1 {
70+
f.Info().Msg("No version, initializing file cache")
71+
if _, err := tx.ExecContext(ctx, `create table version (version int, last_upgraded datetime)`); err != nil {
72+
return err
73+
}
74+
if _, err := tx.ExecContext(ctx, `insert into version values (1, datetime('now'))`); err != nil {
75+
return err
76+
}
77+
if _, err := tx.ExecContext(ctx, `create table files (sha text, compression_type text, content blob, create_time datetime, last_accessed datetime, PRIMARY KEY(sha))`); err != nil {
78+
return err
79+
}
80+
}
81+
82+
if err := tx.Commit(); err != nil {
83+
return err
84+
}
85+
86+
return nil
87+
}
88+
89+
func (f *FileCache) GetCachedFile(ctx context.Context, sha string) ([]byte, string, error) {
90+
stmt, err := f.db.PrepareContext(ctx, `select compression_type, content from files where sha = ?`)
91+
if err != nil {
92+
return nil, "", fmt.Errorf("error preparing statement: %w", err)
93+
}
94+
defer stmt.Close()
95+
96+
row := stmt.QueryRow(sha)
97+
var compressionType string
98+
var content []byte
99+
if err := row.Scan(&compressionType, &content); err != nil {
100+
return nil, "", err
101+
}
102+
103+
return content, compressionType, nil
104+
}
105+
106+
func (f *FileCache) AddCache(ctx context.Context, sha string, compressionType string, content []byte) error {
107+
stmt, err := f.db.PrepareContext(ctx, `insert or replace into files (sha, compression_type, content) values (?, ?, ?)`)
108+
if err != nil {
109+
return fmt.Errorf("error preparing statement: %w", err)
110+
}
111+
defer stmt.Close()
112+
113+
_, err = stmt.ExecContext(ctx, sha, compressionType, content)
114+
return err
115+
}

0 commit comments

Comments
 (0)