From e227483614c41077a20c51ad60d0f3ed61233478 Mon Sep 17 00:00:00 2001 From: bel Date: Sun, 5 Nov 2023 20:00:22 -0700 Subject: [PATCH] todos --- replicator/driver.go | 14 ++++++++++---- replicator/filetree.go | 6 +++--- replicator/main.go | 10 ++++++++++ replicator/map.go | 8 ++++---- replicator/replicator.go | 18 +++++++++++++++--- 5 files changed, 42 insertions(+), 14 deletions(-) create mode 100644 replicator/main.go diff --git a/replicator/driver.go b/replicator/driver.go index c4bb114..ec8cc1a 100644 --- a/replicator/driver.go +++ b/replicator/driver.go @@ -5,6 +5,7 @@ import ( "fmt" "net/url" "path" + "strconv" "time" ) @@ -51,10 +52,15 @@ func NewDriver(ctx context.Context, driver url.URL) (Driver, error) { } } -func (version Version) ToTime() (time.Time, error) { - panic(nil) // TODO +func (version Version) AsTime() (time.Time, error) { + if len(version) == 0 { + return time.Time{}, nil + } + n, err := strconv.ParseInt(string(version), 10, 64) + return time.Unix(0, n), err } -func VersionFromTime(t time.Time) Version { - panic(nil) // TODO +func TimeAsVersion(t time.Time) Version { + n := t.UnixNano() + return []byte(strconv.FormatInt(n, 10)) } diff --git a/replicator/filetree.go b/replicator/filetree.go index f3fb93d..779d3bc 100644 --- a/replicator/filetree.go +++ b/replicator/filetree.go @@ -132,12 +132,12 @@ func (tree FileTree) realpath(key Key) string { return path.Join(string(tree), namespace, key.Key+".bin") } -func (tree FileTree) getVersion(key Key) ([]byte, error) { +func (tree FileTree) getVersion(key Key) (Version, error) { v, err := tree._getVersion(key) if v == (time.Time{}) { return nil, err } - return []byte(strconv.FormatInt(v.UnixNano(), 10)), err + return TimeAsVersion(v), err } func (tree FileTree) _getVersion(key Key) (time.Time, error) { @@ -151,7 +151,7 @@ func (tree FileTree) _getVersion(key Key) (time.Time, error) { return info.ModTime(), nil } -func (tree FileTree) fromVersion(v []byte) (time.Time, error) { +func (tree FileTree) fromVersion(v Version) (time.Time, error) { if len(v) == 0 { return time.Time{}, nil } diff --git a/replicator/main.go b/replicator/main.go new file mode 100644 index 0000000..deffa5e --- /dev/null +++ b/replicator/main.go @@ -0,0 +1,10 @@ +package replicator + +import ( + "context" + "errors" +) + +func Main(ctx context.Context) error { + return errors.New("not impl") +} diff --git a/replicator/map.go b/replicator/map.go index e210b3c..8e26abe 100644 --- a/replicator/map.go +++ b/replicator/map.go @@ -49,9 +49,9 @@ func (m Map) Set(_ context.Context, key Key, value Value, version Version) error if version != nil { if was, ok := m.m[key]; !ok { - } else if wasVersion, err := was.Version.ToTime(); err != nil { + } else if wasVersion, err := was.Version.AsTime(); err != nil { return err - } else if wantVersion, err := version.ToTime(); err != nil { + } else if wantVersion, err := version.AsTime(); err != nil { return err } else if wantVersion.Before(wasVersion) { return nil // conflict @@ -69,9 +69,9 @@ func (m Map) Del(_ context.Context, k Key, v Version) error { if v != nil { if was, ok := m.m[k]; !ok { return nil - } else if wasVersion, err := was.Version.ToTime(); err != nil { + } else if wasVersion, err := was.Version.AsTime(); err != nil { return err - } else if wantVersion, err := v.ToTime(); err != nil { + } else if wantVersion, err := v.AsTime(); err != nil { return err } else if wantVersion.Before(wasVersion) { return nil // conflict diff --git a/replicator/replicator.go b/replicator/replicator.go index deffa5e..dfde17f 100644 --- a/replicator/replicator.go +++ b/replicator/replicator.go @@ -2,9 +2,21 @@ package replicator import ( "context" - "errors" + "io" ) -func Main(ctx context.Context) error { - return errors.New("not impl") +type Replicator struct { + Src Driver + Dest Driver +} + +func NewReplicator(src, dest Driver) Replicator { + return Replicator{ + Src: src, + Dest: dest, + } +} + +func (r Replicator) Stream(ctx context.Context) error { + return io.EOF }