From 3258d9c61608edb9b34b05abdb866dc03b73df1f Mon Sep 17 00:00:00 2001
From: Leonard Lyubich <leonard@nspcc.ru>
Date: Mon, 6 Sep 2021 17:28:55 +0300
Subject: [PATCH] [#790] writecache: Log each writing operation

Call `storagelog.Write` in all places after the successful writing op.

Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
---
 pkg/local_object_storage/writecache/delete.go  |  7 +++++++
 pkg/local_object_storage/writecache/options.go |  2 +-
 pkg/local_object_storage/writecache/persist.go | 11 +++++++++++
 pkg/local_object_storage/writecache/put.go     |  4 ++++
 pkg/local_object_storage/writecache/storage.go |  4 ++++
 5 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/pkg/local_object_storage/writecache/delete.go b/pkg/local_object_storage/writecache/delete.go
index fb0f752d2..a6ad60e96 100644
--- a/pkg/local_object_storage/writecache/delete.go
+++ b/pkg/local_object_storage/writecache/delete.go
@@ -6,6 +6,7 @@ import (
 	objectSDK "github.com/nspcc-dev/neofs-api-go/pkg/object"
 	"github.com/nspcc-dev/neofs-node/pkg/core/object"
 	"github.com/nspcc-dev/neofs-node/pkg/local_object_storage/blobstor/fstree"
+	storagelog "github.com/nspcc-dev/neofs-node/pkg/local_object_storage/internal/log"
 	"go.etcd.io/bbolt"
 )
 
@@ -21,6 +22,7 @@ func (c *cache) Delete(addr *objectSDK.Address) error {
 			c.mem = c.mem[:len(c.mem)-1]
 			c.curMemSize -= uint64(len(c.mem[i].data))
 			c.mtx.Unlock()
+			storagelog.Write(c.log, storagelog.AddressField(saddr), storagelog.OpField("in-mem DELETE"))
 			return nil
 		}
 	}
@@ -44,6 +46,7 @@ func (c *cache) Delete(addr *objectSDK.Address) error {
 			return err
 		}
 		c.dbSize.Sub(uint64(has))
+		storagelog.Write(c.log, storagelog.AddressField(saddr), storagelog.OpField("db DELETE"))
 		return nil
 	}
 
@@ -52,5 +55,9 @@ func (c *cache) Delete(addr *objectSDK.Address) error {
 		err = object.ErrNotFound
 	}
 
+	if err == nil {
+		storagelog.Write(c.log, storagelog.AddressField(saddr), storagelog.OpField("fstree DELETE"))
+	}
+
 	return err
 }
diff --git a/pkg/local_object_storage/writecache/options.go b/pkg/local_object_storage/writecache/options.go
index 1aa78da5f..62a40cc6c 100644
--- a/pkg/local_object_storage/writecache/options.go
+++ b/pkg/local_object_storage/writecache/options.go
@@ -31,7 +31,7 @@ type options struct {
 // WithLogger sets logger.
 func WithLogger(log *zap.Logger) Option {
 	return func(o *options) {
-		o.log = log
+		o.log = log.With(zap.String("component", "WriteCache"))
 	}
 }
 
diff --git a/pkg/local_object_storage/writecache/persist.go b/pkg/local_object_storage/writecache/persist.go
index 636b06112..d6d766212 100644
--- a/pkg/local_object_storage/writecache/persist.go
+++ b/pkg/local_object_storage/writecache/persist.go
@@ -4,6 +4,7 @@ import (
 	"sort"
 	"time"
 
+	storagelog "github.com/nspcc-dev/neofs-node/pkg/local_object_storage/internal/log"
 	"go.etcd.io/bbolt"
 	"go.uber.org/zap"
 )
@@ -30,6 +31,13 @@ func (c *cache) persistLoop() {
 				zap.Duration("took", time.Since(start)),
 				zap.Int("total", len(m)))
 
+			for i := range m {
+				storagelog.Write(c.log,
+					storagelog.AddressField(m[i].addr),
+					storagelog.OpField("in-mem DELETE persist"),
+				)
+			}
+
 			c.mtx.Lock()
 			c.curMemSize = 0
 			n := copy(c.mem, c.mem[len(m):])
@@ -64,6 +72,7 @@ func (c *cache) persistToCache(objs []objectInfo) []int {
 			}
 			sz += uint64(len(objs[i].data))
 			doneMem = append(doneMem, i)
+			storagelog.Write(c.log, storagelog.AddressField(objs[i].addr), storagelog.OpField("db PUT"))
 		}
 		return nil
 	})
@@ -88,6 +97,8 @@ func (c *cache) persistToCache(objs []objectInfo) []int {
 		err := c.fsTree.Put(objs[i].obj.Address(), objs[i].data)
 		if err != nil {
 			failDisk = append(failDisk, i)
+		} else {
+			storagelog.Write(c.log, storagelog.AddressField(objs[i].addr), storagelog.OpField("fstree PUT"))
 		}
 	}
 
diff --git a/pkg/local_object_storage/writecache/put.go b/pkg/local_object_storage/writecache/put.go
index fb6ed6c00..588cdd20c 100644
--- a/pkg/local_object_storage/writecache/put.go
+++ b/pkg/local_object_storage/writecache/put.go
@@ -4,6 +4,7 @@ import (
 	"errors"
 
 	"github.com/nspcc-dev/neofs-node/pkg/core/object"
+	storagelog "github.com/nspcc-dev/neofs-node/pkg/local_object_storage/internal/log"
 )
 
 // ErrBigObject is returned when object is too big to be placed in cache.
@@ -34,6 +35,9 @@ func (c *cache) Put(o *object.Object) error {
 		c.mem = append(c.mem, oi)
 
 		c.mtx.Unlock()
+
+		storagelog.Write(c.log, storagelog.AddressField(oi.addr), storagelog.OpField("in-mem PUT"))
+
 		return nil
 	}
 
diff --git a/pkg/local_object_storage/writecache/storage.go b/pkg/local_object_storage/writecache/storage.go
index 413ec86a5..17e4075aa 100644
--- a/pkg/local_object_storage/writecache/storage.go
+++ b/pkg/local_object_storage/writecache/storage.go
@@ -10,6 +10,7 @@ import (
 	objectSDK "github.com/nspcc-dev/neofs-api-go/pkg/object"
 	"github.com/nspcc-dev/neofs-node/pkg/core/object"
 	"github.com/nspcc-dev/neofs-node/pkg/local_object_storage/blobstor/fstree"
+	storagelog "github.com/nspcc-dev/neofs-node/pkg/local_object_storage/internal/log"
 	"github.com/nspcc-dev/neofs-node/pkg/util"
 	"go.etcd.io/bbolt"
 	"go.uber.org/zap"
@@ -109,6 +110,7 @@ func (c *cache) deleteFromDB(keys [][]byte) error {
 				return err
 			}
 			sz += uint64(len(has))
+			storagelog.Write(c.log, storagelog.AddressField(string(keys[i])), storagelog.OpField("db DELETE"))
 		}
 		return nil
 	})
@@ -135,6 +137,8 @@ func (c *cache) deleteFromDisk(keys [][]byte) error {
 			lastErr = err
 			c.log.Error("can't remove object from write-cache", zap.Error(err))
 			continue
+		} else if err == nil {
+			storagelog.Write(c.log, storagelog.AddressField(string(keys[i])), storagelog.OpField("fstree DELETE"))
 		}
 	}