Skip to content

Commit 538d7b7

Browse files
authored
Merge pull request #18 from tigrisdata/main
chore: Release
2 parents e84ad1f + c8087e0 commit 538d7b7

File tree

13 files changed

+178
-45
lines changed

13 files changed

+178
-45
lines changed

.goreleaser.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ version: 2
22
builds:
33
- env:
44
- CGO_ENABLED=0
5-
- ENDPOINT="https://fly.storage.tigris.dev"
5+
- ENDPOINT=https://fly.storage.tigris.dev
66
goos:
77
- linux
88
- windows
@@ -13,8 +13,8 @@ builds:
1313
binary: tigrisfs
1414
ldflags:
1515
- -w -extldflags '-static'
16-
- -X 'github.com/tigrisdata/tigrisfs/main.Version={{.Version}}'
17-
- -X 'github.com/tigrisdata/tigrisfs/main.Endpoint={{.Env.ENDPOINT}}'
16+
- -X 'github.com/tigrisdata/tigrisfs/core/cfg.Version={{.Version}}'
17+
- -X 'github.com/tigrisdata/tigrisfs/core/cfg.DefaultEndpoint={{.Env.ENDPOINT}}'
1818

1919
archives:
2020
- format_overrides:

README.md

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,32 +16,43 @@ It solves these problems by using aggressive parallelism and asynchrony.
1616

1717
The goal of TigrisFS is to further improve on performance and reliability especially in distributed cluster setup.
1818

