Browse Source

[fix] delete

master
extra1563 4 years ago
parent
commit
3925f1e625
1 changed files with 11 additions and 30 deletions
  1. 11
    30
      src/broker/modules/subscription.go

+ 11
- 30
src/broker/modules/subscription.go View File

4
 	"errors"
4
 	"errors"
5
 )
5
 )
6
 
6
 
7
+// Structure for managing subscriptions
7
 type sub_manager struct {
8
 type sub_manager struct {
8
-	list topicList
9
-
10
-	/* Manage sub# */
11
-	count_sub  int                  // Subscription #
12
-	emptylist  []int                // To administrate sub #
13
-	ip2sub     map[string][]int     // ip2sub[ip] = sub# ...
14
-	sub2ip     map[int]string       // sub2ip[sub#] = ip
15
-	sub2node   map[int][]nodeInfo // sub2node[sub#] = node_addr ...
16
-	israngesub map[int]bool         // To manage when deleted
9
+	list 	   	topicList			// Data Structure for Manage TopicNode
10
+	count_sub  	int                 // Subscription#
11
+	emptylist  	[]int               // For administrate Subscription#(Deleted)
12
+	ip2sub     	map[string][]int    // For mapping {ip : Sub#s List}
13
+	sub2ip     	map[int]string      // For mapping {Sub# : ip}
14
+	sub2node   	map[int][]nodeInfo 	// For mapping {Sub# : NodeInfo List}
15
+	israngesub 	map[int]bool        // To manage when deleted
17
 }
16
 }
18
 
17
 
19
 type nodeInfo struct{
18
 type nodeInfo struct{
180
 		}
179
 		}
181
 		addValNodeList = append(addValNodeList, valptr)
180
 		addValNodeList = append(addValNodeList, valptr)
182
 		manager.sub2node[subnumber] = append(manager.sub2node[subnumber], nodeInfo{addValNodeList, topic})
181
 		manager.sub2node[subnumber] = append(manager.sub2node[subnumber], nodeInfo{addValNodeList, topic})
182
+		manager.israngesub[subnumber] = false
183
 		valptr.insertSub(operator[0], subnumber, true)
183
 		valptr.insertSub(operator[0], subnumber, true)
184
 		return nil // AddSubscription ok
184
 		return nil // AddSubscription ok
185
 	} else {
185
 	} else {
214
 
214
 
215
 		} else {
215
 		} else {
216
 			// if they are enclosed in '||' -> Insert Value to single_operator_list
216
 			// if they are enclosed in '||' -> Insert Value to single_operator_list
217
+			manager.israngesub[subnumber] = false
217
 			valptr1.insertSub(operator[0], subnumber, true)
218
 			valptr1.insertSub(operator[0], subnumber, true)
218
 			valptr2.insertSub(operator[2], subnumber, true)
219
 			valptr2.insertSub(operator[2], subnumber, true)
219
 		}
220
 		}
235
 		for j := 0; j < len(manager.sub2node[sub]); j++ {
236
 		for j := 0; j < len(manager.sub2node[sub]); j++ {
236
 			nodeinfo := manager.sub2node[sub][j]
237
 			nodeinfo := manager.sub2node[sub][j]
237
 			node := nodeinfo.valNodeList
238
 			node := nodeinfo.valNodeList
239
+
238
 			if manager.israngesub[sub] {
240
 			if manager.israngesub[sub] {
239
 				for k := 0; k < len(node); k++ {
241
 				for k := 0; k < len(node); k++ {
240
 					pos := findSub(node[k].range2sub_s, sub)
242
 					pos := findSub(node[k].range2sub_s, sub)
260
 						node[k].range2sub_eb = remove(node[k].range2sub_eb, pos)
262
 						node[k].range2sub_eb = remove(node[k].range2sub_eb, pos)
261
 						manager.emptylist = append(manager.emptylist, sub)
263
 						manager.emptylist = append(manager.emptylist, sub)
262
 					}
264
 					}
263
-
264
-					isempty := node[k].isEmpty()
265
-
266
-					// Delete if Value Node is empty
267
-					if isempty && node[k] != nil {
268
-						prev_node := node[k].prev
269
-						next_node := node[k].next
270
-
271
-						prev_node.next = node[k].next
272
-						next_node.prev = node[k].prev
273
-					}
274
 				}
265
 				}
275
 			} else {
266
 			} else {
276
 				for k := 0; k < len(node); k++ {
267
 				for k := 0; k < len(node); k++ {
304
 						manager.emptylist = append(manager.emptylist, sub)
295
 						manager.emptylist = append(manager.emptylist, sub)
305
 					}
296
 					}
306
 
297
 
307
-					isempty := node[k].isEmpty()
308
-
309
-					// Delete if Value Node is empty
310
-					if isempty && node[k] != nil {
311
-						prevNode := node[k].prev
312
-						nextNode := node[k].next
313
-
314
-						prevNode.next = node[k].next
315
-						nextNode.prev = node[k].prev
316
-					}
317
 				}
298
 				}
318
 			}
299
 			}
319
 		}
300
 		}

Loading…
Cancel
Save