diff --git a/core/fullNode.go b/core/fullNode.go index 81e760a..a5a031f 100644 --- a/core/fullNode.go +++ b/core/fullNode.go @@ -59,6 +59,8 @@ func (fn *FullNode) CreateGRPCServer(grpcServerAddress string) { pb.RegisterFullNodeServer(grpcServer, fn) reflection.Register(grpcServer) + go fn.Republish() + listener, err := net.Listen("tcp", grpcServerAddress) if err != nil { log.Fatal("cannot create grpc server: ", err) @@ -634,3 +636,21 @@ func (fn *FullNode) PrintRoutingTable() { } } } + +/////////////////////////////////////////////////////// +////// ////// +////// REPLICATION ////// +////// ////// +/////////////////////////////////////////////////////// + +func (fn *FullNode) Republish() { + for { + <-time.After(time.Hour) + for _, key range fn.dht.Storage.GetKeys() { + data := fn.dht.Storage.Read(key, 0, 0) + go func() { + fn.StoreValue(key, data) + }() + } + } + } diff --git a/interfaces/persistence.go b/interfaces/persistence.go index c6bbc4e..c634369 100644 --- a/interfaces/persistence.go +++ b/interfaces/persistence.go @@ -6,4 +6,6 @@ type Persistence interface { Read(key []byte, start int64, end int64) (data *[]byte, err error) Delete(key []byte) error + + GetKeys(key []byte) [][]byte }