From 6221b18120af925dfc8e2bc201120884a41ba7cb Mon Sep 17 00:00:00 2001
From: Hans Moog <hm@mkjc.net>
Date: Tue, 2 Jul 2019 15:09:38 +0200
Subject: [PATCH] Feat: added BundleTailHash to Transaction metadata

---
 .../transactionmetadata.go                    | 49 ++++++++++++++-----
 1 file changed, 37 insertions(+), 12 deletions(-)

diff --git a/packages/model/transactionmetadata/transactionmetadata.go b/packages/model/transactionmetadata/transactionmetadata.go
index 39874a5a..8ba50c3c 100644
--- a/packages/model/transactionmetadata/transactionmetadata.go
+++ b/packages/model/transactionmetadata/transactionmetadata.go
@@ -13,18 +13,20 @@ import (
 // region type definition and constructor //////////////////////////////////////////////////////////////////////////////
 
 type TransactionMetadata struct {
-	hash              ternary.Trytes
-	hashMutex         sync.RWMutex
-	receivedTime      time.Time
-	receivedTimeMutex sync.RWMutex
-	solid             bool
-	solidMutex        sync.RWMutex
-	liked             bool
-	likedMutex        sync.RWMutex
-	finalized         bool
-	finalizedMutex    sync.RWMutex
-	modified          bool
-	modifiedMutex     sync.RWMutex
+	hash                ternary.Trytes
+	hashMutex           sync.RWMutex
+	bundleTailHash      ternary.Trytes
+	bundleTailHashMutex sync.RWMutex
+	receivedTime        time.Time
+	receivedTimeMutex   sync.RWMutex
+	solid               bool
+	solidMutex          sync.RWMutex
+	liked               bool
+	likedMutex          sync.RWMutex
+	finalized           bool
+	finalizedMutex      sync.RWMutex
+	modified            bool
+	modifiedMutex       sync.RWMutex
 }
 
 func New(hash ternary.Trytes) *TransactionMetadata {
@@ -65,6 +67,29 @@ func (metadata *TransactionMetadata) SetHash(hash ternary.Trytes) {
 	}
 }
 
+func (metadata *TransactionMetadata) GetBundleTailHash() ternary.Trytes {
+	metadata.bundleTailHashMutex.RLock()
+	defer metadata.bundleTailHashMutex.RUnlock()
+
+	return metadata.bundleTailHash
+}
+
+func (metadata *TransactionMetadata) SetBundleTailHash(bundleTailHash ternary.Trytes) {
+	metadata.bundleTailHashMutex.RLock()
+	if metadata.bundleTailHash != bundleTailHash {
+		metadata.bundleTailHashMutex.RUnlock()
+		metadata.bundleTailHashMutex.Lock()
+		defer metadata.bundleTailHashMutex.Unlock()
+		if metadata.bundleTailHash != bundleTailHash {
+			metadata.bundleTailHash = bundleTailHash
+
+			metadata.SetModified(true)
+		}
+	} else {
+		metadata.bundleTailHashMutex.RUnlock()
+	}
+}
+
 func (metadata *TransactionMetadata) GetReceivedTime() time.Time {
 	metadata.receivedTimeMutex.RLock()
 	defer metadata.receivedTimeMutex.RUnlock()
-- 
GitLab