| 1 |
|
|---|
| 2 | DIM version 14.07 Release Notes
|
|---|
| 3 |
|
|---|
| 4 | Notes 1 and 2 for Unix Users only
|
|---|
| 5 | NOTE 1: In order to "make" DIM two environment variables should be set:
|
|---|
| 6 | OS = one of {HP-UX, AIX, OSF1, Solaris, SunOS, LynxOS, Linux}
|
|---|
| 7 | DIMDIR = the path name of DIM's top level directory
|
|---|
| 8 | The user should then go to DIM's top level directory and do:
|
|---|
| 9 | > source .setup
|
|---|
| 10 | > gmake all
|
|---|
| 11 | Or, if there is no support for C++ on the machine:
|
|---|
| 12 | > gmake CPP=no all
|
|---|
| 13 |
|
|---|
| 14 | NOTE 2: The Name Server (Dns), DID, servers and clients (if running in
|
|---|
| 15 | background) should be started whith the output redirected to a
|
|---|
| 16 | logfile ex:
|
|---|
| 17 | Dns </dev/null >& dns.log &
|
|---|
| 18 |
|
|---|
| 19 | NOTE 3: The Version Number service provided by servers is now set to 1407
|
|---|
| 20 | (version 14.07).
|
|---|
| 21 |
|
|---|
| 22 | 07/04/2004
|
|---|
| 23 | Changes for version 14.0:
|
|---|
| 24 | - Spring Cleanup
|
|---|
| 25 | Cleaned up inline methods out of include files.
|
|---|
| 26 | Fixed some virtual destructors
|
|---|
| 27 | Removed some unnecessary system include files
|
|---|
| 28 | Fixed ctime_r to work on all platforms (Solaris, LynxOS too)
|
|---|
| 29 |
|
|---|
| 30 | 21/04/2004
|
|---|
| 31 | Changes for version 14.1:
|
|---|
| 32 | - Now if a server declares an exit handler (DimServer::addExitHandler
|
|---|
| 33 | or dis_add_exit_handler) the user is responsible for exiting.
|
|---|
| 34 | DIM will not exit by itself anymore.
|
|---|
| 35 | - The windows version now also distributes MSVCRTD.DLL.
|
|---|
| 36 | - Fixed a bug where servers could get confused if similar longish
|
|---|
| 37 | service names were used in different servers.
|
|---|
| 38 |
|
|---|
| 39 | 18/05/2004
|
|---|
| 40 | Changes for version 14.2:
|
|---|
| 41 | - Cleaned up some "C" warnings
|
|---|
| 42 | - Linux Did didn't display RPC formats properly - fixed.
|
|---|
| 43 | - RPC structures were not transfered correctly back to the client,
|
|---|
| 44 | the format of the structure was currupted - fixed.
|
|---|
| 45 | - Added a New constructor and updateService method for the Java class
|
|---|
| 46 | DimService. These allow the creation and update of a DimService by
|
|---|
| 47 | passing another DimService. The data and format of the DimService
|
|---|
| 48 | will be copied to the new one. Usefull for structured data.
|
|---|
| 49 |
|
|---|
| 50 | 02/06/2004
|
|---|
| 51 | Changes for version 14.2-1:
|
|---|
| 52 | - Fixed a bug in the java version that would make DIP crash when
|
|---|
| 53 | extracting data items (file format.java)
|
|---|
| 54 |
|
|---|
| 55 | 12/06/2004
|
|---|
| 56 | Changes for version 14.3:
|
|---|
| 57 |
|
|---|
| 58 | - DIM Server Exit_handler: A server can specify an exit handler
|
|---|
| 59 | by using:
|
|---|
| 60 | dis_add_exit_handler(exitHandler) or
|
|---|
| 61 | DimServer::addExitHandler()/virtual void exitHandler()
|
|---|
| 62 | The exitHandler will be called in the following conditions:
|
|---|
| 63 | - DNS node undefined
|
|---|
| 64 | - Services already declared in DNS
|
|---|
| 65 | - DNS doesn't accept connections from this machine
|
|---|
| 66 | - An EXIT command from a client
|
|---|
| 67 | If the user doesn't declare an exit handler, the DIM server will
|
|---|
| 68 | exit, otherwise it is up to the user.
|
|---|
| 69 |
|
|---|
| 70 | - DIM Error_handler: A server or a client can specify an error_handler
|
|---|
| 71 | by using:
|
|---|
| 72 | dis_add_error_handler(errorHandler)
|
|---|
| 73 | dic_add_error_handler(errorHandler)
|
|---|
| 74 | DimServer::addErrorHandler()/virtual void errorHandler(...)
|
|---|
| 75 | DimClient::addErrorHandler()/virtual void errorHandler(...)
|
|---|
| 76 | The error_handler will be called whenever DIM wants to report an
|
|---|
| 77 | error (in this case all stdout/stderr prints will be suppressed).
|
|---|
| 78 | The errorHandler is called with the following parameters:
|
|---|
| 79 | int severity:
|
|---|
| 80 | 0: info
|
|---|
| 81 | 1: warning
|
|---|
| 82 | 2: error
|
|---|
| 83 | 3: fatal
|
|---|
| 84 | int error_code
|
|---|
| 85 | possible codes listed in dim_common.h
|
|---|
| 86 | char *msg
|
|---|
| 87 | If the user declared an error handler for a server and an error with
|
|---|
| 88 | severity = fatal is received the exit handler will also be called.
|
|---|
| 89 | For a client if an error with severity = fatal is received and there
|
|---|
| 90 | is no error handler declared the process will exit.
|
|---|
| 91 |
|
|---|
| 92 | - Java DIM: the same functionality is available in the form of a
|
|---|
| 93 | DimErrorHandler class and a DimExitHandler class which can be used as
|
|---|
| 94 | in the example:
|
|---|
| 95 | public static void main(String[] args) {
|
|---|
| 96 | DimErrorHandler erid = new DimErrorHandler()
|
|---|
| 97 | {
|
|---|
| 98 | public void errorHandler(int severity, int code, String msg)
|
|---|
| 99 | {
|
|---|
| 100 | System.out.println("Error: "+msg+" sev: "+
|
|---|
| 101 | severity);
|
|---|
| 102 | }
|
|---|
| 103 | };
|
|---|
| 104 | DimExitHandler exid = new DimExitHandler()
|
|---|
| 105 | {
|
|---|
| 106 | public void exitHandler(int code)
|
|---|
| 107 | {
|
|---|
| 108 | System.out.println("Exit: "+code);
|
|---|
| 109 | }
|
|---|
| 110 | };
|
|---|
| 111 | ...
|
|---|
| 112 |
|
|---|
| 113 | - Getting and Setting the DIM_DNS_NODE from a program:
|
|---|
| 114 | The calls:
|
|---|
| 115 | dim_set_dns_node
|
|---|
| 116 | dim_get_dns_node
|
|---|
| 117 | and the corresponding C++ calls:
|
|---|
| 118 | DimServer::setDnsNode and DimServer::getDnsNode,
|
|---|
| 119 | DimClient::setDnsNode and DimClient::getDnsNode
|
|---|
| 120 | already existed,
|
|---|
| 121 | they have now been complemented with:
|
|---|
| 122 | dim_set_dns_port
|
|---|
| 123 | dim_get_dns_port
|
|---|
| 124 | and the static C++ calls:
|
|---|
| 125 | DimServer::setDnsNode(node, port),DimServer::getDnsPort(),
|
|---|
| 126 | DimClient::setDnsNode(node, port), DimClient::getDnsPort()
|
|---|
| 127 |
|
|---|
| 128 | - In Java the folowing methods have been added to the classes DimServer
|
|---|
| 129 | and DimClient:
|
|---|
| 130 | public static void setDnsNode(String nodes);
|
|---|
| 131 | public static void setDnsNode(String nodes, int port);
|
|---|
| 132 | public static String getDnsNode();
|
|---|
| 133 | public static int getDnsPort();
|
|---|
| 134 |
|
|---|
| 135 | - the Java method DimService.getName() has been added.
|
|---|
| 136 |
|
|---|
| 137 | - In C++ the creation of a new DimService could fail, for example, if
|
|---|
| 138 | the service already existed in this server, this was not reported, since
|
|---|
| 139 | a constructor can't return a value.
|
|---|
| 140 | With the new error handling mechanisms, a user can declare an error_handler,
|
|---|
| 141 | check if the error code is DIMSVCDUPLC and generate an exception which
|
|---|
| 142 | will be thrown withing the DimService creation.
|
|---|
| 143 | - Dim used to pass timestamps between servers and clients as an integer
|
|---|
| 144 | for seconds since January 1970 and a short for milliseconds.
|
|---|
| 145 | Now it will be one integer also for the milliseconds. By default DIM
|
|---|
| 146 | still uses milliseconds, but if a server passes nanoseconds to
|
|---|
| 147 | dis_set_timestamp the client will receive nanoseconds when doing
|
|---|
| 148 | dic_get_timestamp.
|
|---|
| 149 |
|
|---|
| 150 | 08/07/2004
|
|---|
| 151 | Changes for version 14.4:
|
|---|
| 152 |
|
|---|
| 153 | - Java DIM: In order to allow a different error handler to be called for the
|
|---|
| 154 | server and the client (if both in the same process) The calls:
|
|---|
| 155 | DimServer.addErrorHandler(DimErrorHandler handler) and
|
|---|
| 156 | DimClient.addErrorHandler(DimErrorHandler handler)
|
|---|
| 157 | Should be called respectively by the server or the client in order to install
|
|---|
| 158 | the Error Handler. For compatibitlity, the call:
|
|---|
| 159 | DimServer.addExitHandler(DimErrorHandler handler)
|
|---|
| 160 | was also added.
|
|---|
| 161 |
|
|---|
| 162 | They can now be used as in the example (for a server):
|
|---|
| 163 | public static void main(String[] args) {
|
|---|
| 164 | DimErrorHandler erid = new DimErrorHandler()
|
|---|
| 165 | {
|
|---|
| 166 | public void errorHandler(int severity, int code, String msg)
|
|---|
| 167 | {
|
|---|
| 168 | System.out.println("Error: "+msg+" sev: "+
|
|---|
| 169 | severity);
|
|---|
| 170 | }
|
|---|
| 171 | };
|
|---|
| 172 | DimServer.addErrorHandler(erid);
|
|---|
| 173 | DimExitHandler exid = new DimExitHandler()
|
|---|
| 174 | {
|
|---|
| 175 | public void exitHandler(int code)
|
|---|
| 176 | {
|
|---|
| 177 | System.out.println("Exit: "+code);
|
|---|
| 178 | }
|
|---|
| 179 | };
|
|---|
| 180 | DimServer.addExitHandler(exit);
|
|---|
| 181 | ...
|
|---|
| 182 |
|
|---|
| 183 | - In a server it was already possible to find out inside a callback (for example
|
|---|
| 184 | when a command was received):
|
|---|
| 185 | - from which client id the message came:
|
|---|
| 186 | int dis_get_conn_id()
|
|---|
| 187 | - The name of this client in the form <pid>@<node_name>
|
|---|
| 188 | int dis_get_client(char *name)
|
|---|
| 189 | The equivalent C++ calls:
|
|---|
| 190 | int DimServer::getClientId();
|
|---|
| 191 | char *DimServer::getClientName();
|
|---|
| 192 | And Java calls:
|
|---|
| 193 | int DimServer.getClientId();
|
|---|
| 194 | String DimServer.getClientName();
|
|---|
| 195 | Where also available.
|
|---|
| 196 |
|
|---|
| 197 | These calls were now complemented in 3 ways:
|
|---|
| 198 | 1 - They can be done also by clients to find out which server is providing a service
|
|---|
| 199 | inside a callback (for example when a service is received).
|
|---|
| 200 | For this purpose the following "C" calls where added:
|
|---|
| 201 | - from which server id the message came:
|
|---|
| 202 | int dic_get_conn_id()
|
|---|
| 203 | - The name of this server in the form <server_name>@<node_name>
|
|---|
| 204 | int dic_get_server(char *name)
|
|---|
| 205 | And The equivalent C++ calls:
|
|---|
| 206 | int DimClient::getServerId();
|
|---|
| 207 | char *DimClient::getServerName();
|
|---|
| 208 | And Java calls:
|
|---|
| 209 | int DimClient.getServerId();
|
|---|
| 210 | String DimClient.getServerName();
|
|---|
| 211 | 2 - These calls are also available inside the errorHandler callbacks.
|
|---|
| 212 | Can be used to find out if the error originated from a specific connection,
|
|---|
| 213 | in which case conn_id (or clientID or ServerId) != 0.
|
|---|
| 214 | Or if it is a generic error, afecting all connections in which case conn_id = 0.
|
|---|
| 215 | 3 - A new type of calls has been added which allows to find out:
|
|---|
| 216 | For a server - which services are being used by the current client (i.e. the
|
|---|
| 217 | client that triggered the execution of this callback)
|
|---|
| 218 | For a client - Which services are being provided by the current server (i.e
|
|---|
| 219 | the server that triggered the execution of this callback)
|
|---|
| 220 |
|
|---|
| 221 | This calls are the following in "C":
|
|---|
| 222 | - char *dis_get_client_services(conn_id)
|
|---|
| 223 | - char *dic_get_server_services(conn_id)
|
|---|
| 224 | They return a list of services separated by '\n'
|
|---|
| 225 | In C++:
|
|---|
| 226 | - char **DimServer::getClientServices();
|
|---|
| 227 | - char **DimClient::getServerServices();
|
|---|
| 228 | They return an array of pointers to service names. The array is terminated by
|
|---|
| 229 | a null pointer.
|
|---|
| 230 | In Java:
|
|---|
| 231 | - String[] DimServer.getClientServices();
|
|---|
| 232 | - String[] DimClient.getServerServices();
|
|---|
| 233 |
|
|---|
| 234 | An example in C++ of the usage of the new calls in an ErrorHandler:
|
|---|
| 235 |
|
|---|
| 236 | class ErrorHandler : public DimErrorHandler
|
|---|
| 237 | {
|
|---|
| 238 | void errorHandler(int severity, int code, char *msg)
|
|---|
| 239 | {
|
|---|
| 240 | int index = 0;
|
|---|
| 241 | char **services;
|
|---|
| 242 | cout << severity << " " << msg << endl;
|
|---|
| 243 | services = DimClient::getServerServices();
|
|---|
| 244 | cout<< "from "<< DimClient::getServerName() << " services:" << endl;
|
|---|
| 245 | while(services[index])
|
|---|
| 246 | {
|
|---|
| 247 | cout << services[index] << endl;
|
|---|
| 248 | index++;
|
|---|
| 249 | }
|
|---|
| 250 | }
|
|---|
| 251 | public:
|
|---|
| 252 | ErrorHandler() {DimClient::addErrorHandler(this);}
|
|---|
| 253 | };
|
|---|
| 254 |
|
|---|
| 255 | And in Java:
|
|---|
| 256 |
|
|---|
| 257 | ...
|
|---|
| 258 | DimErrorHandler eid = new DimErrorHandler()
|
|---|
| 259 | {
|
|---|
| 260 | public void errorHandler(int severity, int code, String msg)
|
|---|
| 261 | {
|
|---|
| 262 | System.out.println("Error: "+msg+" sev: "+severity);
|
|---|
| 263 | String[] list = DimClient.getServerServices();
|
|---|
| 264 | System.out.println("Services: ");
|
|---|
| 265 | for(int i = 0; i < list.length; i++)
|
|---|
| 266 | System.out.println(list[i]);
|
|---|
| 267 | }
|
|---|
| 268 | };
|
|---|
| 269 | DimClient.addErrorHandler(eid);
|
|---|
| 270 |
|
|---|
| 271 | 02/08/2004
|
|---|
| 272 | Changes for version 14.5:
|
|---|
| 273 | - Fixed a bug in dic.c - related to commands terminating after a connection was closed,
|
|---|
| 274 | affected in particular DimBrowser "RPC" calls.
|
|---|
| 275 |
|
|---|
| 276 | 02/08/2004
|
|---|
| 277 | Changes for version 14.6:
|
|---|
| 278 | - Noticed that since the changes of version v14r4 the Dns was not printing any error
|
|---|
| 279 | messages anymore - Fixed.
|
|---|
| 280 | - In Windows SO_REUSEADDR doesn't work properly, so two DNSs could be running at the
|
|---|
| 281 | same time using the same port number on the same PC - Fixed, now like in Linux, the
|
|---|
| 282 | second one exits (printing an error message).
|
|---|
| 283 |
|
|---|
| 284 | 10/08/2004
|
|---|
| 285 | Changes for version 14.7:
|
|---|
| 286 | - The TCPIP error "Host Unknown" was not treated or reported properly. A client could
|
|---|
| 287 | report DNS found when the DNS node was set to be an unexisting machine - fixed.
|
|---|
| 288 |
|
|---|
| 289 | Please check the Manual for more information at:
|
|---|
| 290 | http://www.cern.ch/dim
|
|---|