From e34e06c15a9796284f22cc441cd8b106a0550aaa Mon Sep 17 00:00:00 2001
From: Zardosht Kasheff <zardosht@tokutek.com>
Date: Sun, 10 Jul 2011 16:20:15 +0000
Subject: [PATCH] [t:3738], make dsn into a struct

git-svn-id: file:///svn/toku/tokudb@32906 c7de825b-a66e-492c-adef-691d508d4ae1
---
 newbrt/brt-serialize.c |  8 ++++----
 newbrt/brt.c           | 24 ++++++++++++------------
 newbrt/brttypes.h      |  8 ++++----
 3 files changed, 20 insertions(+), 20 deletions(-)

diff --git a/newbrt/brt-serialize.c b/newbrt/brt-serialize.c
index a7472f06d0d..94095b238bd 100644
--- a/newbrt/brt-serialize.c
+++ b/newbrt/brt-serialize.c
@@ -531,7 +531,7 @@ rebalance_brtnode_leaf(BRTNODE node)
     for (int i = 0; i < node->n_children; i++) {
         DSN curr_dsn = BLB_MAX_DSN_APPLIED(node,i);
         MSN curr_msn = BLB_MAX_MSN_APPLIED(node,i);
-        min_dsn = (curr_dsn < min_dsn) ? curr_dsn : min_dsn;
+        min_dsn = (curr_dsn.dsn < min_dsn.dsn) ? curr_dsn : min_dsn;
         max_msn = (curr_msn.msn > max_msn.msn) ? curr_msn : max_msn;
     }
     
