-
Notifications
You must be signed in to change notification settings - Fork 7.2k
/
IWatchManager.java
159 lines (142 loc) · 4.39 KB
/
IWatchManager.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.zookeeper.server.watch;
import java.io.PrintWriter;
import java.util.List;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.data.ACL;
public interface IWatchManager {
/**
* Add watch to specific path.
*
* @param path znode path
* @param watcher watcher object reference
*
* @return true if the watcher added is not already present
*/
boolean addWatch(String path, Watcher watcher);
/**
* Add watch to specific path.
*
* @param path znode path
* @param watcher watcher object reference
* @param watcherMode the watcher mode to use
*
* @return true if the watcher added is not already present
*/
default boolean addWatch(String path, Watcher watcher, WatcherMode watcherMode) {
if (watcherMode == WatcherMode.DEFAULT_WATCHER_MODE) {
return addWatch(path, watcher);
}
throw new UnsupportedOperationException(); // custom implementations must defeat this
}
/**
* Checks the specified watcher exists for the given path.
*
* @param path znode path
* @param watcher watcher object reference
*
* @return true if the watcher exists, false otherwise
*/
boolean containsWatcher(String path, Watcher watcher);
/**
* Removes the specified watcher for the given path.
*
* @param path znode path
* @param watcher watcher object reference
*
* @return true if the watcher successfully removed, false otherwise
*/
boolean removeWatcher(String path, Watcher watcher);
/**
* The entry to remove the watcher when the cnxn is closed.
*
* @param watcher watcher object reference
*/
void removeWatcher(Watcher watcher);
/**
* Distribute the watch event for the given path.
*
* @param path znode path
* @param type the watch event type
* @param acl ACL of the znode in path
*
* @return the watchers have been notified
*/
WatcherOrBitSet triggerWatch(String path, EventType type, List<ACL> acl);
/**
* Distribute the watch event for the given path, but ignore those
* suppressed ones.
*
* @param path znode path
* @param type the watch event type
* @param suppress the suppressed watcher set
*
* @return the watchers have been notified
*/
WatcherOrBitSet triggerWatch(String path, EventType type, List<ACL> acl, WatcherOrBitSet suppress);
/**
* Get the size of watchers.
*
* @return the watchers number managed in this class.
*/
int size();
/**
* Clean up the watch manager.
*/
void shutdown();
/**
* Returns a watch summary.
*
* @return watch summary
* @see WatchesSummary
*/
WatchesSummary getWatchesSummary();
/**
* Returns a watch report.
*
* @return watch report
* @see WatchesReport
*/
WatchesReport getWatches();
/**
* Returns a watch report by path.
*
* @return watch report
* @see WatchesPathReport
*/
WatchesPathReport getWatchesByPath();
/**
* String representation of watches. Warning, may be large!
*
* @param pwriter the writer to dump the watches
* @param byPath iff true output watches by paths, otw output
* watches by connection
*
*/
void dumpWatches(PrintWriter pwriter, boolean byPath);
/**
* Return the current number of recursive watchers
*
* @return qty
*/
default int getRecursiveWatchQty() {
return 0;
}
}