19-
In first release we worked on improving reliability of the code base:
20-
* Removed bundled, outdated AWS SDK with critical vulnerabilities.
21-
* Upgraded dependencies to fix security vulnerabilities.
22-
* Enabled race detector in tests and fixed all detected race conditions.
23-
* Enabled unit, xfs and cluster tests on every PR and push to main.
19+
In the first release we focused on improving security and reliability of the code base:
20+
* Improved security by:
21+
* removing bundled, outdated AWS SDK with critical vulnerabilities.
22+
* upgrading dependencies to fix security vulnerabilities.
23+
* Improved reliability by:
24+
* fixing all race conditions found by race detector, which is now enabled by default in tests.
25+
* fixing all linter issues and enabling linting by default in CI.
26+
* running more extensive tests and enabling them by default in CI.
27+
28+
## Tigris specific features
29+
30+
When mounted with the [Tigris](https://www.tigrisdata.com) backend TigrisFS supports:
31+
* POSIX permissions, special files, symbolic links.
32+
* Auto-preload content of small files on directory list in single request.
33+
* Allows to auto prefetch directory data to the region on list.
2434

2535
# Installation
2636

2737
## Prebuilt DEB and RPM packages
2838

29-
* Download the latest release: [DEB](https://github.com/tigrisdata/tigrisfs/releases/download/v1.1.0/tigrisfs_tigris_1.1.0_linux_amd64.deb), [RPM](https://github.com/tigrisdata/tigrisfs/releases/download/v1.1.0/tigrisfs_tigris_1.1.0_linux_amd64.rpm).
39+
* Download the latest release: [DEB](https://github.com/tigrisdata/tigrisfs/releases/download/v1.1.2/tigrisfs_1.1.2_linux_amd64.deb), [RPM](https://github.com/tigrisdata/tigrisfs/releases/download/v1.1.2/tigrisfs_1.1.2_linux_amd64.rpm).
3040
* Install the package:
3141
* Debian-based systems:
3242
```bash
33-
dpkg -i tigrisfs_tigris_1.1.0_linux_amd64.deb
43+
dpkg -i tigrisfs_1.1.2_linux_amd64.deb
3444
```
3545
* RPM-based systems:
3646
```bash
37-
rpm -i tigrisfs_tigris_1.1.0_linux_amd64.rpm
47+
rpm -i tigrisfs_1.1.2_linux_amd64.rpm
3848
```
3949
* Configure credentials
4050
TigrisFS can use credentials from different sources:
4151
* Standard AWS credentials files `~/.aws/credentials` and `~/.aws/config`. Use `aws configure` to set them up and export
4252
`AWS_PROFILE` environment variable to use a specific profile.
4353
* Environment variables `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`.
4454
* TigrisFS credentials in `/etc/default/tigrisfs` or mount specific credentials in `/etc/default/tigrisfs-<bucket>`.
55+
See [docs](https://www.tigrisdata.com/docs/sdks/s3/aws-cli/) for more details.
4556

4657
* Mount the bucket
4758
* as current user
@@ -60,7 +71,7 @@ In first release we worked on improving reliability of the code base:
6071
* Download and unpack the latest release:
6172
* MacOS ARM64
6273
```
63-
curl -L https://github.com/tigrisdata/tigrisfs/releases/download/v1.1.0/tigrisfs_tigris_1.1.0_darwin_arm64.tar.gz | tar -xz -C /usr/local/bin
74+
curl -L https://github.com/tigrisdata/tigrisfs/releases/download/v1.1.2/tigrisfs_1.1.2_darwin_arm64.tar.gz | tar -xz -C /usr/local/bin
6475
```
6576
* Configuration is the same as for the DEB and RPM packages above.
6677
* Mount the bucket:

core/cfg/logger.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import (
2323
"github.com/tigrisdata/tigrisfs/log"
2424
)
2525

26-
func InitLoggers(flags *FlagStorage) {
26+
func InitLoggers(flags *FlagStorage) error {
2727
lf := flags.LogFile
2828
if lf == "" {
2929
lf = "stderr"
@@ -32,7 +32,10 @@ func InitLoggers(flags *FlagStorage) {
3232
}
3333
}
3434

35-
log.InitLoggerRedirect(lf)
35+
err := log.InitLoggerRedirect(lf, len(flags.LogFile) == 0)
36+
if err != nil {
37+
return err
38+
}
3639

3740
log.DefaultLogConfig = &log.LogConfig{
3841
Level: flags.LogLevel,
@@ -51,4 +54,6 @@ func InitLoggers(flags *FlagStorage) {
5154
log.SetLoggersConfig(log.DefaultLogConfig)
5255

5356
// log.DumpLoggers("InitLoggers")
57+
58+
return nil
5459
}

core/handles.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,9 @@ func (inode *Inode) SetFromBlobItem(item *BlobItemOutput) {
227227
inode.setMetadata(item.Metadata)
228228
inode.userMetadataDirty = 0
229229
}
230+
if item.Content != nil {
231+
inode.buffers.Add(0, item.Content, BUF_CLEAN, false)
232+
}
230233
}
231234
if item.ETag != nil {
232235
inode.s3Metadata["etag"] = []byte(*item.ETag)

log/dup_default.go

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@
1818
package log
1919

2020
import (
21-
"golang.org/x/sys/unix"
2221
"io"
2322
"log/syslog"
2423
"os"
24+
25+
"golang.org/x/sys/unix"
2526
)
2627

2728
func redirectStdout(target *os.File) error {
@@ -32,10 +33,6 @@ func redirectStderr(target *os.File) error {
3233
return unix.Dup2(int(target.Fd()), int(os.Stderr.Fd()))
3334
}
3435

35-
func InitSyslog() io.Writer {
36-
lf, err := syslog.New(syslog.LOG_INFO, "tigrisfs")
37-
if err != nil {
38-
Fatal().Err(err).Msg("Failed to connect to syslog")
39-
}
40-
return lf
36+
func InitSyslog() (io.Writer, error) {
37+
return syslog.New(syslog.LOG_INFO, "tigrisfs")
4138
}

log/dup_windows.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,6 @@ func redirectStderr(target *os.File) error {
3838
return err
3939
}
4040

41-
func InitSyslog() io.Writer {
42-
return logWriter
41+
func InitSyslog() (io.Writer, error) {
42+
return logWriter, nil
4343
}

log/log.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ func Error() *zerolog.Event {
2222
return defaultLog.Error()
2323
}
2424

25+
func Warn() *zerolog.Event {
26+
return defaultLog.Warn()
27+
}
28+
2529
func Info() *zerolog.Event {
2630
return defaultLog.Info()
2731
}

log/logger.go

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -42,30 +42,42 @@ var (
4242

4343
var logWriter io.Writer = os.Stderr
4444

45-
func logStderr(msg string, args ...any) {
46-
_, _ = fmt.Fprintf(os.Stderr, msg, args...)
47-
}
45+
func InitLoggerRedirect(logFileName string, defLog bool) error {
46+
if logFileName == "stderr" || logFileName == "/dev/stderr" || logFileName == "" {
47+
return nil
48+
}
4849

49-
func InitLoggerRedirect(logFileName string) {
5050
if logFileName == "syslog" {
51-
logWriter = InitSyslog()
52-
} else if logFileName != "stderr" && logFileName != "/dev/stderr" && logFileName != "" {
5351
var err error
54-
lf, err := os.OpenFile(logFileName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0o666)
55-
if err != nil {
56-
logStderr("Couldn't open file %v for writing logs", logFileName)
57-
return
58-
}
59-
if err = redirectStdout(lf); err != nil {
60-
logStderr("Couldn't redirect STDOUT to the log file %v", logFileName)
61-
return
52+
logWriter, err = InitSyslog()
53+
if err == nil {
54+
return nil
6255
}
63-
if err = redirectStderr(lf); err != nil {
64-
logStderr("Couldn't redirect STDERR to the log file %v", logFileName)
65-
return
56+
57+
if !defLog {
58+
return err
6659
}
67-
logWriter = lf
60+
61+
// log file is not set and we are deamonizing redirect to default file location
62+
Warn().Err(err).Msg("failed to open syslog. redirecting logs to /var/log/tigrisfs.log")
63+
logFileName = "/var/log/tigrisfs.log"
64+
}
65+
66+
var err error
67+
lf, err := os.OpenFile(logFileName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0o666)
68+
if err != nil {
69+
return fmt.Errorf("couldn't open file %v for writing logs: %w", logFileName, err)
70+
}
71+
if err = redirectStdout(lf); err != nil {
72+
return fmt.Errorf("couldn't redirect STDOUT to the log file %v: %w", logFileName, err)
6873
}
74+
if err = redirectStderr(lf); err != nil {
75+
return fmt.Errorf("couldn't redirect STDERR to the log file %v: %w", logFileName, err)
76+
}
77+
78+
logWriter = lf
79+
80+
return nil
6981
}
7082

7183
func SetCloudLogLevel(level zerolog.Level) {

main.go

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727

2828
"github.com/tigrisdata/tigrisfs/core"
2929
"github.com/tigrisdata/tigrisfs/core/cfg"
30+
"github.com/tigrisdata/tigrisfs/lib"
3031
"github.com/tigrisdata/tigrisfs/log"
3132
"github.com/urfave/cli"
3233

@@ -112,7 +113,15 @@ func main() {
112113
}
113114
}
114115

115-
cfg.InitLoggers(flags)
116+
err = cfg.InitLoggers(flags)
117+
if err != nil {
118+
if !flags.Foreground {
119+
daemonizer.NotifySuccess(false)
120+
}
121+
mainLog.Fatal().Err(err).Msg("Unable to initialize logger")
122+
}
123+
124+
mainLog.Debug().Interface("flags", flags).Msg("config")
116125

117126
mainLog.Info().Str("version", cfg.Version).Msg("Starting TigrisFS version")
118127
mainLog.Info().Str("bucketName", bucketName).Str("mountPoint", flags.MountPoint).Msg("Mounting")
@@ -141,12 +150,20 @@ func main() {
141150
if err != nil {
142151
if !flags.Foreground {
143152
daemonizer.NotifySuccess(false)
153+
// if demonized but started from terminal show error to the user
154+
if lib.IsTTY(os.Stderr) {
155+
_, _ = fmt.Fprintf(os.Stderr, "Mounting file system failed: %v\n", err)
156+
}
144157
}
145158
mainLog.Fatal().Err(err).Msg("Mounting file system failed")
146159
// fatal also terminates itself
147160
} else {
148161
mainLog.Info().Msg("File system has been successfully mounted.")
149162
if !flags.Foreground {
163+
// if demonized but started from terminal show success to the user
164+
if lib.IsTTY(os.Stderr) {
165+
_, _ = fmt.Fprintf(os.Stderr, "File system has been successfully mounted\n")
166+
}
150167
daemonizer.NotifySuccess(true)
151168
mainLog.Debug().Msg("Process is daemonized. Closing stdout and stderr.")
152169
mainLog.E(os.Stderr.Close())

pkg/postinst

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
set -e
44

5-
systemctl daemon-reload
5+
if command -v systemctl >/dev/null 2>&1; then
6+
systemctl daemon-reload
7+
fi
68

79
exit 0

0 commit comments

Comments
 (0)