@@ -114,28 +114,58 @@ func (c *Client) Start() {
114
114
115
115
// Acquire starts the acquire process for the specified chain point
116
116
func (c * Client ) Acquire (point * common.Point ) error {
117
- var msg string
118
- if point != nil {
119
- msg = fmt .Sprintf (
120
- "calling Acquire(point: {Slot: %d, Hash: %x})" ,
121
- point .Slot ,
122
- point .Hash ,
117
+ // Use volatile tip if no point provided
118
+ if point == nil {
119
+ return c .AcquireVolatileTip ()
120
+ }
121
+ c .Protocol .Logger ().
122
+ Debug (
123
+ fmt .Sprintf (
124
+ "calling Acquire(point: {Slot: %d, Hash: %x})" ,
125
+ point .Slot ,
126
+ point .Hash ,
127
+ ),
128
+ "component" , "network" ,
129
+ "protocol" , ProtocolName ,
130
+ "role" , "client" ,
131
+ "connection_id" , c .callbackContext .ConnectionId .String (),
123
132
)
124
- } else {
125
- msg = "calling Acquire(point: latest)"
133
+ c .busyMutex .Lock ()
134
+ defer c .busyMutex .Unlock ()
135
+ acquireTarget := AcquireSpecificPoint {
136
+ Point : * point ,
126
137
}
138
+ return c .acquire (acquireTarget )
139
+ }
140
+
141
+ func (c * Client ) AcquireVolatileTip () error {
142
+ c .Protocol .Logger ().
143
+ Debug (
144
+ "calling AcquireVolatileTip" ,
145
+ "component" , "network" ,
146
+ "protocol" , ProtocolName ,
147
+ "role" , "client" ,
148
+ "connection_id" , c .callbackContext .ConnectionId .String (),
149
+ )
150
+ c .busyMutex .Lock ()
151
+ defer c .busyMutex .Unlock ()
152
+ acquireTarget := AcquireVolatileTip {}
153
+ return c .acquire (acquireTarget )
154
+ }
127
155
156
+ func (c * Client ) AcquireImmutableTip () error {
128
157
c .Protocol .Logger ().
129
158
Debug (
130
- msg ,
159
+ "calling AcquireImmutableTip" ,
131
160
"component" , "network" ,
132
161
"protocol" , ProtocolName ,
133
162
"role" , "client" ,
134
163
"connection_id" , c .callbackContext .ConnectionId .String (),
135
164
)
136
165
c .busyMutex .Lock ()
137
166
defer c .busyMutex .Unlock ()
138
- return c .acquire (point )
167
+ acquireTarget := AcquireImmutableTip {}
168
+ return c .acquire (acquireTarget )
139
169
}
140
170
141
171
// Release releases the previously acquired chain point
@@ -906,19 +936,29 @@ func (c *Client) handleResult(msg protocol.Message) error {
906
936
return nil
907
937
}
908
938
909
- func (c * Client ) acquire (point * common. Point ) error {
939
+ func (c * Client ) acquire (acquireTarget AcquireTarget ) error {
910
940
var msg protocol.Message
911
941
if c .acquired {
912
- if point != nil {
913
- msg = NewMsgReAcquire (* point )
914
- } else {
915
- msg = NewMsgReAcquireNoPoint ()
942
+ switch t := acquireTarget .(type ) {
943
+ case AcquireSpecificPoint :
944
+ msg = NewMsgReAcquire (t .Point )
945
+ case AcquireVolatileTip :
946
+ msg = NewMsgReAcquireVolatileTip ()
947
+ case AcquireImmutableTip :
948
+ msg = NewMsgReAcquireImmutableTip ()
949
+ default :
950
+ return fmt .Errorf ("invalid acquire point provided" )
916
951
}
917
952
} else {
918
- if point != nil {
919
- msg = NewMsgAcquire (* point )
920
- } else {
921
- msg = NewMsgAcquireNoPoint ()
953
+ switch t := acquireTarget .(type ) {
954
+ case AcquireSpecificPoint :
955
+ msg = NewMsgAcquire (t .Point )
956
+ case AcquireVolatileTip :
957
+ msg = NewMsgAcquireVolatileTip ()
958
+ case AcquireImmutableTip :
959
+ msg = NewMsgAcquireImmutableTip ()
960
+ default :
961
+ return fmt .Errorf ("invalid acquire point provided" )
922
962
}
923
963
}
924
964
if err := c .SendMessage (msg ); err != nil {
@@ -944,7 +984,7 @@ func (c *Client) release() error {
944
984
func (c * Client ) runQuery (query interface {}, result interface {}) error {
945
985
msg := NewMsgQuery (query )
946
986
if ! c .acquired {
947
- if err := c .acquire (nil ); err != nil {
987
+ if err := c .acquire (AcquireVolatileTip {} ); err != nil {
948
988
return err
949
989
}
950
990
}
0 commit comments