@@ -813,7 +813,7 @@ BASEMENTNODE toku_create_empty_bn(void) {
 
 BASEMENTNODE toku_create_empty_bn_no_buffer(void) {
     BASEMENTNODE XMALLOC(bn);
-    bn->max_dsn_applied = 0;
+    bn->max_dsn_applied.dsn = 0;
     bn->max_msn_applied.msn = 0;
     bn->buffer = NULL;
     bn->n_bytes_in_buffer = 0;
@@ -1005,7 +1005,7 @@ setup_available_brtnode_partition(BRTNODE node, int i) {
     if (node->height == 0) {
 	set_BLB(node, i, toku_create_empty_bn());
         BLB_MAX_MSN_APPLIED(node,i) = node->max_msn_applied_to_node_on_disk;
-        BLB_MAX_DSN_APPLIED(node,i) = 0;
+        BLB_MAX_DSN_APPLIED(node,i).dsn = 0;
     }
     else {
 	set_BNC(node, i, toku_create_empty_nl());
@@ -1681,7 +1681,7 @@ deserialize_brtheader (int fd, struct rbuf *rb, struct brt_header **brth) {
     h->dirty=0;
     h->panic = 0;
     h->panic_string = 0;
-    h->curr_dsn = MIN_DSN+1;
+    h->curr_dsn.dsn = MIN_DSN.dsn+1;
     toku_list_init(&h->live_brts);
     toku_list_init(&h->zombie_brts);
     toku_list_init(&h->checkpoint_before_commit_link);
diff --git a/newbrt/brt.c b/newbrt/brt.c
index 0f6d4b17849..05c8fc06c25 100644
--- a/newbrt/brt.c
+++ b/newbrt/brt.c
@@ -149,9 +149,9 @@ toku_assert_entire_node_in_memory(BRTNODE node) {
 //
 static void
 set_new_DSN_for_node(BRTNODE node, BRT t) {
-    assert(t->h->curr_dsn > MIN_DSN);
+    assert(t->h->curr_dsn.dsn > MIN_DSN.dsn);
     node->dsn = t->h->curr_dsn;
-    t->h->curr_dsn++;
+    t->h->curr_dsn.dsn++;
 }
 
 static u_int32_t
@@ -293,7 +293,7 @@ int toku_pin_brtnode_if_clean(
         ); // this one doesn't need to use the toku_pin_brtnode function because it doesn't bring anything in, so it cannot create a non-up-to-date leaf node.
     if (r==0) {
         BRTNODE node = node_v;
-        if (node->dsn == INVALID_DSN) {
+        if (node->dsn.dsn == INVALID_DSN.dsn) {
             set_new_DSN_for_node(node, brt);
         }
         maybe_apply_ancestors_messages_to_node(brt, node, ancestors, bounds);
@@ -324,7 +324,7 @@ int toku_pin_brtnode (BRT brt, BLOCKNUM blocknum, u_int32_t fullhash,
             unlockers);
     if (r==0) {
 	BRTNODE node = node_v;
-        if (node->dsn == INVALID_DSN) {
+        if (node->dsn.dsn == INVALID_DSN.dsn) {
             set_new_DSN_for_node(node, brt);
         }
 	maybe_apply_ancestors_messages_to_node(brt, node, ancestors, bounds);
@@ -358,7 +358,7 @@ void toku_pin_brtnode_holding_lock (BRT brt, BLOCKNUM blocknum, u_int32_t fullha
         );
     assert(r==0);
     BRTNODE node = node_v;
-    if (node->dsn == INVALID_DSN) {
+    if (node->dsn.dsn == INVALID_DSN.dsn) {
         set_new_DSN_for_node(node, brt);
     }
     maybe_apply_ancestors_messages_to_node(brt, node, ancestors, bounds);
@@ -1002,7 +1002,7 @@ brt_init_new_root(BRT brt, BRTNODE nodea, BRTNODE nodeb, DBT splitk, CACHEKEY *r
 	invariant(msna.msn == msnb.msn);
 	newroot->max_msn_applied_to_node_on_disk = msna;
     }
-    newroot->dsn = (nodea->dsn > nodeb->dsn) ? nodea->dsn : nodeb->dsn;
+    newroot->dsn = (nodea->dsn.dsn > nodeb->dsn.dsn) ? nodea->dsn : nodeb->dsn;
     BP_STATE(newroot,0) = PT_AVAIL;
     BP_STATE(newroot,1) = PT_AVAIL;
     newroot->dirty = 1;
@@ -2399,7 +2399,7 @@ maybe_merge_pinned_nodes (BRTNODE parent, int childnum_of_parent, struct kv_pair
 	    invariant(msn_max.msn <= parent->max_msn_applied_to_node_on_disk.msn);  // parent msn must be >= children's msn
 	}
     }
-    dsn_max = (a->dsn > b->dsn) ? a->dsn : b->dsn; 
+    dsn_max = (a->dsn.dsn > b->dsn.dsn) ? a->dsn : b->dsn; 
     if (a->height == 0) {
 	maybe_merge_pinned_leaf_nodes(parent, childnum_of_parent, a, b, parent_splitk, did_merge, did_rebalance, splitk);
     } else {
@@ -2615,7 +2615,7 @@ static void assert_leaf_up_to_date(BRTNODE node) {
     assert(node->height == 0);
     toku_assert_entire_node_in_memory(node);
     for (int i=0; i < node->n_children; i++) {
-	assert(BLB_MAX_DSN_APPLIED(node, i) >= MIN_DSN);
+	assert(BLB_MAX_DSN_APPLIED(node, i).dsn >= MIN_DSN.dsn);
     }
 }
 
@@ -3668,7 +3668,7 @@ brt_alloc_init_header(BRT t, TOKUTXN txn) {
 
     memset(&t->h->descriptor, 0, sizeof(t->h->descriptor));
 
-    t->h->curr_dsn = MIN_DSN + 1; // start at MIN_DSN + 1, as MIN_DSN is reserved for basement nodes
+    t->h->curr_dsn.dsn = MIN_DSN.dsn + 1; // start at MIN_DSN + 1, as MIN_DSN is reserved for basement nodes
 
     r = brt_init_header(t, txn);
     if (r != 0) goto died2;
@@ -5179,7 +5179,7 @@ partition_requires_msg_application(BRTNODE node, int childnum, ANCESTORS ancesto
         curr_ancestors = curr_ancestors->next
         ) 
     {
-        if (curr_ancestors->node->dsn > BLB_MAX_DSN_APPLIED(node,childnum)) {
+        if (curr_ancestors->node->dsn.dsn > BLB_MAX_DSN_APPLIED(node,childnum).dsn) {
             requires_msg_application = TRUE;
             break;
         }
@@ -5227,7 +5227,7 @@ maybe_apply_ancestors_messages_to_node (BRT t, BRTNODE node, ANCESTORS ancestors
                 curr_ancestors->childnum,
                 &curr_bounds
                 );
-            curr_bn->max_dsn_applied = (curr_ancestors->node->dsn > curr_bn->max_dsn_applied) 
+            curr_bn->max_dsn_applied = (curr_ancestors->node->dsn.dsn > curr_bn->max_dsn_applied.dsn) 
                 ? curr_ancestors->node->dsn 
                 : curr_bn->max_dsn_applied;
 	    curr_ancestors= curr_ancestors->next;
@@ -5266,7 +5266,7 @@ brt_search_basement_node(
     BRT_CURSOR brtcursor
     )
 {
-    assert(bn->max_dsn_applied >= MIN_DSN);
+    assert(bn->max_dsn_applied.dsn >= MIN_DSN.dsn);
 
     // Now we have to convert from brt_search_t to the heaviside function with a direction.  What a pain...
 
diff --git a/newbrt/brttypes.h b/newbrt/brttypes.h
index cd104fc54be..63b3ca7e655 100644
--- a/newbrt/brttypes.h
+++ b/newbrt/brttypes.h
@@ -60,10 +60,10 @@ typedef struct __toku_msn { u_int64_t msn; } MSN;
 #define MIN_MSN  ((MSN){(u_int64_t)1000*1000*1000})  // first 1B values reserved for messages created before Dr. No (for upgrade)
 #define MAX_MSN  ((MSN){UINT64_MAX})
 
-typedef int64_t DSN; // DESERIALIZATION sequence number
-#define INVALID_DSN -1
-#define MIN_DSN 0
-#define MAX_DSN INT64_MAX
+typedef struct __toku_dsn { int64_t dsn; } DSN; // DESERIALIZATION sequence number
+#define INVALID_DSN ((DSN){-1})
+#define MIN_DSN ((DSN){0})
+#define MAX_DSN ((DSN){INT64_MAX})
 
 /* At the brt layer, a FILENUM uniquely identifies an open file.
  * At the ydb layer, a DICTIONARY_ID uniquely identifies an open dictionary.
-- 
2.30.9